본문 바로가기

DATA SCIENCE/NLP

[NLP] FastText

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

FastText는 Word2Vec에서 단어 대신 문자 단위로 n-gram을 한 모델로, 페이스북에서 2017년에 개발했다.
(공식 github : https://github.com/facebookresearch/fastText)

Word2Vec과 대부분 내용이 동일하며, 사용하는 단위가 다르다는 차이점이 있다.
예를 들어, "카카오톡"이라는 단어를 n=3인 n-gram을 나타낼 때, <이 시작, >이 끝을 의미하는 기호라면,
<카카, 카카오, 카오톡, 오톡>으로 나타내며, n-gram으로 나누지 않은 <카카오톡>도 포함하여 나타낸다.
단어 임베딩은 아래와 같이 n-gram 벡터의 합으로 나타낸다.

이를 일반 수식으로 나타내면 다음과 같다.

FastText도 네거티브 샘플링 기법을 사용하며, 타깃 단어 t와 문맥 단어 c에 대해 다음과 같이 수식을 나타낼 수 있다.
Positive sample에 대해서는 Positive sample 확률을 최대화해야 하며,
Negative sample에 대해서는 Negative sample 확률을 최대화해야 한다.

이를 통해 로그우도 함수를 나타내면 다음과 같으며, FastText 모델은 아래 수식을 최대화해야 한다.
이 식은 모델을 1회 업데이트할 때, 포지티브 샘플 1개와 k개 네거티브 샘플을 학습한다는 뜻을 가지고 있다.

FastText 모델 로그우도 함수

 

Python 코드

from gensim.models import FastText
from nltk.tokenize import word_tokenize, sent_tokenize

words = [word_tokenize(sentence) for sentence in text]
model = FastText(words, size=100, window=3, min_count=5, workers=4, sg=1)

 

이미 학습된 모델 다운받기 : https://fasttext.cc/docs/en/pretrained-vectors.html

반응형

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

[NLP] GloVe (Global Word Vectors)  (0) 2020.05.18
[NLP] 잠재 의미 분석 (LSA)  (0) 2020.05.18
[NLP] Word2Vec (Skip-gram & CBOW)  (0) 2020.05.04
[NLP] NPLM(Neural Probabilistic Language Model)  (0) 2020.05.02
[NLP] 한국어 형태소 분석  (0) 2020.05.01