본문 바로가기
실버를 위한 코딩

단어문서 행렬(Term-Document Matrix, TDM)

by forSilver 2024. 6. 22.
반응형

단어문서 행렬(Term-Document Matrix, TDM)

단어문서 행렬(Term-Document Matrix, TDM)은 텍스트 마이닝과 자연어 처리(NLP)에서 자주 사용되는 도구입니다. TDM은 문서 집합에서 단어의 빈도를 분석하는 데 사용됩니다. 이를 통해 문서 간의 유사성을 측정하거나 특정 주제에 대한 중요 단어를 식별할 수 있습니다.

단어문서 행렬의 구성

TDM은 행과 열로 구성된 2차원 행렬입니다:

  • 행(Row): 각 행은 개별 단어(또는 용어)를 나타냅니다.
  • 열(Column): 각 열은 개별 문서를 나타냅니다.
  • 값(Value): 특정 문서에서 특정 단어의 발생 빈도(count)를 나타냅니다.

예시

다음은 간단한 예시입니다:

문서 집합:

  1. "I love data science"
  2. "Data science is fun"
  3. "I love programming"

이를 TDM으로 표현하면 다음과 같은 행렬이 됩니다:

  Doc1 Doc2 Doc3
I 1 0 1
love 1 0 1
data 1 1 0
science 1 1 0
is 0 1 0
fun 0 1 0
programming 0 0 1

TDM의 활용

  1. 텍스트 분류: 문서들을 분류하기 위해 TDM을 사용하여 피처(특징)를 생성합니다.
  2. 클러스터링: 문서들을 유사성에 따라 그룹화하는 데 사용됩니다.
  3. 주제 모델링: 문서 집합 내에서 주제를 추출하거나 숨겨진 구조를 찾기 위해 사용됩니다.
  4. 유사도 측정: 문서 간의 유사성을 계산하여 검색 엔진이나 추천 시스템에 활용됩니다.

TDM의 변형

  1. TF-IDF (Term Frequency-Inverse Document Frequency): 단어 빈도와 역문서 빈도를 결합하여 단어의 중요도를 평가합니다. 빈번하게 등장하는 단어에 가중치를 부여하여 TDM을 변형합니다.
  2. 문서-단어 행렬(Document-Term Matrix, DTM): TDM과 유사하지만 행과 열의 역할이 바뀝니다. 즉, 행이 문서, 열이 단어를 나타냅니다.

구현 예시 (Python 코드)

from sklearn.feature_extraction.text import CountVectorizer

# 문서 집합 정의
documents = [
    "I love data science",
    "Data science is fun",
    "I love programming"
]

# CountVectorizer를 사용하여 TDM 생성
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)

# TDM을 배열 형태로 변환 및 출력
tdm = X.toarray()
print(tdm)

# 단어 목록 출력
print(vectorizer.get_feature_names_out())

위 코드에서 CountVectorizer를 사용하여 TDM을 생성할 수 있습니다. 출력된 TDM과 단어 목록을 통해 문서 집합 내 단어의 빈도를 분석할 수 있습니다.

노트북에서 실행

정리

단어문서 행렬은 텍스트 데이터를 구조화하고 분석하는 데 매우 유용한 도구입니다. 이를 통해 다양한 NLP 작업을 효율적으로 수행할 수 있습니다.