¿Cómo sabe Chrome en qué idioma está una página?

10

Acabo de abrir una página web en Google Chrome y dice "Esta página está en japonés, ¿te gustaría traducirla?".

Presumiblemente, pedir una traducción enviaría los contenidos a Google, pero ¿cómo se identifica el idioma en primer lugar? ¿Esto se hace localmente, en el navegador? ¿O esto también envía la página a Google? Si es así, ¿no se me debe pedir permiso primero? La página en sí no tiene marcado para indicar el idioma, y ​​es una página interna de la intranet, por lo que no estoy del todo seguro de que Google deba tener acceso a su contenido.

Thilo
fuente
La pregunta ¿Por qué Chrome determina incorrectamente que la página está en un idioma diferente y ofrece traducir? en StackOverflow ofrece mucha más información sobre este tema, en particular la respuesta aceptada de Emile
Owen Blacker

Respuestas:

10

El navegador Chrome puede identificar, o al menos adivinar, el idioma de la página al observar una serie de factores en la página:

Esto se puede hacer localmente sin ninguna conexión a Internet o informes a Google.

La traducción del contenido definitivamente enviaría el contenido de la página a los servidores de Google para su traducción.

s01ipsist
fuente
Una vez estaba viendo un archivo XML en Chrome, y me dijo que estaba viendo una página en ... algún idioma europeo, ¿belga quizás? Esto me sugeriría que ocurre un análisis del texto, y que salió un poco mal en mi caso. No puedo ver por qué el XML inglés habría tenido una codificación que indicaría belga. Pero sí, para algo como el japonés, la codificación sería un regalo muerto.
Cam Jackson
¿Cómo es UTF-8 un regalo para los japoneses?
Thilo
@CamJackson Estoy seguro de que no estaba sugiriendo belga ... Tal vez era holandés y Chrome encontró la letra única 'ij'
Peter Smit
1
No es completamente por codificación de página. Tengo un blog (en inglés) que recibe una cantidad decente de spam de comentarios rusos. A menudo, cuando estoy viendo mi bucket de spam, Chrome me pide que traduzca la página. Obviamente (para mí) examinar el contenido y activarse con el contenido de "otro idioma" está por encima de un cierto umbral porcentual.
cerveza
1
@Thilo, no es UTF-8 lo que muestra que es japonés, pero si un gran porcentaje de los caracteres en una página son del rango japonés de Unicode, entonces tienes tu respuesta (la detección automática de idiomas siempre es un trabajo de adivinanzas) . Al fallar el método obvio de verificar la codificación de caracteres, no creo que envíe (o al menos necesite ) enviar la página a un servidor para su detección. ¿Has visto el tamaño de chrome.dllrecientemente? ¡Es enorme! No he revisado el código (masivo) recientemente, pero sin duda hay una función o dos incorporadas para la detección de idioma (no es tan difícil).
Synetech
1

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-Languageencabezado 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
Boris
fuente