fasttextについて
概要
- 類似の使われ方をする単語をコサイン類似度で計算できる
- w2vの亜種でchargramを考慮等、いくつかのヒューリスティックを組み合わせている
gensim
- gensimというライブラリが便利
ドキュメント
学習
from gensim.test.utils import common_texts
from gensim.models import FastText
model = FastText(vector_size=250, window=5, workers=16, word_ngrams=1, max_n=0, min_count=10, sentences: List[List[str]], epochs=1)
sentences
List[List[str]]
で一つの文章が一つのListに収まっている必要がある
vector_size
- NNのサイズで大きい方が表現力が大きくなるが学習が遅くなる
min_count
- 増やすと頻出でフィルタを行い、変な単語を掴む確率が下がり、安定するが、大きすぎると単語を検出できない
window
- 周辺のCBOWを構築する単語の範囲
workers
- 並列CPU数
max_n
- chargramのn数
- 0で無効
epoch
- 学習のepoch数
類似度検索
# 一つのクエリ
model.wv.most_similar('computer', topn=10)
# 複数のクエリ
model.wv.most_similar(positive=['computer', 'human'], negative=['interface'])
2つの単語間の類似度(-1 ~ 1)
model.wv.similarity("word_a", "word_b")
モデルに含まれるキー(文字)の一覧
words = list(model.wv.index_to_key)
モデルのセーブ
model.save("word2vec.model")
モデルのロード
model = FastText.load("word2vec.model")