【API】Word2VecのWebAPIを無料公開しました

はじめに

Word2VecをApitoreで公開しました。こちらで公開しています。日本語WikipediaにNeologdの辞書を使いました。無料で使えます。ここでは、Word2Vecでどんなことができるかをご紹介します。
amarec (20160924-220016)


amarec (20160924-215949)

サンプルコード

API

Word2Vec WebAPI

特徴

今回公開したWord2Vecは、日本語WikipediaをKuromoji+Neologdで形態素解析したものを学習データに使っています。Neologdを用いているので、最近の単語(e.g. 「とある魔術の禁書目録」)も扱えるのがおもしろいところです。

公開したAPIは以下の4つです。それぞれ特徴を見ていきましょう。

  1. Distance
  2. Analogy
  3. Similarity
  4. WordVector

Distance

ひとことで言えば、入力した単語の類義語や同義語を返します。もう少し正確に言うならば、入力した単語と同じようなシーンで用いられる単語を返します。例を見ましょう。「アディダス」を入力すると、以下の結果を返します。競合会社と製品が出てきましたね。

単語 コサイン距離(≒類似度)
ニューバランス 0.753
アシックス 0.751
アディダスジャパン 0.713
ナイキ 0.706
シューズ 0.705

このように、同義語っぽいものが出てきます。Distanceの使い道としては、検索クエリの拡張があります。質問応答サイトで導入すると役に経ちそうです。例えば、入力された質問文を自動的に同義語展開して検索を実行すれば、検索結果は取りこぼしが少なくなるでしょう。(網羅性の改善)

さて、Word2Vecですが、学習データを変えれば、より面白いことができそうです。例えば、特許文書を対象に学習すれば、「特許のときに使われやすい同義語表現」が出てくると思います。近年ではWord2Vecを拡張してDoc2Vecが出ています。Doc2Vecはドキュメント版のWord2Vecです。つまり、例えば「作成途中の自分の研究論文を入力すると、先行研究の論文を見つけてくれる」みたいな使い方ができそうです。商品レビューで学習すれば、商品名を入力すると類似したコンセプトや評価の商品を提案してくれるとかできそうです。

Analogy

ひとことで言えば、単語の足し引きができます。これは例を見たほうが早いので例を見ましょう。「日本」+「パリ」-「フランス」の結果は以下になります。なんとなく東京っぽい結果が出ていますね。

単語
日本
東京
都内
東京都内
日本国内

単語の概念を足し引きして、その結果に近い概念の単語を示す、という感じです。コンセプトづくりに役立ちそうです。例えば、「巣鴨」+「高級」→「テレジアヌム」や「世田谷区成城」が出てきました。テレジアヌムは、オーストリアのホテルの名前のようです。ぐぐってみましたが、それっぽい気もします。世田谷区成城は言わずと知れたセレブの町。それっぽいですね。

Similarity

入力した2つの単語の意味的な近さを返します。例えば、「静寂」と「静か」の類似度は「0.680」だそうです。

WordVector

入力した単語を意味ベクトルに変換します。APIは単語を入力すると、出力としてDoubleの200次元の配列を返します。

おわりに

Word2Vecはおもしろいですね。今更感がしますが、役に立ちそうです。価格コムとかAmazonとかの商品レビューに適用したいですね。商品推薦に役立ちそう。データ持っている人が居たら是非やっていただいて、結果を教えてほしいです。もしくは、私にやらせてほしいです。ちなみにですが、今回のWebAPIの公開に使ったインフラはGoogle Cloud Platformです。大体5GBほどメモリを必要とするので、GCPのUbuntuの1CPU、5.75GBのマシンを借りました。月額32ドル(3,200円)くらいです。こちらで無料で試せるので、ぜひ試してみて下さい。

悪ふざけ

せっかくなので「とある魔術の禁書目録」の同義語を調べてみた。

単語 コサイン距離(≒類似度)
とある魔術の禁書目録ii 0.785
とある科学の超電磁砲 0.761
灼眼のシャナ 0.752
とある魔術と科学の郡奏活劇 0.720
とある科学の一方通行 0.705

「とある〇〇」が多い!シリーズモノは抑制したほうがいいかも?

関連記事

2017/2/27追記

APIコールのRubyサンプルを追加しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です