言語処理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'))
自作プログラムでの結果です。original
とcalculated
の交わる部分が結果の値で、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