Como o Chrome sabe em que idioma uma página está?

10

Acabei de abrir uma página da web no Google Chrome e diz "Esta página está em japonês, você gostaria de traduzi-la?".

Pedir uma tradução presumivelmente enviaria o conteúdo para o Google, mas como o idioma é identificado em primeiro lugar? Isso é feito localmente, no navegador? Ou isso também envia a página para o Google? Se sim, não devo pedir permissão primeiro? A página em si não possui marcação para indicar o idioma e é uma página interna da intranet, de modo que não tenho certeza de que o Google deveria ter acesso ao seu conteúdo.

Thilo
fonte
A pergunta Por que o Chrome determina incorretamente a página está em um idioma diferente e oferece a tradução? em StackOverflow dá um grupo mais informações sobre este tópico, particularmente a resposta aceita de Emile
Owen Blacker

Respostas:

10

O navegador Chrome pode identificar, ou pelo menos adivinhar, o idioma da página observando vários fatores na página:

Isso pode ser feito localmente, sem qualquer conexão com a Internet ou relatórios ao Google.

A tradução do conteúdo enviaria definitivamente o conteúdo da página aos servidores do Google para tradução.

s01ipsist
fonte
Certa vez, eu estava vendo um arquivo XML no Chrome e ele me disse que estava vendo uma página em ... algum idioma europeu, belga, talvez? Isso sugeriria que alguma análise do texto ocorresse e desse errado um pouco no meu caso. Não vejo por que o XML em inglês teria codificação que indicaria belga. Mas sim, para algo como o japonês, a codificação seria uma oferta inoperante.
Cam Jackson
Como o UTF-8 é uma oferta para o japonês?
Thilo
@CamJackson Tenho certeza de que não estava sugerindo belga ... Talvez fosse holandês e o chrome encontrou a única letra 'ij'
Peter Smit
1
Não é inteiramente por codificação de página. Eu tenho um blog (em inglês) que recebe uma quantidade razoável de spam de comentários em russo. Muitas vezes, quando estou visualizando meu bloco de spam, o Chrome solicita que eu traduza a página. É obviamente (para mim) examinar o conteúdo e ser acionado com o conteúdo de "outro idioma" está acima de um determinado limite percentual.
ale
1
@Thilo, não é UTF-8 que mostra que é japonês, mas se uma grande porcentagem de caracteres em uma página é da faixa japonesa de Unicode, então você tem a sua resposta (a detecção automática de idioma é sempre um trabalho de adivinhação) . Falhando no método óbvio de verificar a codificação de caracteres, não acho que ele (ou pelo menos precise ) envie a página para um servidor para detecção. Você viu o tamanho de chrome.dllrecentemente? É enorme! Não examinei o código (maciço) recentemente, mas sem dúvida há uma função ou duas integradas para detecção de idioma (não é tão difícil).
Synetech
1

A função é chamada DeterminePageLanguage. Está no arquivocomponents/translate/core/language_detection/language_detection_util.cc

O Chrome verifica primeiro o atributo HTMLlang e, se não estiver presente, verifica o Content-Languagecabeçalho HTTP . Então, obtém uma previsão cld3.

O Compact Language Detector v3 (ou CLD3) é um modelo de rede neural para identificação de idiomas. O README declara:

O código de inferência extrai ngrams de caracteres do texto de entrada e calcula a fração de vezes que cada um deles aparece. Por exemplo, conforme mostrado na figura abaixo, se o texto de entrada for "banana", um dos trigramas extraídos será "ana" e a fração correspondente será 2/4. Os ngrams são divididos em hash em um id dentro de um pequeno intervalo, e cada id é representado por um vetor de incorporação denso estimado durante o treinamento.

O modelo calcula a média das combinações correspondentes a cada tipo de ngram de acordo com as frações, e as variações médias são concatenadas para produzir a camada de incorporação.

Então, basicamente, eles baixaram cópias de vários sites e pagaram a alguém para olhar o texto nesses sites e dizer em que idioma eles estavam escritos. Em seguida, eles dividiram o texto em n-gramas (grupos de n letras) e assim por diante e usou uma rede neural para aprender um mapeamento entre distribuições de n-grama e idiomas.

Então agora eles têm 2 variáveis:

  • language que é definido a partir do HTML ou do cabeçalho (lembre-se de que o atributo HTML tem precedência se ambos estiverem presentes)
  • cld_language que é uma previsão baseada nas frequências de grupos de letras na página

Em seguida, chegamos a essa série de instruções if (editei a parte em que eles enviam dados de análise sobre incompatibilidades 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;

O CLD3 é pequeno e é executado localmente. Na verdade, é de código aberto e eles distribuem um modelo pré-treinado (embora o código para treinar o modelo e os dados que eles usaram não estejam disponíveis). Você pode usá-lo em seus projetos.

Há até ligações Python (não oficiais e não mantidas) para o código C ++ original (você precisará instalar o Cython )

pip install cld3
Boris
fonte