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-Language
intestazione 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