関数が呼び出されDeterminePageLanguage
ます。ファイルにありますcomponents/translate/core/language_detection/language_detection_util.cc
Chromeは最初にHTML lang
属性を確認し、存在しない場合はContent-Language
HTTPヘッダーを確認します。次に、から予測を取得しcld3
ます。
コンパクト言語検出器V3(またはCLD3)は、言語識別のためのニューラルネットワークモデルです。READMEには次のように記載されています。
推論コードは、入力テキストから文字ngramを抽出し、それぞれが出現する時間の割合を計算します。たとえば、下の図に示すように、入力テキストが「banana」の場合、抽出されたトライグラムの1つは「ana」であり、対応する分数は2/4です。ngramはハッシュされて狭い範囲内のIDになり、各IDはトレーニング中に推定された密な埋め込みベクトルによって表されます。
モデルは、フラクションに従って各ngramタイプに対応する埋め込みを平均化し、平均化された埋め込みを連結して埋め込みレイヤーを作成します。
だから、基本的に、彼らはウェブサイトの束のコピーをダウンロードし、それらのウェブサイト上のテキストを見て誰かを支払い、彼らが書かれているどのような言語と言う。次は、彼らがにテキストを分割するnグラム(のグループNの文字)などニューラルネットワークを使用して、n-gram分布と言語間のマッピングを学習しました。
したがって、これらには2つの変数があります。
language
HTMLまたはヘッダーのいずれかから設定されます(両方が存在する場合、HTML属性が優先されることを思い出してください)
cld_language
これは、ページ上の文字のグループの頻度に基づく予測です
次に、この一連のifステートメントをヒットします(言語の不一致に関する分析データを送信する部分を編集しました)。
if (language.empty()) {
return cld_language;
}
if (cld_language == kUnknownLanguageCode) {
return language;
}
if (CanCLDComplementSubCode(language, cld_language)) {
return cld_language;
}
if (IsSameOrSimilarLanguages(language, cld_language)) {
return language;
}
if (MaybeServerWrongConfiguration(language, cld_language)) {
return cld_language;
}
// Content-Language value might be wrong because CLD says that this page is
// written in another language with confidence. In this case, Chrome doesn't
// rely on any of the language codes, and gives up suggesting a translation.
return kUnknownLanguageCode;
CLD3は小さく、ローカルで実行されます。実際、それはオープンソースであり、事前にトレーニングされたモデルを配布しています(ただし、モデルとそれらが使用したデータをトレーニングするためのコードは利用できません)。プロジェクトで使用できます。
オリジナルのC ++コード用のPythonバインディング(非公式で保守されていない)さえあります(Cythonをインストールする必要があります)
pip install cld3