LoginSignup
1
2

More than 3 years have passed since last update.

言語処理100本ノック-95(pandas使用):WordSimilarity-353での評価

Last updated at Posted at 2020-01-21

言語処理100本ノック 2015の95本目「WordSimilarity-353での評価」の記録です。
前のノック結果に対してスピアマン相関係数を計算します。自作プログラムでの結果は約23%、Gensim使用時の結果は52%とこれまた大きく水をあけられています。

参考リンク

リンク 備考
095.WordSimilarity-353での評価.ipynb 回答プログラムのGitHubリンク
素人の言語処理100本ノック:95 言語処理100本ノックで常にお世話になっています

環境

種類 バージョン 内容
OS Ubuntu18.04.01 LTS 仮想で動かしています
pyenv 1.2.15 複数Python環境を使うことがあるのでpyenv使っています
Python 3.6.9 pyenv上でpython3.6.9を使っています
3.7や3.8系を使っていないことに深い理由はありません
パッケージはvenvを使って管理しています

上記環境で、以下のPython追加パッケージを使っています。通常のpipでインストールするだけです。

種類 バージョン
pandas 0.25.3

課題

第10章: ベクトル空間法 (II)

第10章では,前章に引き続き単語ベクトルの学習に取り組む.

95. WordSimilarity-353での評価

94で作ったデータを用い,各モデルが出力する類似度のランキングと,人間の類似度判定のランキングの間のスピアマン相関係数を計算せよ.

課題補足(スピアマン相関係数)

「スピアマン相関係数」は「スピアマンの順位相関係数(Spearman's rank correlation coefficient
)」
のことで、順位を使った相関係数です。よく耳にする「ピアソンの積率相関係数」は、順位ではなく値を使って相関係数を出します。
どちらも1から-1までの範囲で値をとり、1だと正の相関が強いという意味です。

回答

回答プログラム 095.WordSimilarity-353での評価.ipynb

import pandas as pd

def calc_corr(file):
    df = pd.read_table(file, header=None, usecols=[2, 3], names=['original', 'calculated'])
    print(df.corr(method='spearman'))

calc_corr('./094.combine_1.txt')

calc_corr('./094.combine_2.txt')

回答解説

pandas使っているのでコードは非常に短いです。関数corrのメソッドにspearmanを指定してあげるだけです。

print(df.corr(method='spearman'))

自作プログラムでの結果です。originalcalculatedの交わる部分が結果の値で、0.227916です。低いですね・・・

            original  calculated
original    1.000000    0.227916
calculated  0.227916    1.000000

Gensim使った場合の結果です。0.516526とだいぶ上がっています。

            original  calculated
original    1.000000    0.516526
calculated  0.516526    1.000000
1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2