BoW, TF-IDF 그리고 PPMI

chchch·2021년 10월 18일
0

NLP

목록 보기
1/2
post-thumbnail

자연어처리에서 문서들의 요약이나 키워드 추출을 위해서 토픽 모델링(Topic modeling)을 사용하는 경우가 많다. 토픽 모델링에서는 단어들의 빈도나 동시발생횟수 등의 개념들을 사용한다. 이때, 효과적인 정보 요약을 위해 많은 개념들이 제안되었고 그 중 BoW, TF-IDF 그리고 PPMI에 대해서 간략하게 소개하겠다.


BoW, TF-IDF 그리고 PPMI

Bag of Words(BoW)

Bag of Words(BoW)는 자연어 처리에서 문장 혹은 말뭉치(corpus)를 요약하기 위한 가장 단순한 방법이다. 단어들의 등장 순서 상관없이 등장 횟수만을 세서 벡터로 표기한다.

"A man is watching a movie"

위의 문장을 BoW 방법을 통해 벡터로 표현할 수 있다.

단어amaniswatchingmovie
빈도21111

벡터답게 표현하면

(2 1 1 1 1)(2 ~ 1 ~ 1 ~ 1 ~ 1)

이다. 여러 개의 문장 혹은 문서에 대한 BoW 벡터들을 쌓아서 만든 행렬을 문서-단어 행렬(Document-term matrix, DTM)라고 한다.

어떤 단어의 빈도가 글의 특징을 설명한다는 가정하에서는 BoW 방법만으로도 충분히 좋은 모델링이 될 것을 기대할 수 있다. 예를 들어 '올림픽', '축구', '동메달' 등의 단어들을 통해 어떤 글인지 짐작할 수 있다. 그리고 많은 분야에서 단순한 BoW 방법을 높게 평가하여 활용하고 있다.

Term Frequency - Inverse Document Frequency(TF-IDF)

앞에서 든 예시 문장의 BoW로 생성한 벡터를 보면 예상되는 문제가 있다. 바로 "a"와 같은 형식적인 요소이며 큰 의미가 없는 단어들의 빈도가 높다는 것이다. 그리고 이 단어들을 가지고는 글의 특징을 파악하기 어렵다. 이러한 문제를 해결하기 위해 제안된 방법이 바로 Term Frequency - Inverse Document Frequency(TF-IDF)이다. 이름을 보면 어떤 의미인지를 알 수 있다. 문서 dd에서 특정 단어 ww에 대한 TF-IDF 값은 다음과 같이 계산할 수 있다.

TF-IDF(w,d)=TF(w,d)×logNDF(w)\text{TF-IDF}(w, d) = \text{TF}(w, d) \times \log \frac{N}{\text{DF}(w)}

여기서 TF(w,d)(w, d)는 단어 wwdd 문서에서 나타난 횟수, NN는 모든 문장의 수 그리고 DF(w)(w)는 단어 ww가 등장한 문서의 수다. 다음의 문장을 추가하여 위의 예시와 합쳐서 생각을 해보자.

"A woman is having lunch"

DTM을 만들어보자.

단어amaniswatchingmoviewomanhavinglunch
문장121111000
문장210100111

이제 TF-IDF(a, 문장1)를 계산해보자.

TF-IDF(a, 문장1)=2×log22=0\text{TF-IDF(a, 문장1)} = 2 \times \log \frac{2}{2} = 0

이제 TF-IDF(woman, 문장2)를 계산해보자.

TF-IDF(woman, 문장2)=1×log21=0.693\text{TF-IDF(woman, 문장2)} = 1 \times \log \frac{2}{1} = 0.693

TF-IDF 표를 만들어 보면 다음과 같다.

단어amaniswatchingmoviewomanhavinglunch
문장100.69300.6930.693000
문장2000000.6930.6930.693

결과를 토대로 TF-IDF의 의미를 알아보자. 표를 보면 문장에서 a, is와 같은 의미가 없는 단어들은 0의 값을 갖게 되었다(지금의 간단한 예에서는 0을 가졌지만 더 많은 데이터를 통해서 계산하면 매우 작은 값을 가질 것이다). TF-IDF의 원리는 많은 문장에서 등장하는 단어는 의미가 없이 형식을 위해 등장하는 단어로 간주해서 가중치를 매우 낮게 준다. 그 가중치가 log\log 식으로 된 IDF이다. IDF는 희박하게 등장하는 단어의 비중은 높여주는 역할을 해서 문장의 특징을 잡아낼 수 있도록 한다.


Positive Pointwise Mutual Information(PPMI)

앞에서 단어의 개별적인 정보를 보았다면 한 단계 더 나아가서 두 단어 사이의 관계를 생각해볼 수 있다. 가장 단순하게 두 단어의 동시출현횟수를 생각할 수 있다. 점별 상호 정보량(Pointwise Mutual Information, PMI)는 두 단어의 동시에 일어나는 관계를 나타내는 지표이다. 두 단어 w1,w2w_1, w_2의 PMI는 다음과 같이 계산한다.

PMI(w1,w2)=logp(w1,w2)p(w1)p(w2)\text{PMI}(w_1, w_2) = \log \frac{p(w_1, w_2)}{p(w_1)p(w_2)}

위의 식에서 두 단어 w1w_1, w2w_2의 등장이 독립적이면 결합확율은 각각의 확률로 나뉘어져 PMI 값은 0이 된다. 하지만 두 단어의 등장이 독립적이지 않다면, 즉 두 단어의 등장에 양의 상관관계가 있어서 자주 등장한다면 PMI 값은 커질 것이다. 실제로 PMI를 계산하기 위해서는 문장에서 등장하는 표본비율로 확률값을 대체하여 경험적 근사치를 구한다.

하지만 단어의 수가 너무 많아서 함께 등장하지 않는 경우가 발생할 수 있다. 그렇게 될 경우에 PMI는 -\infty값을 가지게 된다. 이와 같은 문제를 예방하기 위해 양의 점별 상호 정보량(Positive Pointwise Mutual Information, PPMI)가 사용된다.

PPMI(w1,w2)=max(PMI(w1,w2),0)\text{PPMI}(w_1, w_2) = \max(\text{PMI}(w_1, w_2), 0)

단순하게 PMI에서 음수를 가지는 값들은 0으로 대체하면 된다. 이를 통해 -\infty나 음수를 갖지 못하게 된다.

PPMI는 직관적으로도 두 단어의 동시출현횟수를 나타낸 좋은 지표이지만 Word2Vec 방법 중 하나인 Skip-gram 방법의 목적함수와의 연관성에 대한 연구가 있어서 의미가 큰 지표이다. 따라서 단어간의 상관관계를 고려하기 위한 임베딩 방법을 사용할 때 많이 사용된 방법이다.


참고자료

  • 위키피디아, tf-idf
  • 이기창, 한국어 임베딩
  • Levy, O., & Goldberg, Y. (2014). Neural word embedding as implicit matrix factorization. Advances in neural information processing systems
profile
머신러닝과 통계학을 공부하는 사람

0개의 댓글