새소식

딥러닝

[Feature Engineering]- Text Representation_BoW

  • -

비정형 데이터인 텍스트를 표현하는 방법에는 여러가지가 있다.

  BOW  

문장을 이해하는데 순서가 중요할까?

정확히 문장을 이해하는데 있어서는 단어의 순서는 중요하다.

그러나 이 문장이 어떤 주제인지만 파악하고자 한다면 문장의 순서는 크게 중요하지 않다.

다양하다. 텍스트를 표현하는 방법은 자연어 처리에서

이 문장은 순서가 엉망이지만 텍스트를 표현하는 방법에 대해 이야기한다는 것을 파악할 수는 있다.

https://dudeperf3ct.github.io/lstm/gru/nlp/2019/01/28/Force-of-LSTM-and-GRU/

 

BOW(Bag of Words)는 텍스트를 단어의 순서는 전혀 고려하지 않고 단어 단위로 나누어, 단어들의 출현 빈도(frequency)에만 집중하는 텍스트 데이터의 수치화 표현 방법이다.

(Bag of Words라는 이름에서부터 알 수 있듯이 텍스트 데이터의 단어들을 모두 가방에 넣고 흔들어 섞는다면, 단어의 순서는 중요하지 않게 되며 가방안에 특정 단어가 몇 개 있는지만 중요하게 된다.)

 

이렇게 단어 단위로 쪼갠 텍스트를 하나의 긴 벡터로 표현한다.

벡터 중의 각 차원은 하나의 단어를 대표하고, 해당 차원에 대응하는 가중치는 해당 단어가 문장에서 얼마나 중요한지를 나타낸다.

 

일반적으로 가중치는 TF-IDF를 사용하여 계산한다.

 

 TF-IDF 

Tf-idf(t,d) = TF(t,d) X IDF(t)

Tf-idf는 주로 문서의 유사도를 구하는 작업, 검색 시스템에서 검색 결과의 중요도를 정하는 작업, 문서 내에서 특정 단어의 중요도를 구하는 작업 등에 사용된다.

d: 문서   t: 단어   n: 문서의 총 개수
tf(d,t) : (term frequency) : 특정 문서 d에서의 특정 단어 t의 등장 횟수
idf(d, t) : df(t)에 반비례하는 수
df(t) : (document frequency) : 특정 단어 t가 등장한 문서의 수

 

$$ idf(d,t)=log(n / 1+df(t)) $$

log를 취해주지 않으면, 희귀 단어들에 엄청난 가중치가 부여될 수 있다.

$$ Tf-idf \ score = tf \ * \ log(\frac{n} {1+df}) $$

기존 BoW에서 문서 내 단어 빈도수를 고려하면서(tf), 다른 문서에도 너무 자주 나오는 단어는 중요도를 낮추어 점수를 계산한다(idf).

직관적으로 해석한다면 하나의 단어가 많은 문서에 출현한다면 그 단어는 비교적 자주 사용하는 단어로서 어떤 문서에서 특수한 의미를 구별하는데 큰 공헌을 하지 못할 가능성이 높다. 따라서 가중치에 페널티를 부여한다고 볼 수 있다.

즉, BoW vector에서 tf 점수를 idf로 normalize 한 것이라고 볼 수 있다.

 

  • BoW, Tf-idf 의 한계점
    1. 순서가 중요한 경우 성능이 좋지 않음
    2. 순서가 상관없는 topic classification같은 경우는 좋은 성능을 보일 수 있지만 순서가 중요한 기계번역 같은 task에서는 성능이 좋지 않다.
    3. vocabulary size가 증가함에 따른 sparse representation 문제(Sparse Matrix)
    4. 단어 간의 연관성을 표현하기 어려움
728x90
Contents