본문 바로가기

DATA SCIENCE/NLP

[NLP] Swivel (Submatrix-Wise Vector Embedding Leamer)

이 포스트는 책 '한국어 임베딩(자연어 처리 모델의 성능을 높이는 핵심 비결 Word2Vec에서 ELMo, BERT까지, 이기창 저)'을 기반으로 작성되었습니다.

Swivel (Submatrix-Wise Vector Embedding Leamer)이란 2016년 구글에서 발표한 행렬 분해 기반 단어 임베딩 기법이다. 
(논문 pdf : https://arxiv.org/pdf/1602.02215.pdf)

GloVe가 단어-문맥 행렬을 분해하는 반면, Swivel은 PMI 행렬을 분해하여 PMI의 단점을 커버할 수 있도록 설계되었다. 

점별 상호 정보량 (PMI : Pointwise Mutual Information)
두 확률변수 사이 상관성을 수치화할 때 사용하는 단위로, 여기에서는 두 단어가 같이 등장하는 정도를 수치화한 값이다.
PMI(i,j) = log(P(i,j) / P(i)*P(j))
(https://heehehe-ds.tistory.com/entry/NLP-%EC%9E%84%EB%B2%A0%EB%94%A9Embedding-%EB%B0%A9%EC%8B%9D%EC%9D%98-%EC%A2%85%EB%A5%98 참고)

먼저 타깃 단어 i와 문맥 단어 j가 window 내 동시에 등장한 케이스가 있는 경우, 아래의 목적함수가 적용된다.
타깃 단어 i와 문맥 단어 j의 동시 등장 확률인 벡터 내적 값과 PMI 값이 일치하도록 벡터 값이 변화한다.
함수에 곱해지는 f(x_ij)는 단어 i, j의 동시 등장 빈도를 말한다. 
즉, 단어 i, j가 자주 동시에 등장할수록 벡터 내적 값과 PMI 값이 같아지도록 만든다는 것이다.

목적 함수 1 : 타깃 단어와 문맥 단어가 동시에 등장한 적이 있는 경우

만약 타깃 단어 i와 문맥 단어 j가 window 내에 한번도 동시에 등장하지 않은 경우,
PMI 값이 -∞로 발산한다. 따라서 다른 목적함수를 이용한다.
여기에서 나타난 pmi*는 단어의 동시 등장 횟수가 0인 것을 1로 가정하고 계산된다.
자주 등장하는 단어들의 동시 등장 횟수가 0인 경우 의미가 연관되어 있지 않을 것이라고 판단하는 반면,
자주 등장하지 않는 단어들의 동시 등장 횟수가 0인 경우 의미가 연관되어 있을 수 있다고 판단한다.

 

Python 코드

https://github.com/src-d/tensorflow-swivel

반응형

'DATA SCIENCE > NLP' 카테고리의 다른 글

[NLP] Doc2Vec  (0) 2020.05.27
[NLP] 가중 임베딩  (0) 2020.05.22
[NLP] GloVe (Global Word Vectors)  (0) 2020.05.18
[NLP] 잠재 의미 분석 (LSA)  (0) 2020.05.18
[NLP] FastText  (0) 2020.05.17