La función se llama DeterminePageLanguage
. Esta en el archivocomponents/translate/core/language_detection/language_detection_util.cc
Chrome primero verifica el atributo HTMLlang
y, si no está presente, verifica el Content-Language
encabezado HTTP . Entonces obtiene una predicción de cld3
.
El Compact Language Detector v3 (o CLD3) es un modelo de red neuronal para la identificación del idioma. El archivo README dice:
El código de inferencia extrae ngrams de caracteres del texto de entrada y calcula la fracción de veces que aparece cada uno de ellos. Por ejemplo, como se muestra en la figura siguiente, si el texto de entrada es "banana", uno de los trigramas extraídos es "ana" y la fracción correspondiente es 2/4. Los ngrams se reducen a una identificación dentro de un rango pequeño, y cada identificación está representada por un vector de incrustación denso estimado durante el entrenamiento.
El modelo promedia las incrustaciones correspondientes a cada tipo de ngrama según las fracciones, y las incrustaciones promediadas se concatenan para producir la capa de incrustación.
Esencialmente, descargaron copias de un montón de sitios web y le pagaron a alguien para que mirara el texto en esos sitios web y dijera en qué idioma están escritos. Luego dividieron el texto en n-gramas (grupos de n letras) y así sucesivamente y usó una red neuronal para aprender un mapeo entre distribuciones de n-gramas y lenguajes.
Entonces ahora tienen 2 variables:
language
que se establece desde el HTML o el encabezado (recuerde que el atributo HTML tiene prioridad si ambos están presentes)
cld_language
que es una predicción basada en las frecuencias de grupos de letras en la página
Luego llegamos a esta serie de declaraciones if (he editado la parte en la que envían datos analíticos sobre desajustes de idioma)
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 es pequeño y se ejecuta localmente. De hecho, es de código abierto y distribuyen un modelo previamente entrenado (aunque el código para entrenar el modelo y los datos que usaron no están disponibles). Puedes usarlo en tus proyectos.
Incluso hay enlaces de Python (no oficiales y sin mantenimiento) para el código C ++ original (necesitará instalar Cython )
pip install cld3