딥러닝/자연어

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

행복한 감자 형아 2025. 3. 10. 13:24

 

1. DTM 표기법

 

문서 단어 행렬이란 다수의 문서에서 등장하는 각 단어들의 빈도를 행렬로 표현한 것을 말합니다.

쉽게 생각하면 각 문서에 대한 BoW를 하나의 행렬로 만든 것으로 생각할 수 있으며,

BoW와 다른 표현 방법이 아니라 BoW 표현을 다수의 문서에 대해서 행렬로 표현하고 부르는 용어 입니다.

 

 

 

  과일이 길고 노란 먹고 바나나 사과 싶은 저는 좋아요
문서1 0 0 0 1 0 1 1 0 0
문서2 0 0 0 1 1 0 1 0 0
문서3 0 1 1 0 2 0 0 0 0
문서4 1 0 0 0 0 0 0 1 1

 

각 문서에서 등장한 단어의 빈도를 행렬의 값으로 표기합니다.

문서 단어 행렬은 문서들을 서로 비교할 수 있도록 수치화할 수 있다는 점에서 의의를 갖습니다.

 

만약 필요에 따라서는 형태소 분석기로 단어 토큰화를 수행하고, 

불용어에 해당되는 조사들 또한 제거하여 더 정제된 DTM을 만들 수도 있을 것입니다.

 

2. 문서 단어 행렬 (DTM)의 한계

DTM은 매우 간단하고 구현하기도 쉽지만, 본질적으로 갖는 몇 가지 한계들이 있습니다.

 

1) 희소 표현 (Sparse representation)

원-핫 벡터는 단어 집합의 크기가 벡터의 차원이 되고 대부분의 값이 0이 되는 벡터입니다.

원-핫 벡터는 공간적 낭비와 계산 리소스를 증가시킬 수 있다는 점에서 단점을 가집니다.

 

DTM도 마찬가지입니다.

DTM에서의 각 행을 문서 벡터라고 해봅시다.

각 문서 벡터의 차원은 원-핫 벡터와 마찬가지로 전체 단어 집합의 크기를 가집니다.

(비교하고자 하는 문서가 서로 다른 단어를 많이 가지고 있으면 차원이 자꾸 자꾸 증가하겠네요...)

 

만약 가지고 있는 전체 코퍼스가 방대한 데이터라면 문서 벡터의 차원은 수만 이상의 차원을 가질 수도 있습니다. 

또한, 많은 문서 벡터가 대부분의 값이 0을 가질 수도 있습니다.

(위 예시 테이블에서도 확인 할 수 있습니다.)

 

원-핫 벡터나 DTM과 같은 대부분의 값이 0인 표현을 희소 벡터 (sparse vector) 또는 희소 행렬 (sparse matrix) 라고 부르는데, 

희소 벡터는 많은 양의 저장 공간과 높은 계산 복잡도를 요구합니다.

이러한 이유로 전처리를 통해 단어 집합의 크기를 줄이는 일은 BoW 표현을 사용하는 모델에서 중요할 수 있습니다.

 

앞서 배운 텍스트 전처리 방법을 사용하여 구두점, 빈도수가 낮은 단어, 불용어를 제거하고,

어간이나 표제어 추출을 통해 단어를 정규화하여 단어 집합의 크기를 줄일 수 있습니다.

 

2) 단순 빈도 수 기반 접근

여러 문서에 등장하는 모든 단어에 대해서 빈도 표기를 하는 이런 방법은 떄로는 한계를 가지기도 합니다.

예를 들어 영어에 대해서 DTM을 만들었을 때,

불용어인 the는 어떤 문서이든 자주 등장할 수 밖에 없습니다.

그런데 유사한 문서인지 비교하고 싶은 문서1, 2, 3에서 동일하게 the가 빈도수가 높다고 해서

이 문서들이 유사한 문서라고 판단해서는 안 됩니다.

 

각 문서에는 중요한 단어와 불필요한 단어들이 혼재되어 있습니다.

불용어(stopwords)와 같은 단어들은 빈도수가 높더라도 자연어 처리에 있어 의미를 갖지 못하는 단어 입니다.

그렇다면 DTM에 불용어와 중요한 단어에 대해서 가중치를 줄 수 있는 방법은 없을까요?

 

이러한 아이디어를 적용한 TF-IDF 알고리즘이 있습니다.