スペル訂正エンジンについてのサーベイ #tokyonlp

65
スペル訂正エンジンに ついてのサーベイ #tokyonlp @nokuno

Upload: yoh-okuno

Post on 11-Jun-2015

3.419 views

Category:

Documents


0 download

DESCRIPTION

第5回自然言語処理勉強会で発表した資料です。

TRANSCRIPT

Page 1: スペル訂正エンジンについてのサーベイ #TokyoNLP

スペル訂正エンジンについてのサーベイ

#tokyonlp @nokuno

Page 2: スペル訂正エンジンについてのサーベイ #TokyoNLP

自己紹介•@nokuno / id:nokuno

•#TokyoNLP主催

•Social IME / StaKK開発者

•Web系ソフトウェアエンジニア

Page 3: スペル訂正エンジンについてのサーベイ #TokyoNLP

近況報告

Page 4: スペル訂正エンジンについてのサーベイ #TokyoNLP

言語処理学会で発表しました

近況報告その1

Page 5: スペル訂正エンジンについてのサーベイ #TokyoNLP

シリコンバレーに行ってきました

近況報告その2

Page 6: スペル訂正エンジンについてのサーベイ #TokyoNLP

近況報告その3

情報処理学会誌にTokyoNLPが載りました

Page 7: スペル訂正エンジンについてのサーベイ #TokyoNLP

近況報告その4

IJCNLP2011でプログラム委員やります

Page 8: スペル訂正エンジンについてのサーベイ #TokyoNLP

今日の内容

1.Noisy Channel Model

2.Improved Error Model

3.EM-based Error Model

4.Discriminative Model

5.Phrase-based Error Model

Page 9: スペル訂正エンジンについてのサーベイ #TokyoNLP

スペル訂正とは

• タイプミスや思い違いを修正• 例:SHCOOL→SCHOOL

Page 10: スペル訂正エンジンについてのサーベイ #TokyoNLP

例:Googleもしかして

Page 11: スペル訂正エンジンについてのサーベイ #TokyoNLP

1. Noisy Channel Model

A Spelling Correction Program Based on a

Noisy Channel Model, M. Kernighan+. 1990.

Page 12: スペル訂正エンジンについてのサーベイ #TokyoNLP

基本原理

• 訂正候補のスコアを確率モデル化

• c: 出力の訂正候補

• t: 入力のタイポ

• スコアが最大or大きい順に候補を選ぶ

Page 13: スペル訂正エンジンについてのサーベイ #TokyoNLP

Noisy Channel Model

• P(c): 言語モデル

• 使われやすさを表す• P(t|c):エラーモデル

• 間違えやすさを表すKernighan+. 1990

Page 14: スペル訂正エンジンについてのサーベイ #TokyoNLP

言語モデル

• 単語N-gramモデル

• @machyさんが説明してくれたはず

• スペル訂正では単語unigramも可

Page 15: スペル訂正エンジンについてのサーベイ #TokyoNLP

エラーモデル

• エラーモデル=間違えやすさ• 間違えやすさってなに?• 文字列として似ているかどうか• キーボード上で近いかどうか• 発音や読みが近いかどうか• 意味が近いかどうか

Page 16: スペル訂正エンジンについてのサーベイ #TokyoNLP

編集距離

4種類の編集操作の回数を数える

単語 → 誤り

• 挿入: 東京都 → 東京t都

• 削除: 東京都 → 東都

• 置換: 東京都 → 東京群

• 転置: 東京都 → 東都京

Page 17: スペル訂正エンジンについてのサーベイ #TokyoNLP

重み付き編集距離

• 編集操作と文字の頻度で重み付け• 挿入と削除の1文字前を考慮

Page 18: スペル訂正エンジンについてのサーベイ #TokyoNLP

置換操作の表

Page 19: スペル訂正エンジンについてのサーベイ #TokyoNLP

2. Improved Error Model

An Improved Error Model for Noisy

Channel Spelling Correction, E. Brill+.

2000.

Page 20: スペル訂正エンジンについてのサーベイ #TokyoNLP

Improved Error Model

• エラーモデルに2つの拡張を加えた• 編集操作を複数文字に拡張• 誤りの出現位置を考慮• 単語の先頭は誤りにくい• 先頭、中間、最後の3値

E.Brill+. 2000.

Page 21: スペル訂正エンジンについてのサーベイ #TokyoNLP

拡張1:編集操作の拡張

f i s i k le

f i s i k al

f i s i c al

f y s i c al

ph y s i c alP(f|ph)×

P(i|y)×

P(k|c)×

P(le|al)

例:physical→fisikleの誤り確率

