AlchemyAPIのSentiment精度をSentiment140のデータで評価する

AlchemyAPI
http://www.alchemyapi.com/

Techchrunchでも紹介されていた。
http://jp.techcrunch.com/2013/02/09/20130207alchemy-api-raises-2-million-for-neural-net-analysis-tech-on-par-with-ibm-watson-google/

AlchemyAPIは、固有名抽出(NER)とか極性抽出(Sentiment analysis)とか、自然言語処理技術をAPIを通じて提供するベンチャー
自然言語処理ベンチャーではかなり成功しているのではないだろうか。

今回は極性抽出について、彼らの精度を見てやろうって話。


AlchemyAPIはFreeのAPIを発行していて、メールアドレスだけしっかり登録しておけばあとは適当な情報を書いてもOK。1日1000回リクエストまでAPIを発行していいそうだ。ちょっとしたことをやるなら十分。少し腰を入れるとすると全然足りないという、まさにすばらしい調整。

プログラミング言語SDKが提供されている。
今回はJavaを選択した。SDKを見れば接続、評価は簡単にわかるだろうから省略。
とてもシンプル、かつ分かりやすいSDK。すばらしすぎる。


Sentiment140
http://www.sentiment140.com/

評価対象のデータは、Twitterで極性がついているもの。
Stanford大学の人がデータを作り、学術目的なら無料で利用できる。

今回はSentiment140のtestデータをAlchemyAPIに投げてみた。


結果は、
データ数: 498
 Pos: 182
Neg: 177
Neu: 139
Accuracy: 0.649


PosとNegだけで評価したら
データ数: 359
 Pos: 182
Neg: 177
Accuracy: 0.705


ちなみに、Sentiment140を提供しているStanford大学のGoらの論文はこちら。
"Twitter Sentiment Classification using Distant Supervision"

彼らの手法の説明は省略する。
論文は検索すればすぐに見つかるし、とても読みやすい&手法がシンプルなので、すぐに理解できるはず。

論文の結果部分から、
素性はUnigram、識別器はSVMrightのlinear kernelで、Accuracy 0.822。
※ちなみに上記はPos/Negの評価で、Neuは外している・・・と論文に書いてあった気がする。


ここまでの結果をうけて・・・

AlchemyAPIはTwitterに特化しているわけではなく、一般文書やWebにも対応している。また、Sentiment analysisに特化しているわけでもない。

なので、一応、精度的にはGoらの手法に及んでいないが、だからといってAlchemyAPIのSentiment analysisが使えないということでもない。


参考までに、AlchemyAPIの出力は、
データ数: 498
 Pos: 215
Neg: 164
Neu: 119

となっており、少しPositiveを出しやすいのかなとも思ったけど、正解データとの分布みるとそこまでではないかなと思ったり。

何をどう間違えたかまでは見ていないので、それは次回。