Comment Chrome sait-il dans quelle langue se trouve une page?

10

Je viens d'ouvrir une page Web dans Google Chrome et elle dit "Cette page est en japonais, voulez-vous la traduire?".

Demander une traduction enverrait probablement le contenu à Google, mais comment la langue est-elle identifiée en premier lieu? Est-ce que cela se fait localement, dans le navigateur? Ou cela envoie-t-il également la page à Google? Dans l'affirmative, ne devrais-je pas d'abord demander la permission? La page elle-même n'a pas de balisage pour indiquer la langue, et c'est une page intranet interne, donc je ne suis pas du tout sûr que Google devrait avoir accès à son contenu.

Thilo
la source
La question Pourquoi Chrome détermine-t-il incorrectement que la page est dans une autre langue et propose de la traduire? sur StackOverflow donne un tas plus d'informations sur ce sujet, en particulier la réponse acceptée d' Emile
Owen Blacker

Réponses:

10

Le navigateur Chrome peut identifier, ou du moins deviner, la langue de la page en examinant un certain nombre de facteurs sur la page:

Cela peut être fait localement sans autre connexion Internet ni rapport à Google.

La traduction du contenu enverrait certainement le contenu de la page aux serveurs Google pour traduction.

s01ipsist
la source
Je regardais une fois un fichier XML dans Chrome, et cela m'a dit que je regardais une page dans ... une langue européenne, belge peut-être? Cela me donnerait à penser qu'une analyse du texte a lieu et s'est mal passée dans mon cas. Je ne vois pas pourquoi le XML anglais aurait eu un encodage qui indiquerait le belge. Mais oui, pour quelque chose comme le japonais, l'encodage serait un cadeau mort.
Cam Jackson
Comment UTF-8 est-il un cadeau pour les japonais?
Thilo
@CamJackson Je suis sûr que cela ne suggérait pas le belge ... Peut-être que c'était le néerlandais et que chrome a trouvé la seule lettre 'ij'
Peter Smit
1
Ce n'est pas entièrement par l'encodage des pages. J'ai un blog (en anglais) qui reçoit une quantité décente de spam de commentaires russes. Souvent, lorsque je consulte mon panier de spam, Chrome m'invite à traduire la page. C'est évidemment (pour moi) examiner le contenu et être déclenché avec le contenu «autre langue» dépasse un certain seuil de pourcentage.
ale
1
@Thilo, ce n'est pas UTF-8 qui montre que c'est du japonais, mais si un grand pourcentage des caractères sur une page sont de la gamme japonaise d'Unicode, alors vous avez votre réponse (la détection automatique de la langue est toujours une supposition) . À défaut de la méthode évidente de vérification de l'encodage des caractères, je ne pense pas qu'il envoie (ou du moins doive ) envoyer la page à un serveur pour détection. Avez-vous vu la taille de chrome.dllrécemment? C'est énorme! Je n'ai pas parcouru le code (massif) récemment, mais il y a sans doute une ou deux fonctions intégrées pour la détection de la langue (ce n'est pas si difficile).
Synetech
1

La fonction est appelée DeterminePageLanguage. C'est dans le dossiercomponents/translate/core/language_detection/language_detection_util.cc

Chrome vérifie d'abord l' attribut HTMLlang et s'il n'est pas présent, il vérifie l' Content-Languageen-tête HTTP . Ensuite, il obtient une prédiction cld3.

Le Compact Language Detector v3 (ou CLD3) est un modèle de réseau neuronal pour l'identification du langage. Le README déclare:

Le code d'inférence extrait les ngrammes de caractères du texte d'entrée et calcule la fraction de fois où chacun d'eux apparaît. Par exemple, comme le montre la figure ci-dessous, si le texte saisi est "banane", alors l'un des trigrammes extraits est "ana" et la fraction correspondante est 2/4. Les ngrammes sont hachés jusqu'à un id dans une petite plage, et chaque id est représenté par un vecteur d'intégration dense estimé pendant l'entraînement.

Le modèle fait la moyenne des plongements correspondant à chaque type de ngram en fonction des fractions, et les plongements moyennés sont concaténés pour produire la couche d'intégration.

Donc, essentiellement, ils ont téléchargé des copies d'un tas de sites Web et payé quelqu'un pour regarder le texte sur ces sites Web et dire dans quelle langue ils sont écrits. Ensuite, ils ont divisé le texte en n-grammes (groupes de n lettres), etc. et utilisé un réseau de neurones pour apprendre une correspondance entre les distributions de n-grammes et les langues.

Alors maintenant, ils ont 2 variables:

  • language qui est défini à partir du HTML ou de l'en-tête (rappelez-vous que l'attribut HTML a priorité si les deux sont présents)
  • cld_language qui est une prédiction basée sur les fréquences des groupes de lettres sur la page

Ensuite, nous avons frappé cette série d'instructions if (j'ai édité la partie où elles envoient des données analytiques sur les incompatibilités linguistiques)

  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 est petit et est exécuté localement. En fait, c'est open source et ils distribuent un modèle pré-formé (bien que le code pour la formation du modèle et les données qu'ils ont utilisées ne soient pas disponibles). Vous pouvez l'utiliser dans vos projets.

Il existe même des liaisons Python (non officielles et non entretenues) pour le code C ++ d'origine (vous devrez installer Cython )

pip install cld3
Boris
la source