본문 바로가기
필기 노트/자연어 처리 입문

[자연어 처리 입문] Count-based word representation (BoW, DTM, TF-IDF)

by misconstructed 2020. 12. 31.
728x90

<딥 러닝을 이용한 자연어 처리 입문> 읽고 간단하게 정리한 내용이다. 

Count-based word representation 중 가장 대표적인 BoW, DTM, TF-IDF에 대해서 간단하게 알아본다.


Count-based 단어의 표현 방법은 크게 두 가지로 구분할 수 있다. 현재 단어만 고려하는 local representation(discrete representation)과 주변 단어들을 모두 고려하는 distributed representation (continuous representation) 으로 구분할 수 있다. 이번에는 count-based word representation 방식 중 몇 가지를 알아본다.

# Bag-of-Words (BoW)

BoW 방식은 단어들의 순서를 고려하지 않고, 출연 빈도수에만 집중하는 방식이다. BoW 를 구하는 순서는 다음과 같다.

  1. 각 단어에 고유한 정수 인덱스를 부여한다. (전체 corpus를 구성하는 단어들에 대해)
  2. 각 인덱스에 위치한 단어 토큰이 전체 corpus에서 나타난 횟수를 count 한다.
  3. count 한 횟수를 각 인덱스에 기록한다.

Bow는 sklearn의 CountVectorizer를 사용해서 구축할 수 있다. stop words도 지정해서 제외시킬 수 있다. 

예를 들어, 문장 [정부가 발표하는 물가상승률과 소비자가 느끼는 물가상승률은 다르다.] 에 대해서 BoW를 구축한다면 다음과 같이 할 수 있다. 

  1. 문장을 토큰화 한다 : ['정부', '가', '발표', '하는', '물가상승률', '과', '소비자', '느끼는', '은', '다르다']
  2. 각 토큰에 인덱스를 부여한다 : ('정부': 0, '가': 1, '발표': 2, '하는': 3, '물가상승률': 4, '과': 5, '소비자': 6, '느끼는': 7, '은': 8, '다르다': 9)
  3. 각 토큰이 전체 문서에서 몇번 나타나는지 count하고, count한 값을 해당 인덱스에 입력한다 : [1, 2, 1, 1, 2, 1, 1, 1, 1, 1]

# Document-Term matrix (DTM)

DTM은 BoW의 확장이라고 보면 된다. BoW는 하나의 문서에 대해서 작업을 수행했다면, DTM은 다수의 문서에 대해서 작업을 수행한다. 결과 벡터를 구축하는 과정을 BoW 와 동일하기 때문에 생략하기로 한다.

DTM의 단점은 (BoW의 단점이라고 볼 수도 있다.) 결과로 생성된 벡터가 매우 sparse 하다는 것이다. 벡터를 구성하는 원소들이 대부분 0 이기 때문에 공간을 낭비하고 계산 리소스 낭비가 심해지게 된다. 또한, 단순 빈도수 기반 접근이기 때문에, 불용어와 같이 자주 등장하는 단어나 큰 의미가 없는 단어에 대한 가중치가 커져서 잘못된 연산이 가능하다는 단점도 있다. 

# Term Frequency-Inverse Document Frequency (TF-IDF)

TF-IDF는 이름 그대로 단어의 반도수와 역-문서의 빈도수를 이용해서 단어를 표현하는 방식이다. DTM의 확장이라고 볼 수 있는데, DTM에서 구한 단어들의 가중치(중요도)를 추가적으로 부여하게 된다. 

문서를 $ d $, 단어를 $ t $, 문서의 총 개수를 $ n $ 이라고 할 때, TF-IDF는 다음과 같은 순서로 구할 수 있다.

  1. $ tf(d,t) $ : 특정 문서 $ d $ 에서 단어 $ t $ 가 등장한 횟수 (BoW나 DTM 과 동일한 과정이다.)
  2. $ df(t) $ : 특정 단어 $ t $ 가 등정한 문서의 개수
  3. $ idf(d, t) $ : $ df(t) $ 의 역수. log를 취해줘서 자주 등장하는 단어의 가중치가 너무 커지지 않고, 자주 등장하지 않는 단어의 가중치가 너무 작아지지 않도록 조절한다. 또한, 분모에 1을 더해줘서 $ df(t) $ 가 0 이 되더라고 분모가 0이 되는 것을 방지한다.
  4. 모든 단어들에 대해서 $ tf(d, t) $ 와 $ idf(d, t) $ 의 값을 곱해준다. 

[식-1] idf

TF-IDF에서는 모든 문서에 자주 등장하는 단어에 작은 가중치를 부여한다. 최종적으로 TF-IDF 값이 높은 단어일 수록 중요도가 높은 단어라고 판단할 수 있다. 

 

728x90

댓글