rueki

패스트텍스트(FastText) 본문

DL/NLP

패스트텍스트(FastText)

륵기 2019. 7. 4. 14:19
728x90
반응형

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)]

 

728x90
반응형

'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
Comments