ナード戦隊データマン

機械学習と自然言語処理についてのブログ

VoxELでの評価結果

前回の記事で、モデリングと訓練を行ったので、今回は評価を行います。

評価手順

評価方法はメンション位置も正しく予測することではなく、正解エンティティをどのくらい予測できたかを用いることにします。 ただし、今回は正解エンティティが含まれない文は除外します。

recall: 正解の中で予測したものが含まれる率。 precision: 予測したものの中で正解が含まれる率。

コード

コードは以下で公開しました。 https://github.com/sugiyamath/elmult/blob/master/project/eval/eval_mul/test_vox.py

精度

イタリア語だけなぜか精度が悪いですが、それ以外はなんとかダミー分類器以上の精度は出ています。

[de]
recall: 0.5515151515151515
precision: 0.5204906204906204
f1: 0.5355539511415134

[it]
recall: 0.0
precision: 0.0
f1: 0.0

[es]
recall: 0.6340508806262232
precision: 0.5012883235485974
f1: 0.5599072098010448

[fr]
recall: 0.4122448979591837
precision: 0.6
f1: 0.4887096774193549

[en]
recall: 0.5626984126984126
precision: 0.7018518518518518
f1: 0.6246187819618781

予測結果の例

正解と予測結果を保存したjsonファイルを以下で保存しています。 https://github.com/sugiyamath/elmult/blob/master/project/eval/eval_mul/result_vox_de.json

ただし、予測の方はすべてドイツ語Wikipediaとして予測しているので、精度評価の段階ではlanglinksを用いて英語エンティティへ変換します。

考察

とりあえず、4つの言語については、同じアルゴリズムで訓練ができることがわかりました。精度が高くない理由の一つとしては、Wikipediaのアンカーを用いて訓練データを定義したため、aida-yagoなどとは違うアノテーション方式を採用しているためだと考えられます。

E2Eのモデルなので、言語特有の特徴量がないため、様々な言語への適用ができるという意味では効果的です。一方で、entity vectorやword2vecにも依存してくるので、訓練の準備のためにたくさんのデータが必要になるという点では、ストレージに優しい方法ではありません。

理想的には、英語だけで訓練して、他の言語にも適用できるようなモデルがあればよいのですが、以前試した結果としては、あまり精度はよくありませんでした。

つまり、課題は「精度」です。

リンク

GitHub - sugiyamath/elmult: the examples of multilingual entity linking model