[Text Representation-5] Fasttext
본 포스팅은 고려대학교 강필성 교수님의 비정형데이터분석 강의를 보고 정리한 것임을 미리 밝힙니다.
Distributed Representation Models
- NNLM(2003) - Distributed Representation의 개념을 처음 도입한 Word Embedding계의 시조새
- Word2Vec(2013) - 주변 단어들의 정보를 활용해서 원하는 단어의 Embedding을 학습 (CBOW vs Skip-gram)
- Glove(2014) - 단어의 동시발생빈도를 고려해서 Embedding을 학습
- Fasttext(2017) - 학습 과정에서 보지 못한 단어(OOV)들과 형태소 변화에 대응할 수 있도록 Sub-word 개념을 도입
FastText
개요
Fasttext는 페이스북에서 개발한 것으로 Word2Vec은 단어를 쪼개질 수 없는 단위로 생각한 반면, FastText는 하나의 단어 안에도 여러 단어들이 존재하는 것으로 간주한다. 한글의 경우 ‘그랬다면’, ‘그랬으면’, ‘그렇다면’ 등등 비슷하지만 문맥상 다르게 쓰이는 단어들이 굉장히 많다. FastText는 Out-of_Vocabulary (OOV) words 문제를 풀고자 한다. OOV는 학습 과정에서 보지 못한 단어들에 대한 임베딩 벡터를 구할 수 없는 것을 뜻한다.
요약
- 다양한 형태소 변화에 대한 대응이 어려운 문제를 해결하고자 함(Morphology)
- eat, eats, eaten, eater, eating
- 빈도가 적은 단어에 대한 정보를 많이 얻을 수 없다는 한계에 대해 어느 정도 정보를 포함하는 효과
- OOV 문제와 형태소 변화에 대응할 수 있도록 Sub-word 개념 도입
- 단어의 시작과 끝을 표기하기 위한 bracket추가 (띄어쓰기는 없음)
- eating -> < eating >
- 가능한 단어 자체에 대한 모든 n-gram 추출
- < eating > –> 3-grams
- <ea | eat | ati | tin | ing | ng>
- < eating > –> 3-grams
- 단어의 시작과 끝을 표기하기 위한 bracket추가 (띄어쓰기는 없음)
FastText는 학습할 때 Negative Sampling을 사용한 Skip-gram 방식을 차용한다
- I am eating food now
- Center Word에 해당하는 단어는 N-gram 임베딩과 Word 임베딩을 모두 더한 임베딩을 입력으로 사용
- Context Word에 해당하는 단어들의 Output은 1에 가깝도록,
- Negative Samples에 해당하는 단어들의 Output은 0에 가깝도록 가중치를 업데이트
손실함수??
\[J_{t}(\theta) = log\sigma(u_o^Tv_c) + \sum_{i=1}^{k} E_{i \sim P(w)}[log\sigma (-u_i^Tv_c)]\]자기 자신의 임베딩 벡터 + 단어의 각 n-gram 벡터??
\[score(w, c) = \sum_{g \in G_w} z_g^Tv_c\]
댓글남기기