Функція викликається DeterminePageLanguage
. Це у файліcomponents/translate/core/language_detection/language_detection_util.cc
Chrome спочатку перевіряє атрибут HTML,lang
а якщо його немає, перевіряє Content-Language
заголовк HTTP . Тоді він отримує прогноз від cld3
.
V3 Compact Language Detector (або CLD3) являє собою нейронну модель мережі для ідентифікації мови. У README зазначено:
Код висновку витягує символи ngram з вхідного тексту та обчислює частку разів, коли кожен з них з'являється. Наприклад, як показано на малюнку нижче, якщо вхідним текстом є "банан", то один із витягнутих триграм є "ana" і відповідний дріб - 2/4. Нграми хешируются до ідентифікатора в невеликому діапазоні, і кожен ідентифікатор представлений щільним вектором вбудовування, оціненим під час тренування.
Модель усереднює вбудовування, відповідні кожному типу ngram відповідно до дробів, і усереднені вбудовування з'єднуються для отримання шару вбудовування.
Тож по суті вони завантажували копії з багатьох веб-сайтів і платили комусь подивитися текст на цих веб-сайтах і сказати, якою мовою вони написані. Далі вони розділили текст на n-грам (групи з n літер) тощо. і використовував нейронну мережу для вивчення відображення між n-грамовими розподілами та мовами.
Отже, у них є дві змінні:
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