あなたの質問は正しいとは思わない: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に知らせれば、あなたは多大な参考文献を見つけるでしょう。
これはおそらく凡例が探している情報のレベルには達しませんが、Pycon 2012のこのビデオは、Pythonでnグラムを計算して(検索エンジンを構築するために)nグラムを計算する基本を説明しています。 http://pyvideo.org/video/715/building-a-python-based-search-engine。この質問につまずいた人のために。 – Wilduck
ngramを計算する際の「計算上のオーバーヘッド」はごくわずかです。コーパスを1回通過するだけで実行できます。より高次のnグラムを保存することは大したことではありません。実際のコストは、より大きいnの場合、スパース性の問題を克服するためにはより大きいコーパスが必要です。 – alexis
@alexis:より多くの情報を提供できれば幸いです。具体的には、まばらな問題に関連するもの、「nグラムを計算する際の計算上のオーバーヘッドは無視できる」という調査は何ですか?ありがとうございました。 – Legend