rueki
패스트텍스트(FastText) 본문
Word2vec의 확장판으로서, Fast Text와 Word2vec의 차이점은
Word2vec은 단어를 쪼개질 수 없는 단위로 생각한다면,
Fast Text는 하나의 단어에도 여러단어가 존재한다고 간주한다.
Fast Text의 각 단어는 글자들의 n-gram으로 나타내는데, n을 몇으로 결정하는지에 따라 단어들이
얼마나 분리되는지 결정된다.
n을 3으로 잡았을 때
apple -> app, ppl, ple로 분리하고 임베딩한다.
패스트텍스트의 인공 신경망을 학습한 후에는 데이터 셋의 모든 단어의 각 n-gram에 대해서 워드 임베딩이 된다.
데이터 셋만 충분하다면 내부 단어(Subword)를 통해 모르는 단어(Out of Vocabulary)에 대해서도
다른 단어와의 유사도를 계산할 수 있다.
Word2vec과 다르게 모르는 단어에서의 유사도를 계산할 수 있다는 것이 차별점이다.
Word2vec에서는 단어집합에서 등장 빈도 수가 높으면 정확하게 임베딩이 되지만,
빈도 수가 적은 단어(Rare word)에 대해서는 정확도가 높지 않다.
그러나 Fast Text에서는 빈도 수가 낮더라도 n-gram 모델로 임베딩하는 특성상 참고할 수 있는
경우의 수가 많아 정확도가 비교적 높다
실제로 많은 비정형 데이터에는 오타가 섞여있는데, 오타가 섞인 단어는 빈도 수가 적을 수 밖에 없다.
Word2vec에서는 오타에 대한 임베딩이 되지 않지만 Fast Text에서는 어느정도 성능을 보인다.
Fast Test로 앞서 word2vec의 실습했던 text를 가지고 다뤄보겠다.
텍스트에 없는 단어 'electrofishing' 을 가지고 유사 단어를 찾고 유사도를 나타내보자
from gensim.models import FastText
model = FastText(result, size=100,window=5,min_count=5, workers=4, sg=1)
b = model.wv.most_similar("electrofishing")
print(b)
[('electrolux', 0.7982239723205566), ('electro', 0.7917631268501282),
('electric', 0.7870813608169556), ('electrolyte', 0.7840112447738647),
('electroshock', 0.7644962072372437), ('electrons', 0.7644336223602295),
('airbus', 0.763495147228241), ('gastric', 0.7584728002548218),
('electrogram', 0.7572916746139526), ('electroencephalogram', 0.7506209015846252)]
'DL > NLP' 카테고리의 다른 글
(NLP in TensorFlow) 1. 단어 기반 인코딩 (0) | 2020.03.24 |
---|---|
글로브(Glove) (0) | 2019.07.04 |
워드투벡터(Word2Vec) (0) | 2019.07.04 |
워드 임베딩 (0) | 2019.07.04 |
토픽 모델링 - 잠재 디리클레 할당(Latent Dirichlet Allocation) (0) | 2019.07.03 |