【Python】fastText(Gensim)による学習済み日本語モデルの利用

【Python】fastText(Gensim)による学習済み日本語モデルの利用 データ分析

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)による日本語学習済みモデルの利用を説明しました。

タイトルとURLをコピーしました