はじめに
単語を意味ベクトルに変換するAPIを公開しました。こちらで公開しています。実体はWord2Vecです。Neologdを採用しているので新語も変換できます。さっそくAPIの動作を見てみましょう。
API
サンプルコード
使ってみた
このAPIは単語を入力に取り、出力としてDoubleの200次元の配列を返します。Word2Vecなので、単語を200次元の意味表現に変換していると解釈できます。試しに「スーパーナチュラル」を変換してみます。
スーパーナチュラル |
---|
-0.0017715812427923083 |
0.0022798257414251566 |
-0.002543167443946004 |
-0.004365575034171343 |
-0.014160150662064552 |
-0.00452282652258873 |
0.0018338632071390748 |
-0.011944250203669071 |
0.01104894932359457 |
0.00175853434484452 |
... |
個人的にスーパーナチュラルに近いと思っている「Xファイル」を変換してみます。
Xファイル |
---|
0.00012361897097434849 |
-0.003726059105247259 |
-0.0012220873031765223 |
-0.0033455435186624527 |
-0.009125065989792347 |
-0.0021912185475230217 |
0.009758403524756432 |
-0.011890729889273643 |
0.007997721433639526 |
-0.0026356899179518223 |
... |
うーん、そこそこ近い・・・かな?じゃあ「FRINGE/フリンジ」はどうでしょうか?
FRINGE/フリンジ |
---|
0.005054086446762085 |
0.002453114604577422 |
-0.005948302336037159 |
-0.013926253654062748 |
-0.005625772289931774 |
-0.0016867908416315913 |
0.0037219400983303785 |
-0.011260711587965488 |
0.004683949984610081 |
-0.0011242115870118141 |
... |
お、おう。 よくわからないので、Word2Vec APIで単語間の類似度を調べてみた所、だいたい0.63~0.67くらいでした。近いっちゃ近い。ちなみに稲川淳二だと類似度は0.32くらいでした。
分析する
単語を意味ベクトルに変換してみました。各次元が何を意味しているかは神のみぞ知るという感じですが、類義語っぽい単語の組み合わせは類似度0.63~0.67くらいあるので、意味ベクトルはちゃんと出来ている気がします。Word2VecのAnalogy API等で単語の足し引きも試してみたので、間違いない・・・はず。 意味ベクトルに変換することで良いことは、以下の2点かなと思っています。
- BoWに比べると大幅な次元圧縮できる
- (研究報告によると)極性判定とかの自然言語処理においてBoWよりも性能が上がる
おわりに
というわけで、単語の意味ベクトル変換もなかなかに興味深いAPIです。自然言語処理系で機械学習するときに用いるといい感じだと言われているので、お試しあれ。こちらで無料で試せます。
2017/2/27追記
APIコールのRubyサンプルを追加しました。