自然言語処理
gensim
高速化
word2vec
magnitude
7
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

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

変換待機...´∀`

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

でけた。
image.png

使ってみる

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)
(注意!!! 初回ロード時だけめっちゃ時間かかります。エラー出たのか、なんかバグったのか焦りますけどひたすら待ちましょう。)

で..できた!!!
image.png

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

ぜひ使いましょう!

新規登録して、もっと便利にQiitaを使ってみよう

  1. ユーザーやタグをフォローできます
  2. 便利な情報をストックできます
  3. 記事の編集提案をすることができます
ログインすると使える機能について
Yamkaz
Designer, Planner, WebDeveloper 現在は、多摩美術大学 統合デザイン学科から広告代理店へ。 自然言語処理,機械学習,発想支援に興味あり。 HTML/CSS/Javascript/Python/PHP/C#

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
7
どのような問題がありますか?
新規登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
新規登録ログイン
ストックするカテゴリー