Page 22: スペル訂正エンジンについてのサーベイ #TokyoNLP

ちゃんと書くと

• 分割と結合で2つの周辺化が必要• 同じ文字への置換にも確率を与える

めんどいので確率最大の分割で近似

Page 23: スペル訂正エンジンについてのサーベイ #TokyoNLP

過程や…方法など…

Page 24: スペル訂正エンジンについてのサーベイ #TokyoNLP

拡張2:誤りの出現位置を考慮

• 編集確率を条件付きにするだけ• P(α→β|Position)

• Position={start, middle, end}

• 単語の先頭は間違えにくい• antler→entler

• reluctant→reluctent

Page 25: スペル訂正エンジンについてのサーベイ #TokyoNLP

そんなにモデルをリッチにして、スパースにならないの?

Page 26: スペル訂正エンジンについてのサーベイ #TokyoNLP

訓練フェーズ

• (誤り,正解)ペアの集合から学習する

• 以下の3ステップ

1.アライメントをとる2.複数文字に拡張する3.カウントして確率を求める

Page 27: スペル訂正エンジンについてのサーベイ #TokyoNLP

1. アライメント

• 誤りの文字と正解の文字を対応付ける• 編集距離が最小となる対応を選ぶ• 1文字の編集ならDPで一意に定まる

• 例: (akgsual, actual)

Page 28: スペル訂正エンジンについてのサーベイ #TokyoNLP

2. 複数文字に拡張

• 1文字の編集操作を抜き出す

隣接文字を加える※増えてる

Page 29: スペル訂正エンジンについてのサーベイ #TokyoNLP

3. カウントする

• 最尤推定(?)

• count(α)の推定には元コーパスが必要

• 誤らない回数も含める必要がある• 元コーパスがないとややトリッキー

Page 30: スペル訂正エンジンについてのサーベイ #TokyoNLP

EMアルゴリズムとの関係

• 「本質的にはEMアルゴリズムの1イテレーションを行っている」?

• コーパス中の分割は隠れ変数• すべての分割を等確率に初期化• 編集確率を推定• 分割方法の期待値を再推定

Page 31: スペル訂正エンジンについてのサーベイ #TokyoNLP
Page 32: スペル訂正エンジンについてのサーベイ #TokyoNLP

実験結果1

Page 33: スペル訂正エンジンについてのサーベイ #TokyoNLP

実験結果2

Page 34: スペル訂正エンジンについてのサーベイ #TokyoNLP

3. EM-based Error Model

Learning a Spelling Error Model from

Search Query Logs, F. Ahmad+. 2005.

Page 35: スペル訂正エンジンについてのサーベイ #TokyoNLP

問題設定

• クエリログからクエリの訂正を行なう• 誤りと正解のペアデータは必要ない• クエリログは10〜15%のスペルミスを含むので、ここから学習したい

Page 36: スペル訂正エンジンについてのサーベイ #TokyoNLP

EM-Algorithm

1.初期化:編集距離テーブルを等確率に2.E-Step:

• クエリログにスペル訂正を適用する3.M-Step:

• 編集距離テーブルを更新する• Eステップの候補と確率を使う

Page 37: スペル訂正エンジンについてのサーベイ #TokyoNLP

EMアルゴリズム

Page 38: スペル訂正エンジンについてのサーベイ #TokyoNLP

誤り確率の例

Page 39: スペル訂正エンジンについてのサーベイ #TokyoNLP

よくある置換

Page 40: スペル訂正エンジンについてのサーベイ #TokyoNLP

精度

正解データを使った場合よりは悪い

Page 41: スペル訂正エンジンについてのサーベイ #TokyoNLP

4. Discriminative Model

Improving Query Spelling Correction Using

Web Search Results, Q.Chen+. 2007.

Page 42: スペル訂正エンジンについてのサーベイ #TokyoNLP

最大エントロピー法

