[Feature Engineering]- Text Representation_BoW
비정형 데이터인 텍스트를 표현하는 방법에는 여러가지가 있다.
BOW
문장을 이해하는데 순서가 중요할까?
정확히 문장을 이해하는데 있어서는 단어의 순서는 중요하다.
그러나 이 문장이 어떤 주제인지만 파악하고자 한다면 문장의 순서는 크게 중요하지 않다.
다양하다. 텍스트를 표현하는 방법은 자연어 처리에서
이 문장은 순서가 엉망이지만 텍스트를 표현하는 방법에 대해 이야기한다는 것을 파악할 수는 있다.
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 의 한계점
- 순서가 중요한 경우 성능이 좋지 않음
- 순서가 상관없는 topic classification같은 경우는 좋은 성능을 보일 수 있지만 순서가 중요한 기계번역 같은 task에서는 성능이 좋지 않다.
- vocabulary size가 증가함에 따른 sparse representation 문제(Sparse Matrix)
- 단어 간의 연관성을 표현하기 어려움