TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

fastTextでwikipediaを学習する

先日の日記でfastTextでWikipediaの要約を学習させたが、期待した結果にはならなかったので、全記事を使って学習し直した。
Wikipediaの学習済みモデルは、
fastTextの学習済みモデルを公開しました - Qiita
こちらの方が配布されていますが、MeCabの辞書のバージョンが異なるためか登録されていない単語があったため自分で学習し直した。

コーパスの前処理は、doc2vecの学習で行った、10以下の頻度の単語を含む文を除外したものを使用した。

Bash on WindowsでビルドしたfastTextを使い、Core i7-6700K(4.00GHz)で35分ほどで学習できた。

学習したモデルはgensimを使ってPythonから使用できる。

実行例
from gensim.models.wrappers.fasttext import FastText
model = FastText.load_fasttext_format("wiki_model")
model.most_similar("リンゴ")
実行結果
[('青リンゴ', 0.7415881156921387),
 ('サクランボ', 0.6609212160110474),
 ('リンゴジュース', 0.6432982087135315),
 ('ヘーゼルナッツ', 0.6267402768135071),
 ('柑橘系', 0.6092754602432251),
 ('キウイフルーツ', 0.6087037324905396),
 ('ピスタチオ', 0.6070229411125183),
 ('グレープフルーツ', 0.6048493981361389),
 ('サトウダイコン', 0.6035013794898987),
 ('トロピカルフルーツ', 0.6010643243789673)]

前回Wikipediaの要約ではうまくいかなかった「王様」+「女性」-「男性」の結果は、

model.most_similar(positive = ["王様","女性"], negative = ["男性"])
Out: 
[('女王様', 0.5537782907485962),
 ('妖精の女王', 0.5271559357643127),
 ('雪の女王', 0.5174967646598816),
 ('先々代の女王様', 0.5147340893745422),
 ('黄金の林檎', 0.5090798735618591),
 ('妖精達', 0.5088496804237366),
 ('チャーミング', 0.5082257986068726),
 ('ハートの女王', 0.5066112279891968),
 ('黄金の鳥', 0.5021530985832214),
 ('王女', 0.5012854337692261)]

それなりに期待した結果になった。

model.most_similar(positive = ["ザク","赤い"])
Out: 
[('ザクザク', 0.6754602193832397),
 ('ザクI', 0.6736077070236206),
 ('ザクレロ', 0.6639564037322998),
 ('ザクII', 0.6604661345481873),
 ('赤い輪', 0.6454007625579834),
 ('シャア専用', 0.6375926733016968),
 ('ザクキャノン', 0.635945200920105),
 ('ザクIII', 0.6316030621528625),
 ('ゲルググキャノン', 0.6254370808601379),
 ('Vガンダム', 0.6244575381278992)]

これも期待通りです。