Edited at

素人の言語処理100本ノック:93

More than 1 year has passed since last update.

言語処理100本ノック 2015の挑戦記録です。環境はUbuntu 16.04 LTS + Python 3.5.2 :: Anaconda 4.1.1 (64-bit)です。過去のノックの一覧はこちらからどうぞ。


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


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



93. アナロジータスクの正解率の計算


92で作ったデータを用い,各モデルのアナロジータスクの正解率を求めよ.



出来上がったコード:


main.py

# coding: utf-8

fname_input = 'family_out.txt'

with open(fname_input, 'rt') as data_file:

# 1行ずつチェック
correct = 0
total = 0

for line in data_file:
cols = line.split(' ')
total += 1
if cols[3] == cols[4]:
correct += 1

# 正解率表示
print('{} ({}/{})'.format(correct / total, correct, total))



実行結果:


問題85の単語ベクトルに対する結果


問題85の単語ベクトルに対する結果

0.03359683794466403 (17/506)



問題90の単語ベクトルに対する結果


問題90の単語ベクトルに対する結果

0.09090909090909091 (46/506)



アナロジータスクの正解率

やはりword2vecの方が優秀ですね。2倍以上の正解率です。ただword2vecでも9%なので、かなり低い感じです。単語ベクトルにない単語を不正解扱いしているのは、ちょっと厳しすぎたのかも。あと、使っているコーパスは1/100サンプリングのものなので、1/10サンプリングにするともう少し精度が上がるのかもしれませんね。

 

94本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。


実行結果には、100本ノックで用いるコーパス・データで配布されているデータの一部が含まれます。この第10章で用いているコーパス・データのライセンスはクリエイティブ・コモンズ 表示-継承 3.0 非移植日本語訳)です。また、単語アナロジーの評価データはApache License 2.0で配布されているword2vecの一部です。