← ブログに戻る

言語検出API:トライグラム検出の仕組み

言語検出API:トライグラム検出の仕組み

トライグラム頻度による言語検出は、テキストに含まれる3文字の並びを数え、その分布を言語ごとにあらかじめ計算したプロファイルと比較して、テキストの言語を特定する手法です。ニューラルモデルを必要としない、コンパクトで高速な統計的手法で、76言語に対応する ipto の言語検出器もこの方式を採用しています。

トライグラム検出の仕組み

言語にはそれぞれ特徴的な文字の組み合わせがあります。英語では「the」「ing」「ion」のような並びがあちこちに現れ、スペイン語では「ión」「que」「los」が、ドイツ語では「sch」「ein」「der」が頻出します。トライグラムとは、テキストから取り出した3文字の連続のことで、通常は小文字化し、数字と句読点を取り除いたうえで、単語の境界がパターンの一部になるようスペースを残します。たとえば「 th」という文字列は、「th」で始まる単語を示します。

検出器は、大規模な参照コーパス全体でトライグラムを数え、頻度順に並べることで、言語ごとのプロファイルを事前に作成します。クエリ時には、入力テキストに対して同じ処理を行い、その分布が各保存プロファイルにどれだけ近いかを測定します。距離が最も小さい言語が選ばれ、最良の候補と次点の候補との差が信頼度の値になります。プロファイルはルックアップテーブルなので、リクエストあたりの処理は、テキストを1回走査して数回比較するだけです。リモートのサービスは不要で、テキストに関する情報がサーバーの外に出ることはありません。

文字体系とトライグラム

トライグラムの統計が最も役立つのは、多くの言語が同じ文字体系を共有している場合です。ラテン文字、キリル文字、アラビア文字、デーヴァナーガリー文字はそれぞれ多くの言語で使われており、検出器はポルトガル語とスペイン語、ロシア語とウクライナ語を区別するために、頻度のパターンに頼らざるを得ません。ギリシャ語、タイ語、韓国語、タミル語、ベンガル語のように固有の文字体系を持つ言語は、通常は文字体系だけで言語を特定できるため、頻度の比較は不要です。中国語と日本語はもう少し注意が必要です。日本語のテキストは仮名と漢字が混在しており、これが日本語の強い手がかりになります。ipto では、76言語のうち61言語をトライグラム頻度で区別し、残りの15言語は文字体系から認識します。

得意なケースと苦手なケース

タイトル、コメント、検索クエリ、サポートチケットなどの短いWebテキストには、トライグラム方式が適しています。有用な推定を出すのに必要な入力が非常に少なく、実行コストが低く、完全に決定的であるため、挙動のテストやデバッグが簡単です。大規模なニューラル分類器は、特に極端に短いテキストやノイズの多いテキストなど、難しいケースでより高い精度を発揮することがありますが、実行コストが高く、中身を調べにくくなります。どちらが優れているかは、求める精度と制約によって決まります。ルーティングやタグ付けには、軽量な検出器で十分なことが多いです。

頼る前に、失敗するパターンを把握しておきましょう。

  • 非常に短い入力。数文字ではトライグラムが少なすぎます。ipto のAPIは、10文字未満の入力には言語としてnullを返し、約30文字未満の入力では最良の推定を返すことがあっても、reliable をfalseにします。
  • 近縁の言語。ノルウェー語とデンマーク語、クロアチア語とセルビア語は、トライグラムの大部分を共有しています。信頼度が低いときは、次点の候補を確認してください。
  • 複数言語が混在するテキスト。プロファイルの比較は、支配的な言語が1つであることを前提としています。途中で言語が切り替わる段落では、文字の大半を占める言語が返されます。
  • ノイズ。URL、コード、ハッシュタグ、商品コードは、どの言語にも属さないトライグラムを加えます。検出の前に取り除いてください。
  • まれな言語。対応する言語の範囲外の言語では、正確な言語ではなく、統計的にもっとも近いものが返されます。

実際の使い方

言語検出器にテキストを貼り付けると、最も可能性の高い言語、信頼度の値、次点の候補が表示されます。コードからは GET /v1/language?text=Bonjour を呼び出します。リクエストはローカルで解析され、テキストはサードパーティのベンダーやAIモデルに送信されず、何も記録されません。無料枠はサインアップ不要で1日1,000リクエストまで利用でき、レスポンスのフィールドはAPIドキュメントに記載されています。

一般的な用途は、翻訳元の言語の選択、ページの lang 属性の設定、サポートチケットの適切なチームへの振り分けなどです。もう一つの有用なパターンは、テキストの言語とネットワークの文脈を組み合わせることです。言語は接続ではなく書き手に関するシグナルなので、接続元の場所と食い違うことがよくあります。フランスにいる、あるいはVPN経由のスペイン語話者は、まったく普通です。2つのシグナルを比較したい場合は、IPアドレスのVPN・プロキシチェックで、場所の不一致にネットワーク上の説明があるかを確認でき、User-Agentパーサーはブラウザとデバイスの文脈を示します。不一致はヒントとして扱い、何かが間違っている証拠とは決して見なさないでください。

率直な回答

3文字の並びを数え、その頻度を言語ごとに保存されたプロファイルと比較して、テキストの言語を特定する手法です。最も近いプロファイルが答えとなり、その差が信頼度の値になります。
短い文字列にはトライグラムが少なすぎて、似た言語を確実に区別できないためです。ipto のAPIは10文字未満では言語としてnullを返し、約30文字未満の結果は信頼できないものとしてフラグを立てます。
いいえ。ipto の言語検出器はトライグラム統計でローカルにテキストを解析し、外部のベンダーやAIモデルを呼び出さず、入力を記録しません。
← ブログに戻る