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