Named Entity Recognition in Tweets: An Experimental Study

ACL2011
Alan Ritter, Sam Clark, Mausam and Oren Etzioni

Twitterを対象としたNER。
POS TaggingとChunking込み。

Twitterを解析する上で大きく2つ課題がある。
1点目 データスパースネス
企業名や商品名、バンド、映画などなど、新語はたくさんでるけど、コーパス内に頻出するとは限らない。
2点目 140字制限
短い。故に色々欠落してる。背景知識とか。


提案手法
POS Tagging
従来手法でもけっこー高い精度がでる。
Brownコーパスで0.9くらい。同様の設定のTwitterデータで0.76。
精度の下がる原因は、構文的な問題というよりOut Of Vocabularyが大きい。
spellのvaliationによるところも多いが、NNPがOOVの1/3を占める(らしい)。

Stanford TaggerだとTwitterデータで0.8くらい。
Stanford TaggerはPenn Treebankで学習しているらしい。
TwitterだとCapitalizationが強調のために用いられていたり、主語なしでつぶやかれていたり、などなど。

提案手法では、Twitterデータに対してPenn TreeBankと同様の仕様のアノテーションをした。
追加で、ユーザ名、ハッシュタグ、URL、RT。
OOV対策として、Jclusterでprefixの4,8,12bitでクラスタリングした結果を使った。
※おもしろそう
POS TaggerはCRF。

上記の実装で26% error reductionできた。
IRC chat dataにもアノテーションを施し、学習を補強。Penn TreeBankのデータも使うと、最終的に41% error reduction、精度は0.883。
改善幅が大きいのがinterjectionとverb。Stanford Taggerではnounに分類されていた。
※やっぱりアノテーション済みデータがあればよくなる。他に工夫しようはないのか?

Chunking
やっぱりアノテーション。CoNLL shared taskの仕様に準拠。
追加でCoNLLのデータも学習に追加
※というかほとんどCoNLLデータになってしまった。
実装はCRF。
これで22% error reductionできた。

Capitalization
Named Entity Recognitionで強いキーになっていた要素。
Twitterでは強調の意図で使われることも多いため、素性として微妙になってしまった。
そこで、InfomativeなCapitalizationを見つける識別器を作った。
文頭かどうかとか、他にCapitalizeされたEntityがあるかとかをチェック。素性にする。
識別器はSVM
素性は、Capitarizeされた単語の一部、辞書でlowercase/capitalizedで登録されているが実際にlowercase/capitalizedじゃない単語の一部、Iが何回lowercaseで現れたか、文頭でかつcapitalizedされているかどうか。
※他にもあるかもしれない。あと、訳が間違ってるかも。

これらを総合的に組み合わせたCRFが最終的な成果物。
Stanford NERがF値0.44、提案手法はF値0.67
※もっと!もっと精度がほしい!


Infrequent WordはそれでもNERに失敗する。
そこで、FreebaseのOntologyを使い、未知語の前後の単語を集めて、品詞を推定する。LabeledLDAを使う。
素性はBag of Words。
アルゴリズムは省略。数学的なのでめんどう。

Named Entity Clasificationの精度は、DL-CotrainがF値0.53、提案手法がF値0.66
※最初のCRFで作ったNERとの関係は?


作ったプログラムは下記で入手可能。
http://github.com/aritter/twitter_nlp


おもしろい部分もあった。いい論文。
でも、やっぱりアノテーションをつけたCRFがいいのか。
それじゃつまんないんだよな。