2012-04-23 1 views
8

nグラム(n> 3)(およびその出現頻度)を計算する際の計算上のオーバーヘッドを考慮して、何が使用されているのか疑問に思っています。バイグラムやトリグラムだけでは十分ではないアプリケーションはありますか?バイグラムやトリグラムに比べて、nグラム(n> 3)が重要なのはいつですか?

もしそうなら、nグラム抽出の最先端技術は何ですか?助言がありますか?私は、次の点に注意しています:

+1

これはおそらく凡例が探している情報のレベルには達しませんが、Pycon 2012のこのビデオは、Pythonでnグラムを計算して(検索エンジンを構築するために)nグラムを計算する基本を説明しています。 http://pyvideo.org/video/715/building-a-python-based-search-engine。この質問につまずいた人のために。 – Wilduck

+0

ngramを計算する際の「計算上のオーバーヘッド」はごくわずかです。コーパスを1回通過するだけで実行できます。より高次のnグラムを保存することは大したことではありません。実際のコストは、より大きいnの場合、スパース性の問題を克服するためにはより大きいコーパスが必要です。 – alexis

+0

@alexis:より多くの情報を提供できれば幸いです。具体的には、まばらな問題に関連するもの、「nグラムを計算する際の計算上のオーバーヘッドは無視できる」という調査は何ですか?ありがとうございました。 – Legend

答えて

3

私はここに記載されたタグの良い取引に精通していないよ、しかし、N-グラム(抽象概念)は、しばしば統計モデルに関連して有用である。グラムの長さは、特定のコンテキストを提供するために提供されていますどのくらいのデータに依存(特にPPM品種)

  • 圧縮アルゴリズム:結果として、ここではバイグラムとトライグラムに単に制限されていない一部のアプリケーションです。
  • 近似文字列マッチング(遺伝子配列マッチングのための例えばBLAST)
  • 予測モデル(例えば、名前ジェネレータ)
  • 音声認識は(音素グラムは、現在の音素受けた認識の可能性の可能性を評価するために使用されている)

これは私の頭の上から外れているものですが、はるかに多くのリストがありますon Wikipedia

"最先端の" nグラム抽出までは考えられません。 N-gram「抽出」は、n-gramスタイルのモデリングの利点を維持しながら、特定のプロセスをスピードアップするための特別な試みです。要するに、「最先端技術」は、あなたが何をしようとしているかにかかっています。あいまいなマッチングやあいまいなグループ分けを検討している場合は、一致/グループ化しているデータの種類によって異なります。 (例:通りのアドレスは、ファジーマッチとファーストネームとでは非常に異なることになります)

3

高次nグラムについて考えるには、非正規化autocorrelation functionへの接続、つまり相関それ自身との信号の2グラムのコーパスは単語の相関を1単語の「時間」と比較し、3グラムは2ステップの「時間」の情報を与えることができます。より高次のnグラムは、特定のコーパスの確率分布の尺度を与える(Moby DickまたはヒトDNA)。このようにして、nグラムがヌル期待値と異なる場合、そのnの値について有用な統計情報が存在する。 Kaganarの答えに加えて

2

stylometric analysisあらゆる種類の長い浅い構文解析のためのnグラムが必要になります(スタイルを書いて、または、テキストのエポックを検出しようとしているに基づいてプロファイリングなど、著者)。通常、このようなアプローチは、PCFG,TAGなどに基づいた深い構文解析によって補完されます。

3

あなたの質問は正しいとは思わない:Ngramsはツールであり解決すべき問題ではないので、最先端技術 "をnグラム単位で提供しています。@Hookedが指摘しているように、ngramは一種の自己相関関数(または「自己回帰関数」)です。あなたが本当に知りたいのは、最先端のソリューションが長いngramを含む問題がある場合です。

金融や天気のモデルや音声認識などの数値アプリケーションの場合は、次元> 3のベクトルを使用してください。例えば、自己回帰隠れマルコフモデルは、最後のn測定値の区分的関数に適合する。ここで、nは、過去の状態が将来の予測に関係する場合には、適度に大きくなり得る。

しかし、すべての例は単語ngramに関係しており、n> 3がそのドメインで役立つとは思われません。計算コストや十分なトレーニングデータを見つけるのは難しいと思っています。言葉による表情的な自己相関は、3単語程度で終わったようです。ランダムな例:this articleは、ngramベースの情報コンテンツの観点からZipfの法則を再解釈しようとします。 nは最大4と考えられますが、トライグラム数の全体的な相関が最も高くなります。

n> 3ではありません。が有用です。しかし、それがあまり上がらないように見えるというあなたの見解は十分に確立されています。

しかし、テキストにngramsを数えるの複雑さは問題ではないことに注意してください:あなたは、長さLのトークン化コーパスを持っている場合は、このようなコーパスのすべてngramsを集めることができます:あなたのよう

for i in range(0, L-n): 
     tuple = corpus[i:i+n] 
     ngrams[tuple] += 1 

これは、O(L)のステップしか必要としないことがわかります。つまり、それはコーパスのサイズに対して線形であり、nで成長しません。したがって、任意の次元のngramを収集することは問題ではありません。しかし、可能なnグラムの数はすぐにキノコになります。説明するために、32文字のトークン(文字と句読クラス)を区別すると、1024文字のバイグラムがありますが、1048576のテトラグラムです。頻度表を作成するのに十分なものを見つけるには、指数関数的に多くのテキストが必要です。 Wordの

あなたは多くは 32個の以上の異なるワードトークンを持っていないだけでなくので、スパース性の問題が、さらに悪くなるngramsが、コーパスのサイズと語彙サイズが大きくなる(ゆっくり):有名な「ロングテール」プロパティ。したがって、あなたが収集するコーパスの大きさに関わらず、あなたのデータは(nの場合でも)まばらになります。計算コストが別々のngramの数に依存する複雑な統計モデルに合わせる必要があります。

結果として、スパース性は常にngramアプリケーションで問題になります(通常は「スムージング」が必要です)。あなたがグーグルの "希薄さ"をGoogleに知らせれば、あなたは多大な参考文献を見つけるでしょう。

0

データセットが非常に大きい場合は、n> 3言語モデルを使用することもできます。

+0

はコメントにする必要があります – Robert

関連する問題