Word2Vecの遅さに幻滅しましたか?
そして、fastTextに希望を見出したという流れかもしれません。
もしそうなら、この記事が参考になるはずです。
技術的な意味でも、希望の結末を知るという意味でも。
本記事の内容
- fastText(Gensim)とは?
- fastTextの日本語学習済みモデル
- fastText(Gensim)による日本語学習済みモデルの利用
それでは、上記に沿って解説していきます。
fastText(Gensim)とは?
fastTextは、単語の分散表現を処理する技術です。
単語の分散表現と言えば、Word2Vecが最も知られています。
ちなみに、Word2VecはGoogleが開発しました。
このWord2Vecをベースにして、FacebookがfastTextを開発しています。
したがって、Word2VecとfastTextには親子関係があると言えます。
そして、fastTextの最大の特徴は、Word2Vecより高速に処理できる点です。
名前に「fast」と入っているぐらいですからね。
このfastTextをPythonから利用する方法は、複数存在しています。
その中の一つが、Gensimによる方法です。
今回は、GensimのfastTextを利用します。
Gensimのインストールについては、次の記事で解説しています。
以上、fastText(Gensim)についての説明でした。
次は、fastTextで利用できる日本語学習済みモデルについて確認します。
fastTextの日本語学習済みモデル
モデルは、自分で作成することが可能です。
でも、自作はデータ収集から大変でしょうね。
データを集めたところで、学習にどれだけの時間がかかるのか・・・
精度をそこそこ求めるなら、結構な手間と時間がかかります。
そこで、すでに公開されているモデルを利用します。
fastText公式
https://fasttext.cc/docs/en/crawl-vectors.html
上記ページでは、157言語の学習済みモデルが公開されています。
モデルの作成には、以下のサイトのデータを利用とのこと。
- Common Crawl
- Wikipedia
では、上記ページにアクセスします。
ページ中盤以降に各言語用のダウンロードリンクが表示されています。
その中から、「Japanese」の「text」をクリックします。
ダウンロードが開始されます。
ダウンロードしたcc.ja.300.vec.gzは、約1.2GBの容量があります。
そこまで大きいファイルではありません。
これで、準備が整いました。
次は、ダウンロードしたモデルを使って検証していきましょう。
fastText(Gensim)による日本語学習済みモデルの利用
学習済みモデルをfastTextで処理するコードは、以下。
import gensim from pprint import pprint model_path = "cc.ja.300.vec.gzのパス" # モデルの読み込み wv = gensim.models.KeyedVectors.load_word2vec_format(model_path, binary=False) # 類似度上位10件を取得 match = wv.most_similar("企業", topn=10) # 見やすい形式で表示 pprint(match)
先に、言っておきます。
スペックの低いPCなら、かなり時間がかかると思います。
Gensimは、基本的にはCPUで動きます。
検証したPCのCPUは、インテル Core i9 9900KFです。
このCPUで、上記プログラムの処理に4分30秒ほどかかっています。
もっと低いスペックのCPUなら、もっと時間がかかるでしょう。
(無論、メモリも関係するでしょう)
これなら、正直なところ使い物になりません。
fastなfastTextでさえ4分30秒も時間がかかります。
Word2Vecなら、一体どれくらいかかるのでしょうか・・・
変換などまでして検証しようとは思いません。
おそらく、4分30秒以上はかかるでしょうから。
検証したところで意味はないという判断です。
あと、Gensim以外でfastTextを試す検証もしません。
これも、おそらくそんなに大差がないと思われるからです。
ちなみに、上記コードの実行結果は以下。
[('中小', 0.6603098511695862), ('会社', 0.6141459345817566), ('官公庁', 0.5806519389152527), ('大手', 0.573516845703125), ('ベンチャー', 0.5639325976371765), ('Sler', 0.5568057894706726), ('上場', 0.5536531805992126), ('IT', 0.5522502660751343), ('製薬', 0.5507452487945557), ('IT', 0.5498356223106384)]
「企業」に近いキーワードが出ていますね。
機能的には、問題はありません。
以上、fastText(Gensim)による日本語学習済みモデルの利用を説明しました。