SemEval2015 Twitter上での言い換え認識

Next: ニコニコ動画のタグの類似度の二次元可視化

2014/01/14 (Wed.)
    SemEval2015に参加しようかしまいか迷った挙句に参加し, 締め切り前2日という酷く短い時間で書いたプログラムで

  • Task 1: Paraphrase and Semantic Similarity in Twitter (URL, 結果)

に参加した (Team名: HASSY, メインタスク18チーム中13位...). タスク設定はいたってシンプルで, Twitterから採ってきた2文が与えられた時に, それらが同じ意味ですか, という問に答えるだけである. 例えば下のような2文の組が学習データに入っている.

  • EJ Manuel the 1st QB to go in this draft
  • But my bro from the 757 EJ Manuel is the 1st QB gone

どう見ても厄介である. Twitter NLPの基礎知識も全くないので, 仕方なくてきとうに文の表現ベクトルを作ってその内積でパラフレーズのスコアを求める, という方針で, 開発データ上で与えられたベースラインを上回ったら結果を投稿することに決定した. もう時間もないし, bag of wordsかbag of bigramsくらいでいいかなとも思ったが, 親切なことに

  • EJ/B-person/NNP/B-NP/O Manuel/I-person/NNP/B-VP/O the/O/DT/B-NP/O...
  • But/O/CC/O/O my/O/PRP$/B-NP/O bro/O/NN/I-NP/O from/O/IN/B-PP/O...

という感じでタグ付けがされていたので, せめてPOSタグだけでも利用することに. というわけで, 文の表現は

  • 全単語ベクトルを足してtanhしたもの (bag of words)
  • 単語ベクトルを2つずつ足してtanhしたものの和
  • 全POSベクトルを足してtanhしたもの (bag of POS tags)
  • POSベクトルを2つずつ足してtanhしたものの和

の4種類の特徴ベクトルを連結したものになった (チャンクも使いたかった...). あとは, 内積をとってロジスティック関数に通して, 正例なら1に近づくように, 負例なら0に近づくように学習するだけである. ただし, この特徴ベクトルだと明らかに内積は大きくなる傾向にあるため, 実際に分類するときの閾値は0.9になった. つまり, 0から0.9が負例, 0.9から1が正例である (死亡フラグ). ちなみに, よくある単語ベクトルの事前学習などは一切行わなかった (= 行う時間が無かった). 前処理は小文字化と数字の統一のみである.
    結果は, 18チーム中13位であった (締め切り日の早朝に受けたG社のResearch Internの面接でも落とされ... ;ω;). ランダムベースラインと, state-of-the-artなベースラインのうち弱い方には勝ったが, 強い方には負けてしまった... ここから先はおそらく非公開の内容 (SemEvalのタスク説明論文に書かれる内容) なので詳しくは言えないが, 上位は基礎的な素性とSVM, ニューラルネットといった, いたって普通のシステムのようである. 驚いたのは, 大規模コーパスとword2vecなどを用いたシステムがいくつか自分より下のランクにいるということである. たしかに, 上で挙げた例が単語ベクトルの事前学習によって言い換え認識しやすくなるか, といえばそうでもなさそうである. 特に, 1位のシステムの説明は極めて簡明であり, まだまだ基礎的な素性+SVMといった従来手法が強そうだと感じた. というわけで, とりあえず単語ベクトル的なアプローチをしたら, 素性+SVMシステムに完敗した, という悲しい例でした. (お蔵入りか, 修論にこっそり載るか, のどちらかになりますのでメモ書きになりました)
※ちなみに来年もあるらしいです. 次はもっと時間をかけて一桁ランクになりたいです.