Lexical Normalisation of Short Text Messages: Makn Sens a #twitter

ACL2011
Bo Han, Timothy Baldwin

※英語力の問題で正しくないかもしれない

Twitterのテキストをフォーマルなテキストに正規化する。
文字の編集距離、発音の編集距離、とかを利用。
(suffix substring, prefix substring, etc)


Twitterでは、独特の表現が多い。
Typoや音韻的な置換(e.g. 2morrow)、文法がくちゃくちゃ、顔文字など。
強調する用途で長くする(e.g. Coooooooool)など。


従来手法は、
Noisy channel model。
よくわからんが、ill-formed textとstandard form textの変換確率を求める。
※SMTとの違いがあまりないような?文で用意しなくていいくらい?
それを文字レベルで拡張したり、音韻なんかも考慮したりする手法がでてきた。

SMT (Statistical Machine Translation) 。
対訳コーパスを使う。

Speech recognitionの応用。
テキストを音韻に変換し、音素辞書を使う。
上記2つよりも精度がよかったらしい。

いずれにせよ、上記3系統は、大量にアノテーション済みコーパスが必要。
準備が大変だし、新しいドメインには弱い。

提案手法ではアノテーションされたコーパスはいらない。


タスク
・Out Of Vocabularyのみを対象
・single-tokenの単語のみ対象

Out Of Vocabularyの定義はゆるい。
例えば、"gonna" -> "going to"は対象外。
あと、"WikiLeaks"なんかの新語も対象外。

GNU apell dictionary(未確認)の単語をOut Of Vocabularyとした。
別途インターネットで収集したSlang辞書(5021)を使用。
※Out Of Vocabularyを定義したなら、全部置換ルール作ればよいのでは?


調査
SMSやTwitterではOut Of Vocabularyが50%以上。
SMSでは人名が多く、Twitterではill formedと固有名詞が多い。
※ホント?


提案手法
1. 候補作成, 2. ill-formed抽出, 3. 候補選択

1. 候補作成 (Confusion Set)
1stステップとして、3つ以上同じ文字が続く場合は正規化。"cooooool" -> "coool"(Kaufmann and Kalita (2010))

2ndステップとして、spell checkerなどでよく用いられるやり方の、編集距離が閾値以内のIn Vocabularyを探す。

3rdステップとして、"Double metaphone algorithm"(Philips, 2000)を使って、音素レベルでの編集距離を測る。

2ndと3rdステップで、うまく閾値を決めてやれば、candidate 1269でRecall 88.8%を達成できる。

さらに、candidatesのランキングを考える。
TwitterデータのうちIn Vocabularyだけで構成されるTweetで、SRILM(Stolcke, 2002)をオプションを指定して、trigramの言語モデルを作る。
上記モデルでcandidatesをランキングし上位10%に絞ることで、candidatesを90%減らしつつrecallは84%を達成する。


2. ill-formed抽出
構文情報を利用して、対象OOVがill-formedかどうか判定する。

Stanford ParserとNYTコーパスを使って、Dependencies Bankを作る。
Dependency関係は、 (word1, word2, distance)という形で保持する。Twitterはノイジーなのでまともに構文解析はできない。しかし、係り受け情報は距離と強く関係するので、距離との三つ組で保持しておけば十分である。
出現数がScoreになる。Dependencies Bankに保存。

※ここからなにをやっているかわからない。誰かわかる人は教えてください。

In Vocabularyのみで構成されたTweetで、なにかをtarget wordとし、target wordの範囲3以内の単語で三つ組(word1, word2, distance)の組を作る。ScoreはBankから。これを正例とする。
同様に、負例はtarget wordをconfusion setの上位ランク語に置き換えて自動で作る。
これを学習データにして、Linear kernel SVMで学習モデルを作る。

OOVがill-formedかどうかは、Confusion setからOOVに対応するIV candidatesを評価することで行う。
(対象OOVを含むTweetで?)対象OOVをIV candidatesに変換し、三つ組を作って評価する。対象OOVのIV candidatesすべてがnegativeと判定されれば、OOVはOOVではないとする。そうでなければ、OOVはill-formedであるとし、IV candidatesすべてを「3. 候補選択」ステップに進ませる。
(positiveになったものだけではない点がポイント。ill-formedとされた語のIV candidatesはすべて使う)

※ものすごい疑わしい。
※この学習データの信頼性はどうなの?正例はちゃんと正例?
SVMでill-formedかどうかを判定しているあたりは、かなりあやしい。負例を辞書データとするのだとスパースすぎるらしいけど、SVM使ったからってよいとは思えない。

正例と負例の両方に入ってしまう場合は、負例の方を削除する。
対象OOVを含む文には、かなりの確率で別のOOVを含む。当然、OOVはdependencies bankには存在しないから、音素的な編集距離が1のIV単語を利用して、dependencies bankのスコアを使う。しかし、当然ノイズも増える。そのため重み付け関数を用意した。

※重み付けに対する工夫はない。適当。

先ほど、ill-formed判定器でIV candidatesがpositiveになった場合は対象OOVはill-formedだと言ったが、実際には閾値を設ける。candidatesのうち、いくつかpositiveになった場合は、対象OOVがill-formedであるとする。

※この閾値も適当。


3. 候補選択
OOVとIV candidatesから、OOVがどのIVになるかを色んな指標で評価する。

Lexical edit distance
Phonemic edit distance
Prefix substring
Suffix substring
Longest common subsequence

言語モデルの近さ(N-gram

Dependencyで作ったWord Vectorの類似度


実験
ill-formed抽出と候補選択でそれぞれ評価
ill-formed抽出では、だいたい7割正解
※なぜかTwitterデータでは実験していない。


候補選択では、最高で7割5分。
※ただし、ill-formed抽出は100%成功した前提なので、実際のパフォーマンスはもっと悪い。
※こっちはTwitterデータでも実験している。

辞書引きはPrecisionが高いけどRecallが低い。
提案手法と組み合わせることで、Baseline(noisy channel model (Cook and Stevenson, 2009)やSMT (Aw et al., 2006))よりも高い精度を達成した。



細かいところがよくわからない。