GoogleWaveのデモを見たことがある方も多いと思います。具体的には、スペルチェック技術について考えていました。これらの提案を行うために、単語が文の中で文脈的にどこに現れるかを理解することによって機能するスペルチェッカーはどれほど革新的ですか?
私はこれまでこのテクニックを見たことがありませんが、他の場所でこのテクニックの例はありますか?
もしそうなら、その動作にコード例と文献がありますか?
GoogleWaveのデモを見たことがある方も多いと思います。具体的には、スペルチェック技術について考えていました。これらの提案を行うために、単語が文の中で文脈的にどこに現れるかを理解することによって機能するスペルチェッカーはどれほど革新的ですか?
私はこれまでこのテクニックを見たことがありませんが、他の場所でこのテクニックの例はありますか?
もしそうなら、その動作にコード例と文献がありますか?
私の2セント。translate.google.comが統計的機械翻訳エンジンであり、A Halevy、P Norvig(Googleのリサーチディレクター)およびF Pereiraの「データの不合理な有効性」であるという事実を考えると、これは統計的に駆動されるスペルチェッカー。
仕組み:スペルチェックを行う言語の非常に大きなコーパスを収集します。このコーパスは、n-gramの数(の推定確率)を追跡する適応データ構造(たとえば、 n-gramサブセットをカウントする必要がある場合は接尾辞配列)にフレーズテーブルとして格納します。
たとえば、コーパスが次の要素のみで構成されている場合:
I had bean soup last diner.
このエントリから、次のバイグラム(2語のセット)を生成します。
I had, had bean, bean soup, soup last, last diner
およびトライグラム(3語のセット):
I had bean, had bean soup, bean soup last, soup last diner
しかし、それらは統計的関連性のテストによって剪定されます。たとえば、次のようになります。
I had bean
フレーズテーブルが消えます。
さて、スペルチェックはこの大きなフレーズテーブルだけを見て、「確率」をチェックします。(このフレーズテーブルを効率的なデータ構造とRAMに保存するには、優れたインフラストラクチャが必要です。Googleはtranslate.google.comにそれを用意していますが、それはなぜですか?統計的な機械翻訳よりも簡単です。)
例:入力します
I had been soup
フレーズテーブルには、
had bean soup
入力したものよりもはるかに高い確率でトライグラム!実際、はるかに高い確率でトライグラムを作成するには、1つの単語(これは「それほど遠くない」トライグラムです)を変更するだけで済みます。トレードオフの距離/確率を処理する評価関数が必要です。この距離は、文字で計算することもできます。機械翻訳ではなく、スペルチェックを行っています。
これは私の仮説的な意見にすぎません。;)
自然言語処理に飛び込むことで、このようなトピックについてすべて学ぶことができます。与えられた単語の文字列の次にどの単語が来るかを統計的に推測するのと同じくらい詳細に行うこともできます。
このようなトピックに興味がある場合は、完全にPythonで記述されたNLTK(自然言語ツールキット)を使用することを強くお勧めします。それは非常に広大な作業であり、多くのツールとかなり優れたドキュメントがあります。
また、使用されているテクニックを説明するGoogleWaveチームのCaseyWhitelawによる公式ビデオもご覧ください。http ://www.youtube.com/watch?v = Sx3Fpw0XCXk
このテーマに関する論文はたくさんあります。ここにいくつかの良いリソースがあります
これはコンテキスト感度を使用しませんが、 http://norvig.com/spell-correct.htmlから構築するのに適したベースです。
これはおそらく、より強力なスペルチェッカーの見栄えがよく理解しやすいものです http://acl.ldc.upenn.edu/acl2004/emnlp/pdf/Cucerzan.pdf
ここから、詳細を深く掘り下げることができます。google scholarを使用して上記の論文の参考文献を検索し、「スペル修正」を検索することをお勧めします