8

このデータを考えると (両方の言語からの相対的な文字頻度):

spanish => 'e' => 13.72, 'a' => 11.72, 'o' => 8.44, 's' => 7.20, 'n' => 6.83,
english => 'e' => 12.60, 't' => 9.37, 'a' => 8.34, 'o' => 7.70, 'n' => 6.80,

そして、文字列「これはテストです」の文字頻度を計算すると、次のようになります。

"t"=>21.43, "s"=>14.29, "i"=>7.14, "r"=>7.14, "y"=>7.14, "'"=>7.14, "h"=>7.14, "e"=>7.14, "l"=>7.14

では、指定された文字列文字の頻度を言語と一致させる (そして言語を検出しようとする) ための良いアプローチは何でしょうか? レーベンシュタイン距離を使用した例をいくつか見た (そしてテストした) が、言語を追加するまでは問題なく動作するようだ。

"this is a test" gives (shortest distance:) [:english, 13] ...
"esto es una prueba" gives (shortest distance:) [:spanish, 13] ...
4

3 に答える 3

11

コサイン類似度を使用して 2 つのベクトル間の類似度を判断する ことを検討しましたか?コサイン類似度式

最初のベクトルはテスト文字列 (分類対象) から抽出された文字の頻度であり、2 番目のベクトルは特定の言語のベクトルです。

現在、単一文字の頻度 (ユニグラム) を抽出しています。バイグラムやトライグラムなどの高次の n-gramを抽出することをお勧めします (十分なトレーニング データがある場合はさらに大きくなります)。たとえば、バイグラムの場合、"aa"、"ab"、"ac" ... "zz" の頻度を計算します。これにより、1 文字の頻度のみを考慮する場合よりも多くの情報を抽出できます。

ただし、高次の n-gram を使用する場合はより多くのトレーニング データが必要になるため、注意してください。そうしないと、これまでに見たことのない文字の組み合わせに多くの 0 値が含まれることになります。

さらに、2 つ目の可能性は、純粋な文字 (用語) 頻度の代わりにtf-idf (用語-頻度逆ドキュメント頻度) 重み付けを使用することです。

リサーチ

これは、機械学習分類器を使用する (非常に) 短いテキストの言語識別に関する優れたスライドショーです(ただし、他の優れた情報もあります)。

これは短い論文A Comparison of Language Identification Approaches on Short, Query-Style Textsです。これも役に立つかもしれません。

于 2013-03-29T20:57:49.870 に答える
1

あなたが与えた例は、それぞれ短い文で構成されていました。統計によると、入力が長い場合 (たとえば、段落)、一意の頻度を特定しやすくなります。

ユーザーがより長い入力を行うことに頼ることができない場合は、文字の頻度が一致する場合は、その言語で一般的な単語 (is、as、and、but ... など) も探しますか?

于 2013-03-29T19:49:17.967 に答える