n-gramが単語の代わりにテキスト言語の識別に使用されるのはなぜですか?


12

2つの一般的な言語識別ライブラリ、Compact Language Detector 2 for C ++および Java用の言語検出では、どちらも(文字ベースの)n-gramを使用してテキスト機能を抽出しました。ワードオブワード(単一ワード/辞書)が使用されないのはなぜですか?また、バッグオブワードとNグラムの利点と欠点は何ですか?

また、テキスト分類におけるn-gramモデルの他の用途は何ですか?

おっと。同様の質問があるようです: バイグラム(N-gram)モデルを使用してテキストドキュメントの特徴ベクトルを構築することについて

しかし、誰かがより包括的な答えを出すことができますか?言語識別の場合、どちらが良いですか?

(願わくば、n-gramとword-of-wordsの意味を正しく理解できたと思います(笑)。

回答:


20

最も詳細な答えは、このトピックに関するMehryar Mohriの広範な研究にあると思います。トピックに関する彼の講義スライドへのリンクは次のとおりです。http//www.cims.nyu.edu/~mohri/amls/lecture_3.pdf

言語検出の問題は、人間の言語(単語)に構造があることです。たとえば、英語では、文字「u」が文字「q」の後に続くのは非常に一般的ですが、アラビア語の音訳ではそうではありません。n-gramは、この構造をキャプチャすることで機能します。したがって、一部の言語では、特定の文字の組み合わせが他の言語よりも多くなります。これがn-gram分類の基礎です。

一方、バッグオブワードは、大きな辞書を検索し、基本的にテンプレートマッチングを行うことに依存しています。ここには2つの主な欠点があります。1)各言語には、検索するのに比較的長い時間がかかるファイル上の単語の大規模な辞書が必要です。2)単語のどれもなければトレーニングセットはテストセットに含まれています。

バイグラム(n = 2)を使用しており、アルファベットに26文字あると仮定すると、そのアルファベットには26 ^ 2 = 676のバイグラムしかなく、その多くは決して発生しません。したがって、各言語の「プロファイル」(言語検出機能の単語を使用する)には、非常に小さなデータベースが必要です。一方、バッグオブワード分類子は、与えられた文に基づいて言語が検出されることを保証するために、各言語の完全な辞書を必要とします。

要するに、比較的小さな機能スペースで各言語プロファイルを迅速に生成できます。興味深いことに、n-gramは言語で文字がiidで描画されないためにのみ機能します-これは明示的に活用されます。

注:単語のn-gram数の一般的な方程式はl ^ nです。lはアルファベットの文字数です。


一部の近い言語では、n-gramに加えて単語のリストを使用すると役立つと思います。ノルウェー語のテキストがデンマーク語として分類されることもあります。n-gramがこれらの2つの言語を区別する良い方法だとは思いません。
kjetil bハルヴォルセン

詳細な回答ありがとうございます。しかし、これに関していくつか質問があります。まず、「トレーニングセットの単語がテストセットに含まれていない場合、単語の袋は失敗します」と説明できますか。そして、第二に、CLD2が4グラムを使用しているため、辞書メソッドを使用するとプロファイルのサイズの半分(oxforddictionaries.com/words/…)が得られる場合、英語の456976エントリになります。
dennis97519

1
@ dennis97519 re: "bag-of-words ..."辞書が英語の{"dog"、 "cat"、 "turtle"、 "animal"}と{"perro"、 "gato"のみで構成されているとします、「tortuga」、「animal」}(スペイン語の場合)。辞書では、次の文を分類できません。「動物」という単語は両方の辞書に表示されますが、他の単語は存在しないためです。これは極端な例です。4グラムについて:1)言語ごとに辞書が必要であることを忘れないでください。2)n-グラムはスパースである傾向があり(検索が高速)、3)Dougalが述べたように、数グラムで表現できます。
-justanotherbrain

1
@loretoparisi-2つのトレードオフがあります:1つ目は、モデルの複雑さ(大きなN =より複雑)と一般化エラー(テストセットでの実行方法)の間です-過剰適合は望ましくありません。2番目のトレードオフは、計算の複雑さです。メモリの複雑さはNとともに指数関数的に増加します。通常、トレーニングはテキスト内の単語の数に比例するため、非常に長いテキストであっても通常は問題になりません。とは言うものの、大きなテキストは辞書D内のより多くの単語を意味する場合が多いため、メモリの複雑さはO(D ^ N)です。実際には、通常、計算可能な限り大きいNを使用するのが最善です。
-justanotherbrain

1
@loretoparisi-それに続いて、前述のように、N-gramはまばらになる傾向がありますが、これは常に正しいとは限りません。特定のテキストに対してスパースである場合、最適なNを見つけるには、異なるNを使用した相互検証が最適なアプローチです(計算上の制約があります)。
-justanotherbrain

3

いくつかの理由により、単語の代わりに文字N-gramが使用されます。

1)特定の言語に必要な単語のリストは非常に多く、高速、高速、最速、絶食、断食、断食などをすべての異なる単語と見なすと、おそらく100,000です。80言語の場合、約80倍の単語が必要であり、50メガバイト以上の多くのスペースを占有します。

2)26文字のアルファベットの文字トライグラムの数は26 ** 3または約17,000で、クアッドグラム(N = 4)の場合、そのアルファベットを使用するすべての言語をカバーする約450,000です。30〜100文字の大きなアルファベットのN-gramの場合は、似ているがやや大きい数字。Hanスクリプトに4000以上の文字があるCJK言語の場合、ユニグラム(N = 1)で十分です。一部のUnicodeスクリプトでは、スクリプトごとに1つの言語(ギリシャ語、アルメニア語)しか存在しないため、文字の組み合わせは必要ありません(いわゆるnil-grams N = 0)

3)単語では、辞書にない単語を指定しても情報はまったくありませんが、文字N-gramでは、その単語内に少なくともいくつかの有用な文字の組み合わせがあります。

CLD2は、ラテン語、キリル語、アラビア語を含むほとんどのUnicodeスクリプト(アルファベット)にクアッドグラム、CJKスクリプトにユニグラム、他のスクリプトにnilgramを使用します。また、区別するための限られた数の非常に特徴的でかなり一般的な完全な単語と単語のペアを含みますインドネシア語やマレー語などの統計的に類似した言語の難しいグループ内。文字のバイグラムとトライグラムは、おそらく少数の言語を区別するのに役立ちます(約8つ、https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef06G_1_9NHL5dPuKIH7k/editを参照してください)、しかし何十もの言語を区別するのに役に立たない。したがって、CLD2はクワッドグラムを使用し、各文字の組み合わせに、その組み合わせを使用する上位3つの最も可能性の高い言語を関連付けます。これにより、80言語を約1.5 MBのテーブルでカバーし、160言語を約5 MBのテーブルでより詳細にカバーできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.