In che modo Chrome sa in che lingua è una pagina?


10

Ho appena aperto una pagina Web in Google Chrome e dice "Questa pagina è in giapponese, vuoi tradurla?".

Chiedere una traduzione dovrebbe presumibilmente inviare i contenuti a Google, ma come viene identificata la lingua in primo luogo? Questo viene fatto localmente, nel browser? O questo invia anche la pagina a Google? In tal caso, non dovrei prima chiedere l'autorizzazione? La pagina stessa non ha markup per indicare la lingua ed è una pagina intranet interna, quindi non sono affatto sicuro che Google dovrebbe avere accesso al suo contenuto.


La domanda Perché Chrome determina erroneamente che la pagina è in una lingua diversa e si offre di tradurre? su StackOverflow fornisce molte più informazioni su questo argomento, in particolare la risposta accettata da Emile
Owen Blacker,

Risposte:


10

Il browser Chrome può identificare, o almeno indovinare, la lingua della pagina osservando una serie di fattori sulla pagina:

Questo può essere fatto localmente senza ulteriori connessioni Internet o rapporti a Google.

La traduzione del contenuto invierebbe sicuramente il contenuto della pagina ai server di Google per la traduzione.


Una volta stavo visualizzando un file XML in Chrome e mi diceva che stavo visualizzando una pagina in ... qualche lingua europea, forse belga? Questo mi suggerirebbe che si verifichino alcune analisi del testo e nel mio caso è andato un po 'male. Non riesco a capire perché l'XML inglese avrebbe avuto una codifica che indicherebbe il belga. Ma sì, per qualcosa come il giapponese la codifica sarebbe un omaggio morto.
Cam Jackson,

In che modo UTF-8 è un omaggio per i giapponesi?
Thilo,

@CamJackson Sono sicuro che non suggeriva il belga ... Forse era olandese e Chrome ha trovato la singola lettera "ij"
Peter Smit,

1
Non è interamente per codifica di pagina. Ho un blog (in inglese) che riceve una discreta quantità di spam nei commenti russi. Spesso quando visualizzo il mio bucket di spam Chrome mi chiede di tradurre la pagina. Ovviamente (per me) esaminare i contenuti ed essere attivato con il contenuto "altra lingua" supera una determinata soglia percentuale.
Ale

1
@Thilo, non è UTF-8 che mostra che è giapponese, ma se una grande percentuale dei caratteri su una pagina proviene dall'intervallo giapponese di Unicode, allora hai la tua risposta (il rilevamento automatico della lingua è sempre indovinare) . In mancanza il metodo evidente di controllare la codifica dei caratteri, non credo che lo fa (o almeno le esigenze a) invia la pagina ad un server per il rilevamento. Hai visto le dimensioni di chrome.dllrecente? È enorme! Di recente non ho esaminato il (massiccio) codice, ma senza dubbio esiste una funzione o due integrate per il rilevamento della lingua (non è poi così difficile).
Synetech,

1

La funzione è chiamata DeterminePageLanguage. È nel filecomponents/translate/core/language_detection/language_detection_util.cc

Chrome controlla prima l' attributo HTMLlang e se non è presente controlla l' Content-Languageintestazione HTTP . Quindi ottiene una previsione da cld3.

Il v3 Compact Detector Lingua (o CLD3) è un modello di rete neurale per l'identificazione della lingua. Il README afferma:

Il codice di inferenza estrae ngrammi di caratteri dal testo di input e calcola la frazione di volte in cui ciascuno di essi appare. Ad esempio, come mostrato nella figura seguente, se il testo di input è "banana", uno dei trigrammi estratti è "ana" e la frazione corrispondente è 2/4. Gli ngram sono sottoposti a hash in un ID all'interno di un piccolo intervallo e ogni ID è rappresentato da un vettore di incorporamento denso stimato durante l'allenamento.

Il modello calcola la media degli incorporamenti corrispondenti a ciascun tipo di ngram in base alle frazioni e gli embeddi medi vengono concatenati per produrre il livello di incorporamento.

Quindi, essenzialmente, hanno scaricato copie di un gruppo di siti Web e pagato qualcuno per guardare il testo su quei siti Web e dire in quale lingua sono scritti. Successivamente hanno diviso il testo in n-grammi (gruppi di n lettere) e così via e usato una rete neurale per imparare una mappatura tra distribuzioni e lingue di n-gram.

Quindi ora hanno 2 variabili:

  • language che è impostato dall'HTML o dall'intestazione (ricorda che l'attributo HTML ha la precedenza se entrambi sono presenti)
  • cld_language che è una previsione basata sulle frequenze di gruppi di lettere nella pagina

Quindi abbiamo colpito questa serie di istruzioni if (ho modificato la parte in cui inviano i dati analitici sulle discrepanze del linguaggio)

  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 è piccolo ed è eseguito localmente. In realtà, è open source e distribuiscono un modello pre-addestrato (sebbene il codice per l'addestramento del modello e i dati utilizzati non siano disponibili). Puoi usarlo nei tuoi progetti.

Esistono persino collegamenti Python (non ufficiali e non mantenuti) per il codice C ++ originale (dovrai installare Cython )

pip install cld3
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.