Word2vecを超高速..、いや爆速化。(magnitudeです)


といったものの、word2vecではいくら工夫しても処理に時間がかかってしまいます。
word2vecを使ったwebアプリを制作してるんですが、ローディングに14秒ほどかかります。辛い。

model.wv.most_similar(positive=['cat']) 
# これは猫の似てる言葉を探すやつ。

情報源:https://ssabcire.hatenablog.com/entry/2019/11/09/195459

なので、word2vecってやつから、magnitudeってやつに乗り換えます。
Sqliteの構造を利用されているらしい(?)MySQLとか独自の構造持ってて早いですもんね。
これは、magnitudeのgithubには以下のように書かれてます。

...これは主に、Gensimのよりシンプルで高速な代替手段となることを目的としていますが、...

こちらのブログを読みましたが、Embeddingを高速に取り出すMagnitude なんか早いっぽい?笑
なんでとりあえずやってみよう!
magnitudeのドキュメント

wikipediaのword2vec学習モデルをmagnitude用に変換。

magnitudeでは、word2vecで使う.binで終わるデータが使えません。
.magnitudeで終わる専用の形式に変換が必要です。

今回は、これを使います。
日本語 Wikipedia エンティティベクトル

これをダウンロードして解凍したら「entity_vector.model.bin」が手に入ると思います。これをmagnitude用に変換。
macのターミナルにこれを入力しましょう。

python -m pymagnitude.converter -i (ダウンロードしてきた変換したいbinファイル) -o (変換した後の保存場所。最後に適当に.magnitudeついたファイル名をつけてあげましょう。)

↓例えばこんなイメージ

python -m pymagnitude.converter -i /user/yamakaz/test/entity_vector.model.bin -o /user/yamakaz/test/hozon/new.magnitude

情報源: magnitudeのドキュメントの下のほう

エラーが出た方へ。

mac catalinaでやってましたが、annoyってやつと、xcodeをインストールしてないとこれはできないみたいでした。
他にもいろいろ足りない方は多分エラー出るので、エラーしっかり読んで1つ1つインストールしていきましょう。
ちなみに、annoyのインストールと、Xcodeのインストールだけ書いときます。(Xcodeのがないとannoyが入りませんでした。)

xcode-select --install

情報源:macOSアップデート後の『xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)...』の対処法

pip install annoy

変換待機...´∀`

そしたら変換が始まります。かかるよ〜。

でけた。

使ってみる

test.py
# magnitudeを準備。
from pymagnitude import *
vectors = Magnitude("/entity_vector/wiki.magnitude") # ← さっき変換したデータ

# 似てる言葉を1000個探し、resultsに取得した配列を突っ込む。
results = vectors.most_similar(u'松本人志', topn = 1000)

# resultsを表示。
for result in results:
    print(result)
(注意!!! 初回ロード時だけめっちゃ時間かかります。エラー出たのか、なんかバグったのか焦りますけどひたすら待ちましょう。)

で..できた!!!

や、やば...早すぎ。
word2vecで14秒くらい処理に時間がかかっていたのに、2,3秒になりました。
すごい。作った人天才です。

ぜひ使いましょう!