벡터가 어떻게 의미를 가지는가
컴퓨터가 자연어를 처리하는 과정의 본질은 결국은 계산일뿐이다. 다만 여기서 계산이란 자연어를 임베딩한 벡터를 이용한 계산을 의미한다. 그렇다면 자연어의 의미를 어떻게 임베딩에 함축시킬 수 있을까
자연어의 통계적 정보를 임베딩에 넣는 방법이 있다.
이때 통계정보는 크게 3가지가 있다. 백오브워즈/언어모델/분포 가정
백오브워즈 가정 | 언어 모델 | 분포 가정 | |
내용 |
어떤 단어가 많이 쓰였는가 <단어의 빈도/등장여부 중점> |
단어가 어떤 순서로 쓰였는가 <단어의 등장 순서 중점> |
어떤 단어가 같이 쓰였는가 <이웃단어(문맥) 중점> |
대표 통계량 | TF-IDF | - | PMI |
대표 모델 | Deep Averaging Network | ELMo, GPT | Word2Vec |
백오브워즈(bag of words) 가정
"bag"은 집합을 의미한다. 집합이기때문에 원소의 순서는 당연히 고려되지 않는다. 즉, 단어의 등장 순서는 고려하지 않고 문서 내에 단어의 등장 빈도를 임베딩으로 쓰는 기법을 의미한다.
즉, 백오브워즈의 철학은 "저자가 생각한 주제는 문서의 단어 사용에 녹아 있을 것이다"/"많이 쓰인 단어는 주제와 더 강한 관련이 있을 것이다" 라는 가정을 전제한다
결국 백오브워즈 임베딩을 사용한다면 사용자 질의에 가장 적절한 문서를 보여주기 위해서는 사용자의 질의(자연어)를 백오브워즈 임베딩(A 벡터)을 수행하고 각각의 문서들도 백오브워즈 임베딩(B,C,D......벡터)로 변환하여 그 임베딩들 사이의 코사인 유사도들을 구해서 ( A,B의 코사인 유사도, A,C의 코사인 유사도, A,D의 코사인 유사도......) 가장 높은 유사도를 가지는 문서를 사용자에게 노출한다.
그러나 단어의 빈도 또는 등장여부를 그대로 임베딩에 사용한다면 문제가 있다
대부분의 문서에서 공통적으로 사용되는 단어들이 있을텐데 그러한 단어들로 문서의 주제를 추측하면 무리가 있을 것이다. 예를 들면 한국어 문서에서 "을/를" 또는 "이/가"등의 조사가 있다.
이러한 문제를 해결하기 위한 임베딩 기법이 바로 TF-IDF이다.
TF | 어떤 단어가 특정 문서에 얼마나 많이 쓰였는지(Term Frequency) |
DF | 특정 단어가 나타난 문서의 수(Document Frequency) |
IDF | 전체 문서 수(N)를 해당 단어의 DF로 나눈 뒤 로그를 취한 값(Inverse Document Frequency) |
즉, TF-IDF값은 TF와 IDF의 곱인데
IDF값이 클수록 특이한 단어이므로 IDF값은 단어의 주제 예측능력이라고 볼 수 있다.
단어의 주제 예측능력(IDF)가 커질 수록 TF-IDF의 가중치가 커지고 작을 수록 가중치가 작아진다
따라서 TF-IDF기법을 이용하면
문서내 단어의 빈도수(TF)만 활용하는 것이 아니라
주제 예측 능력(IDF)이 높은 단어를 가중치를 높힌 새로운 통계량(TF-IDF)을 사용할 수 있고 이 통계량(TF-IDF)는 단순한 백오브워즈보다 더 품질이 좋은 임베딩이라고 할 수 있다.
백오브워즈 가정의 딥러닝 버전 모델로는 Deep Averaging Network(DAN)이 있다.
DAN은 문장 내의 토큰들을 같은 차원의 벡터로 만들고 그 벡터들을 평균합을 한 벡터를 input으로 여러 문서들을 통해 학습시키면서 softmax를 통해 분류하는 모델이다.
'자연어처리' 카테고리의 다른 글
자연어처리(5) - Word2Vec (0) | 2020.02.19 |
---|---|
자연어처리 스터디기록(3)-딥러닝 정리 (0) | 2020.02.08 |
자연어처리 스터디(4)- neural language model (0) | 2020.02.05 |
자연어처리 스터디 기록(1)-임베딩 (0) | 2020.01.23 |