スペル訂正エンジンについてのサーベイ #tokyonlp
DESCRIPTION
第5回自然言語処理勉強会で発表した資料です。TRANSCRIPT
スペル訂正エンジンについてのサーベイ
#tokyonlp @nokuno
自己紹介•@nokuno / id:nokuno
•#TokyoNLP主催
•Social IME / StaKK開発者
•Web系ソフトウェアエンジニア
近況報告
言語処理学会で発表しました
近況報告その1
シリコンバレーに行ってきました
近況報告その2
近況報告その3
情報処理学会誌にTokyoNLPが載りました
近況報告その4
IJCNLP2011でプログラム委員やります
今日の内容
1.Noisy Channel Model
2.Improved Error Model
3.EM-based Error Model
4.Discriminative Model
5.Phrase-based Error Model
スペル訂正とは
• タイプミスや思い違いを修正• 例:SHCOOL→SCHOOL
例:Googleもしかして
1. Noisy Channel Model
A Spelling Correction Program Based on a
Noisy Channel Model, M. Kernighan+. 1990.
基本原理
• 訂正候補のスコアを確率モデル化
• c: 出力の訂正候補
• t: 入力のタイポ
• スコアが最大or大きい順に候補を選ぶ
Noisy Channel Model
• P(c): 言語モデル
• 使われやすさを表す• P(t|c):エラーモデル
• 間違えやすさを表すKernighan+. 1990
言語モデル
• 単語N-gramモデル
• @machyさんが説明してくれたはず
• スペル訂正では単語unigramも可
エラーモデル
• エラーモデル=間違えやすさ• 間違えやすさってなに?• 文字列として似ているかどうか• キーボード上で近いかどうか• 発音や読みが近いかどうか• 意味が近いかどうか
編集距離
4種類の編集操作の回数を数える
単語 → 誤り
• 挿入: 東京都 → 東京t都
• 削除: 東京都 → 東都
• 置換: 東京都 → 東京群
• 転置: 東京都 → 東都京
重み付き編集距離
• 編集操作と文字の頻度で重み付け• 挿入と削除の1文字前を考慮
置換操作の表
2. Improved Error Model
An Improved Error Model for Noisy
Channel Spelling Correction, E. Brill+.
2000.
Improved Error Model
• エラーモデルに2つの拡張を加えた• 編集操作を複数文字に拡張• 誤りの出現位置を考慮• 単語の先頭は誤りにくい• 先頭、中間、最後の3値
E.Brill+. 2000.
拡張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の誤り確率
ちゃんと書くと
• 分割と結合で2つの周辺化が必要• 同じ文字への置換にも確率を与える
めんどいので確率最大の分割で近似
過程や…方法など…
拡張2:誤りの出現位置を考慮
• 編集確率を条件付きにするだけ• P(α→β|Position)
• Position={start, middle, end}
• 単語の先頭は間違えにくい• antler→entler
• reluctant→reluctent
そんなにモデルをリッチにして、スパースにならないの?
訓練フェーズ
• (誤り,正解)ペアの集合から学習する
• 以下の3ステップ
1.アライメントをとる2.複数文字に拡張する3.カウントして確率を求める
1. アライメント
• 誤りの文字と正解の文字を対応付ける• 編集距離が最小となる対応を選ぶ• 1文字の編集ならDPで一意に定まる
• 例: (akgsual, actual)
2. 複数文字に拡張
• 1文字の編集操作を抜き出す
隣接文字を加える※増えてる
3. カウントする
• 最尤推定(?)
• count(α)の推定には元コーパスが必要
• 誤らない回数も含める必要がある• 元コーパスがないとややトリッキー
EMアルゴリズムとの関係
• 「本質的にはEMアルゴリズムの1イテレーションを行っている」?
• コーパス中の分割は隠れ変数• すべての分割を等確率に初期化• 編集確率を推定• 分割方法の期待値を再推定
実験結果1
実験結果2
3. EM-based Error Model
Learning a Spelling Error Model from
Search Query Logs, F. Ahmad+. 2005.
問題設定
• クエリログからクエリの訂正を行なう• 誤りと正解のペアデータは必要ない• クエリログは10〜15%のスペルミスを含むので、ここから学習したい
EM-Algorithm
1.初期化:編集距離テーブルを等確率に2.E-Step:
• クエリログにスペル訂正を適用する3.M-Step:
• 編集距離テーブルを更新する• Eステップの候補と確率を使う
EMアルゴリズム
誤り確率の例
よくある置換
精度
正解データを使った場合よりは悪い
4. Discriminative Model
Improving Query Spelling Correction Using
Web Search Results, Q.Chen+. 2007.
最大エントロピー法
• @sleepy_yohsiさんが説明(ry
• 以下の式を最大化する識別モデル
• 素性としてWeb検索結果を突っ込む
素性
素性
ベースライン(生成モデル)の出力
検索ヒット数
URL文字列に訂正候補を含むか
訂正候補のタイトル・スニペット中の頻度
入力クエリのタイトル・スニペット中の頻度
略語かどうか
モデルの拡張
• 入力クエリだけでなく訂正候補で検索しなおす
実験結果
• M0→M1→M2と精度が向上
5. Phrase-based Error Model
A Large Scale Ranker-Based System for Search
Query Spelling Correction, J.Gao+. 2010.
3つの特徴
• 識別的な手法としてランク学習を利用• Webスケールの言語モデルを利用
• フレーズベースのエラーモデルを提案
1. ランク学習の利用
• 以下のような種類の素性を利用
素性
文字列の表層的な類似度
発音記号に基づく類似度
固有表現抽出に基づく素性
辞書(Wiki/MSDN/ODP)に基づく素性
頻度に基づく素性(クエリログやウェブ検索)
学習はニューラルネットor平均パーセプトロン
2. Webスケール言語モデル
• 合計13TBにも及ぶN-gramを利用
• Absolute Discountでスムージング
• SQLライクなMS製言語SCOPEを使用
• 検索も分散KVSで行なう
SQLライク…?
どうみてもMapReduceです(ry
3. Phrase-based Error
Model
• 単語より長い単位の誤りを扱いたい• 例:theme park → theme part
• 以下の手順に従って生成1.クエリをフレーズに分割2.各フレーズごとに編集操作を加える3.各フレーズを並び替え
誤りプロセス
近似と式変形
S:分割、T:スペル誤り、M:並び替え
sumをmaxで近似
MはA*で一意にアライメント
学習にはブラウザの検索ログを使います(キリッ
実験結果
Noisy Channel Modelによるスペル訂正を実
装してみた
おまけ
AOLのクエリログ
• 2006年にAOLが誤って(?)公開してしまった検索ログデータ
• 3ヶ月分のクエリログ(英語)
• 圧縮状態400MB、36Mクエリ
http://www.gregsadetsky.com/aol-data/
頻出クエリの抽出
頻度 クエリ
480780 -
172358 google
83006 ebay
70258 yahoo
65946 mapquest
59388 yahoo.com
49696 google.com
46089
myspace.co
m
35649 myspace
31185 internet
Trieであいまい検索
t
r
i
e
e
e
y
• 頻出クエリでtrieを作る
• 編集操作を許しながらたどる
訂正候補の例
•shcool→school
•gooogle→google
•nokuno→pokeno
ブートストラップ
• クエリログ自体にスペル訂正を適用スペルミス 訂正候補
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
参考文献
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.
発表者を募集しております
ご清聴ありがとうございました