極性分析ツールpolarisを作って言語処理100本ノックで作ったデータで精度を検証した話

出落ちになってしまうのですが、結論から言うと

___精度が低かったです___

しょんぼり。

polarisって何?

github.com

polarisとは、 私が作成した、極性分析のツールです。言語処理のための機械学習の著者である高村大也先生の研究である、「スピンモデルによる単語の感情極性抽出」の研究成果として公開している単語感情極性対応表を用いて、文章のポジティブ・ネガティブを判定します。

実装

単語と感情極性実数値のペアをデータベース(sqlite3)に格納します。
極性を分析する文字列に対して、形態素解析を行い(英語であればスペースで区切る(mecabに区切らせています))、語幹を抽出します。英語の場合はstemmifyという、ポーターのステマーのRuby実装のライブラリを用いました。なお、データベースに格納されている英単語もここではステミング処理をしたものを登録しています。(ダメそう...)
抽出された単語一つ一つの感情極性実数値を取得し、それらを足し合わせたものを双曲線関数(tanh)の曲線上の点に割り当てることで-1から1に収まるスコアを得ました。

精度の話

プログラムを作成して満足してしまっていた僕ですが、言語処理100本ノックの第8章で作成する Movie-review-dataのsentence polarity dataset v1.0を元に作成した極性の正解データを用いて精度を検証することができることに気づいてしまいました。そこで進捗がダメであるというのに精度を検証するプログラムを作成し始めてしまったというわけです。

結果

# i: 総数
i: 10653
# j: 正解数
j: 6669
# => 約62.6%

おおよそ6割程度の精度ですね。悲しいです。 数学から言語処理から初心者なので、どこがダメで精度が悪いのかよくわかっていません。もし何か「ここがおかしい」という点にお気づきになられたら、githubのリポジトリにissueとしてコメントをしていただきたいです。どうぞ宜しくお願いします。
文脈を考慮できるような判定器との比較をしないといけません。(言語処理100本ノックの8章で作る判定器と比較したいのに進まないので辛い...)

今後

 今回は英語に文章に対してのみ検証を行ったので、日本語の文章に対しても検証しなければなりません。正解データを探します。また、もちろん精度を上げるための工夫もしなくてはなりません。どうすれば良いだろうか...
ちなみに、精度の検証のために用いたデータ(言語処理100本ノックで作成した正解データと実験プログラムはgithubのリポジトリで公開してますのでもしよかったら遊んでみてください。

参考

Hiroya Takamura, Takashi Inui, Manabu Okumura, "Extracting Semantic Orientations of Words using Spin Model", In Proceedings of the 43rd Annual Meeting of the Association for Computational Linguistics (ACL2005) , pages 133--140, 2005.

ありがとうございました。