Word2Vec の Web API を作れる word-vector-web-api を公開しました

Word2Vec や GloVe などで構築済みな単語ベクトルのモデルを使った Web API を作ることができる word-vector-web-api を公開しました。🎉🍣🍻🍰🍖



これがあると docker コマンドと1.5 GByte 程度のメモリが使える環境なら、以下の 5 つのコマンドを実行することで(厳密にはもう少し手順がありますが)、以下のサンプルの様な結果(日本語 Wikipedia のダンプデータから word2vec コマンドで作ったモデルを使った Word2Vec の distance アプリケーションと同等の結果)を得られると思います。

$ git clone --depth 1 https://github.com/overlast/word-vector-web-api.git
(略)
$ cd word-vector-web-api
$ ./libexec/download-sample-jawiki-model.sh
(略)
$ ./libexec/create-docker-image-sample-word-vector-web-api-s1.sh
(略)
$ ./libexec/run-docker-container-of-sample-word-vector-web-api-s1.sh
(略)
$ curl "http://0.0.0.0:22670/distance?a1=タモリ"
{"format": "json", "items": [
{"term": "明石家さんま", "score": 0.81528389453887939}, {"term": "さんま", "score": 0.80035871267318726},
{"term": "ビートたけし", "score": 0.79251360893249512}, {"term": "所ジョージ", "score": 0.76938104629516602},
{"term": "とんねるず", "score": 0.7473946213722229}, {"term": "爆笑問題", "score": 0.73406845331192017},
{"term": "司会", "score": 0.72929728031158447}, {"term": "森田一義", "score": 0.72818166017532349},
{"term": "島田紳助", "score": 0.72627973556518555}, {"term": "中居正広", "score": 0.72301918268203735},
{"term": "山田邦子", "score": 0.71929085254669189}, {"term": "笑福亭鶴瓶", "score": 0.71266698837280273},
{"term": "ボキャブラ天国", "score": 0.70373982191085815}, {"term": "笑っていいとも!", "score": 0.70154005289077759},
{"term": "関根勤", "score": 0.70032232999801636}, {"term": "明石家マンション物語", "score": 0.70010024309158325},
{"term": "冠番組", "score": 0.69675129652023315}, {"term": "いいとも", "score": 0.69370967149734497},
{"term": "石橋貴明", "score": 0.68870562314987183}, {"term": "オレたちひょうきん族", "score": 0.68832921981811523},
{"term": "ものまね", "score": 0.68563121557235718}, {"term": "松村邦洋", "score": 0.68541419506072998},
{"term": "ボキャ天", "score": 0.68538647890090942}, {"term": "ウッチャンナンチャン", "score": 0.68278044462203979},
{"term": "テレフォンショッキング", "score": 0.68264764547348022}, {"term": "コーナー司会", "score": 0.68219667673110962},
{"term": "浅草キッド", "score": 0.68129265308380127}, {"term": "今夜は最高!", "score": 0.67805778980255127},
{"term": "今田耕司", "score": 0.67686200141906738}, {"term": "萩本欽一", "score": 0.67244911193847656},
{"term": "みのもんた", "score": 0.67096501588821411}, {"term": "北野ファンクラブ", "score": 0.66866558790206909},
{"term": "中居", "score": 0.66742992401123047}, {"term": "鶴瓶", "score": 0.66699719429016113},
{"term": "志村けん", "score": 0.66617244482040405}, {"term": "大橋巨泉", "score": 0.66485863924026489},
{"term": "上岡龍太郎", "score": 0.66450983285903931}, {"term": "ナインティナイン", "score": 0.66341793537139893},
{"term": "松本人志", "score": 0.66267943382263184}, {"term": "和田アキ子", "score": 0.66127783060073853}
], "query": "タモリ", "method": "distance", "sort": "cosine similarity", "status": "OK", "total_count": 40}


実はかなり前から GitHub 上には公開していたのですが、決して使いやすい状態とはいえませんでした。
なので、かなりシンプルにサンプル出力を試せる状態にしました。

どこがポイントなのか


今回、word-vector-web-api をまとめるに当たってのポイントは以下の3点でした。

- 構築済みの日本語 Wikipedia モデルを配布
- Dockerfile を配布
- インストール手順書を記述

簡単に説明してみます。

構築済みの日本語 Wikipedia モデルを配布

Word2Vec はすぐに試せる構築済みな日本語のモデルがあまり積極的に配布されていなかったので、使っていなかった人も多かったのでは無いでしょうか。

今回は、いろいろ試した結果、Google Drive さんを利用させて頂いてモデルを配布しています。

モデルをダウンロードして解凍するためのダウンローダーを作ってみて、意外と便利だったので今後も再利用していこうと思います。

配布しているモデルは限られた時間の中で複数の前処理を一応試してみて、構築後のモデルを使ってみた結果が一番良さそうなものをアップロードしました。

パラメタの探索とか、定期的なアップデートとか、いろいろな課題がありますがこれはmecab-ipadic-NEologdと同じで、ぼちぼち更新していこうと思います。

今後は日本語 Wikipedia 以外のコーパスを使ったモデルの構築や、Word2Vec より顕著に良い性能がでる手法が出てきたらそれを使っての構築を考えていますので、自前のモデルを構築しない派の方はご期待ください。

Dockerfile を配布

環境構築は Ansible の Playbook とか用意しとけば済むかなと思いましたけど、@chezou さんと @sowawa さんから「Dockerfile 書きましょう」と同日に言われたので、今の時代は Dockerfile が無いと駄目な時代なのだなと勉強になりました。ありがとうございました。

結果として docker build できる環境と 1.5GByte 程度のメモリがあれば、環境に依存するトラブルは少なくなったので良かったです。

実際に製品として使う場合は、Docker のままだと厳しいでしょうし、研究寄りのエンジニアさんは OS に直にインストールしたword2vec-msgpack-rpc-server に直にリクエストした方が無駄が無くてより良いでしょう。



そもそも word-vector-web-api を作ったのは、word2vec-msgpack-rpc-server と nginx-msgpack-rpc-module が個人的に便利なのでオススメしたいけど単体だと試すのが面倒で試してもらえ無さそうだから妥当なパッケージングをしてモデルも付けて配布してより便利な世の中にしよう、という考えがあってのことです。



word2vec-msgpack-rpc-server と nginx-msgpack-rpc-module を使って自分の実装を世に広めたり、または word-vector-web-api をカスタマイズして便利な機能を製品に組み込んで見たり、いろいろ試してみてください😊。

インストール手順書を記述

とても詳細な手順書を書きましたので、慎重に読み、コピペすることでつまづく確率が激減すると思います。

Docker 自体や Unix コマンドに関する知識は自分で調べなきゃいけませんけど、それは許してくださいね😓💦。

終わりに


word-vector-web-api は、僕が社内でコンテンツ管理ツール向けなどで作った Web API の OSS 版です。

割と簡単な作りですが、このくらいでもメモリを増やしてサーバプロセスを増やせばレスポンスに関する問題は減ります。

精度に関しては、距離関数よりはモデルの構築手法と検索クエリの作成手法に強く依存するので、word-vector-web-api の外側で解決すべき問題が山積みになっている状態だと思います。

モデルの構築の際には mecab-ipadic-NEologd を使うことで多くの問題が解決できると思います。



リリース済みのものの改善、サンプルモデルの種類の追加、演算に必要なメソッドの追加は予定があるので、今後のアップデートを生暖かく見守りつつ、たま〜に Update してみて下さい。🍻


投稿者:としのり  日時:23:59:59 | コメント | トラックバック |
blog comments powered by Disqus