北野坂備忘録

主にインストールやプログラミングのメモを載せています。

言語処理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章に戻り、分散処理基盤を使ってもう一度ベクトル化に挑戦してみたいと思います。