Функция называется DeterminePageLanguage
. Это в файлеcomponents/translate/core/language_detection/language_detection_util.cc
Сначала Chrome проверяет атрибут HTML,lang
а если его нет, он проверяет Content-Language
заголовок HTTP . Тогда он получает прогноз от cld3
.
V3 Compact Language Detector (или CLD3) представляет собой нейронную модель сети для идентификации языка. README заявляет:
Код логического вывода извлекает символьные диаграммы из входного текста и вычисляет частоту появления каждого из них. Например, как показано на рисунке ниже, если входной текст - «банан», то одна из извлеченных триграмм - «ана», а соответствующая дробь - 2/4. Нграммы хешируются до идентификатора в небольшом диапазоне, и каждый идентификатор представлен плотным вектором внедрения, оцененным во время обучения.
Модель усредняет вложения, соответствующие каждому типу ngram, в соответствии с дробями, и усредненные вложения объединяются для получения слоя вложения.
По сути, они загрузили копии группы сайтов и заплатили кому-то, чтобы они посмотрели текст на этих сайтах и сказали, на каком языке они написаны. Затем они разбили текст на n-граммы (группы из n букв) и так далее. и использовал нейронную сеть для изучения соответствия между распределениями n-граммы и языками.
Так что теперь у них есть 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 маленький и запускается локально. Фактически, это открытый исходный код, и они распространяют предварительно обученную модель (хотя код для обучения модели и используемые ими данные недоступны). Вы можете использовать его в своих проектах.
Есть даже привязки Python (неофициальные и не поддерживаемые) для исходного кода C ++ (вам нужно установить Cython )
pip install cld3