본문 바로가기

오늘의 코딩/머신러닝,Deep Learning

자연어 처리 시작! word embedding

 

특정 인물이 어떤 사람인지 알기 위해서는 어떻게 해야 할까? 한 방법으로는 그 사람의 주변인을 보면 된다는 말이 있다. 그렇다면 특정 단어의 특징을 알기 위해서는 어떻게 해야 할까? 마찬가지로 그 단어가 어울리는 단어를 확인하면 된다. Word Embedding은 이런 생각에서 나온 것 같다.

 

각 단어(token)을 One hot encoding 을 하면 모든 단어 벡터 사이의 거리가 같다. 모든 단어는 서로 독립적이라는 뜻인데, 전혀 그렇지 않다. 예를 들어, '강아지'와 '고양이'는 비슷한 카테고리이지만, '강아지'와 '날다'는 거의 관계가 없다. 이처럼 벡터 공간에 token을 뿌릴 때, 연관성이 높은 단어는 근처에, 연관성이 떨어지는 단어는 멀리 token 벡터를 배치해야 할 것이다. 

 

word embeddings

word embedding이란 단어를 n차원 벡터로 mapping하는 것을 의미한다.

one hot encoding을 한 token 각각에 해당하는 가중치 벡터를 찾는 것을 table lookup이라고 하며, dictionary와 가중치 행렬을 곱하면 단어의 특성에 맞춰 벡터 공간에 사영되는데 이를 word embedding이라고 한다. 간단히 말하자면 word embedding이란 관련성 높은 주변 단어를 통해 의미적 정보를 효율적으로 계산하여 단어별 특징을 추출하는 과정이다. 

 

represent하는 방법은 다음과 같다. 

CBoW

단어의 순서는 상관하지 않고, 모든 단어 벡터의 평균을 구한다. 

Relation Network-skip bigrams (개수는 상관 x)

모든 가능한 token 의 pair를 고려한다. 각 pair당 relation을 찾는다.

단점: 큰 연관성이 없는 단어도 굳이 계산하는 것은 시간낭비다! 

CNN - k-grams

지역적으로 token들의 연관성을 살펴본다. tokens - multi-word expressions-phrases-sentence 로 receptive field 확장

이미지처리와 달리 1d convolution layer을 사용한다.

 

 

참고 강의

edwith [조경현 교수] 딥러닝을 이용한 자연어 처리

https://www.edwith.org/deepnlp/joinLectures/17363

https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html