Die Funktion wird aufgerufen DeterminePageLanguage
. Es ist in der Dateicomponents/translate/core/language_detection/language_detection_util.cc
Chrome überprüft zuerst das HTML- lang
Attribut und, falls es nicht vorhanden ist, den Content-Language
HTTP-Header . Dann bekommt es eine Vorhersage von cld3
.
Der Compact Language Detector v3 (oder CLD3) ist ein neuronales Netzwerkmodell zur Sprachidentifikation. In der README heißt es:
Der Inferenzcode extrahiert Zeichen-Ngramme aus dem Eingabetext und berechnet den Bruchteil der Häufigkeit, mit der sie jeweils angezeigt werden. Wenn der Eingabetext beispielsweise, wie in der folgenden Abbildung gezeigt, "Banane" ist, ist eines der extrahierten Trigramme "Ana" und der entsprechende Bruch ist 2/4. Die ngramme werden innerhalb eines kleinen Bereichs auf eine ID herunter gehasht, und jede ID wird durch einen dichten Einbettungsvektor dargestellt, der während des Trainings geschätzt wird.
Das Modell mittelt die Einbettungen, die jedem n-Gramm-Typ entsprechen, gemäß den Brüchen, und die gemittelten Einbettungen werden verkettet, um die Einbettungsschicht zu erzeugen.
Im Wesentlichen haben sie Kopien einer Reihe von Websites heruntergeladen und jemanden dafür bezahlt, sich den Text auf diesen Websites anzusehen und zu sagen, in welcher Sprache sie geschrieben sind. Als nächstes teilen sie den Text in n-Gramm (Gruppen von n Buchstaben) und so weiter auf und benutzte ein neuronales Netzwerk, um eine Zuordnung zwischen n-Gramm-Verteilungen und Sprachen zu lernen.
Jetzt haben sie 2 Variablen:
language
Dies wird entweder aus dem HTML-Code oder dem Header festgelegt (denken Sie daran, dass das HTML-Attribut Vorrang hat, wenn beide vorhanden sind).
cld_language
Dies ist eine Vorhersage, die auf der Häufigkeit von Buchstabengruppen auf der Seite basiert
Dann treffen wir diese Reihe von if-Anweisungen (ich habe den Teil herausgeschnitten, in dem sie Analysedaten über Sprachinkongruenzen senden).
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 ist klein und wird lokal ausgeführt. Tatsächlich ist es Open Source und sie verteilen ein vorab trainiertes Modell (obwohl der Code zum Trainieren des Modells und die von ihnen verwendeten Daten nicht verfügbar sind). Sie können es in Ihren Projekten verwenden.
Es gibt sogar Python-Bindungen (inoffiziell und nicht gepflegt) für den ursprünglichen C ++ - Code (Sie müssen Cython installieren ).
pip install cld3