• @sleepy_yohsiさんが説明(ry

• 以下の式を最大化する識別モデル

• 素性としてWeb検索結果を突っ込む

Page 43: スペル訂正エンジンについてのサーベイ #TokyoNLP

素性

素性

ベースライン(生成モデル)の出力

検索ヒット数

URL文字列に訂正候補を含むか

訂正候補のタイトル・スニペット中の頻度

入力クエリのタイトル・スニペット中の頻度

略語かどうか

Page 44: スペル訂正エンジンについてのサーベイ #TokyoNLP

モデルの拡張

• 入力クエリだけでなく訂正候補で検索しなおす

Page 45: スペル訂正エンジンについてのサーベイ #TokyoNLP

実験結果

• M0→M1→M2と精度が向上

Page 46: スペル訂正エンジンについてのサーベイ #TokyoNLP

5. Phrase-based Error Model

A Large Scale Ranker-Based System for Search

Query Spelling Correction, J.Gao+. 2010.

Page 47: スペル訂正エンジンについてのサーベイ #TokyoNLP

3つの特徴

• 識別的な手法としてランク学習を利用• Webスケールの言語モデルを利用

• フレーズベースのエラーモデルを提案

Page 48: スペル訂正エンジンについてのサーベイ #TokyoNLP

1. ランク学習の利用

• 以下のような種類の素性を利用

素性

文字列の表層的な類似度

発音記号に基づく類似度

固有表現抽出に基づく素性

辞書(Wiki/MSDN/ODP)に基づく素性

頻度に基づく素性(クエリログやウェブ検索)

学習はニューラルネットor平均パーセプトロン

Page 49: スペル訂正エンジンについてのサーベイ #TokyoNLP

2. Webスケール言語モデル

• 合計13TBにも及ぶN-gramを利用

• Absolute Discountでスムージング

• SQLライクなMS製言語SCOPEを使用

• 検索も分散KVSで行なう

Page 50: スペル訂正エンジンについてのサーベイ #TokyoNLP

SQLライク…?

Page 51: スペル訂正エンジンについてのサーベイ #TokyoNLP

どうみてもMapReduceです(ry

Page 52: スペル訂正エンジンについてのサーベイ #TokyoNLP

3. Phrase-based Error

Model

• 単語より長い単位の誤りを扱いたい• 例:theme park → theme part

• 以下の手順に従って生成1.クエリをフレーズに分割2.各フレーズごとに編集操作を加える3.各フレーズを並び替え

Page 53: スペル訂正エンジンについてのサーベイ #TokyoNLP

誤りプロセス

Page 54: スペル訂正エンジンについてのサーベイ #TokyoNLP

近似と式変形

S:分割、T:スペル誤り、M:並び替え

sumをmaxで近似

MはA*で一意にアライメント

Page 55: スペル訂正エンジンについてのサーベイ #TokyoNLP

学習にはブラウザの検索ログを使います(キリッ

Page 56: スペル訂正エンジンについてのサーベイ #TokyoNLP

実験結果

Page 57: スペル訂正エンジンについてのサーベイ #TokyoNLP

Noisy Channel Modelによるスペル訂正を実

装してみた

おまけ

Page 58: スペル訂正エンジンについてのサーベイ #TokyoNLP

AOLのクエリログ

• 2006年にAOLが誤って(?)公開してしまった検索ログデータ

• 3ヶ月分のクエリログ(英語)

• 圧縮状態400MB、36Mクエリ

http://www.gregsadetsky.com/aol-data/

Page 59: スペル訂正エンジンについてのサーベイ #TokyoNLP

頻出クエリの抽出

頻度 クエリ

480780 -

172358 google

83006 ebay

70258 yahoo

65946 mapquest

59388 yahoo.com

49696 google.com

46089

myspace.co

m

35649 myspace

31185 internet

Page 60: スペル訂正エンジンについてのサーベイ #TokyoNLP

Trieであいまい検索

t

r

i

e

e

e

y

• 頻出クエリでtrieを作る

• 編集操作を許しながらたどる

Page 61: スペル訂正エンジンについてのサーベイ #TokyoNLP

訂正候補の例

•shcool→school

•gooogle→google

•nokuno→pokeno

Page 62: スペル訂正エンジンについてのサーベイ #TokyoNLP

ブートストラップ

• クエリログ自体にスペル訂正を適用スペルミス 訂正候補

goggle google

e-bay ebay

mysapce.com myspace.com

e bay ebay

myspace myspace.com

google google.com

wwww.google.com www.google.com

yahoo yahoo.com

goggle.com google.com

google.co google.com

Page 63: スペル訂正エンジンについてのサーベイ #TokyoNLP

参考文献

1. A Spelling Correction Program Based on a Noisy Channel

Model, M. Kernighan+. 1990.

2. An Improved Error Model for Noisy Channel Spelling

Correction, E. Brill+. 2000.

3. Learning a Spelling Error Model from Search Query Logs,

F. Ahmad+. 2005.

4. Improving Query Spelling Correction Using Web Search

Results, Q.Chen+. 2007.

5. A Large Scale Ranker-Based System for Search Query

Spelling Correction, J.Gao+. 2010.

Page 64: スペル訂正エンジンについてのサーベイ #TokyoNLP

発表者を募集しております

Page 65: スペル訂正エンジンについてのサーベイ #TokyoNLP

ご清聴ありがとうございました