言語処理100本ノック 2015年版 (90)と手戻り
第10章: ベクトル空間法 (II)
第10章では,前章に引き続き単語ベクトルの学習に取り組む.
90. word2vecによる学習
81で作成したコーパスに対してword2vecを適用し,単語ベクトルを学習せよ.さらに,学習した単語ベクトルの形式を変換し,86-89のプログラムを動かせ.
リンクではgoogleへのリンクが張ってありますが、pythonでは gensimというライブラリを使うのが一般的なようです。
とりあえず most_similar()というメソッドがありますので、これでUnited_Statesとベクトルを比較してみましょう。
U.S 0.8379200100898743 United_Kingdom 0.7003583312034607 US 0.6898074746131897 Canada 0.6598731279373169 UK 0.6070035696029663 Philippines 0.5873497128486633 Australia 0.5667876601219177 South_Korea 0.5584612488746643 Puerto_Rico 0.5571772456169128 Taiwan 0.5501606464385986
出来が良すぎて泣くレベル。
とりあえず87の単語の類似度を計算してみますと、
0.862082587971
高っ!
88のEngland
England 1.000000 Scotland 0.789885 Wales 0.789554 Ireland 0.644909 Britain 0.642314 London 0.608007 Manchester 0.603591 Sweden 0.603226 Hampshire 0.599896 Orleans 0.597022 Liverpool 0.595229
んんん……同じデータとは思えないほどよくできている……
そもそも計算後にnanが出てこない。
89
Spain 0.886320 Italy 0.829932 Austria 0.797413 Denmark 0.791248 Sweden 0.786782 Russia 0.774461 Egypt 0.758162 Norway 0.756272 Germany 0.756222 Portugal 0.742592
あれ?これはうまく出てこないぞ?
gensimを使うと、同じデータを使ってはるかに短時間で精度の高いベクトルが作成されました。
てっきり第10章ではsparkなどの分散処理基盤を使うものと勝手に思い込んでいましたが、この後の問題を見ても使うことは無さそうです。
というわけで、一度第9章に戻り、分散処理基盤を使ってもう一度ベクトル化に挑戦してみたいと思います。