이 기능을 호출 DeterminePageLanguage
합니다. 파일에있다components/translate/core/language_detection/language_detection_util.cc
Chrome은 먼저 HTML lang
속성을 확인하고 없는 경우 Content-Language
HTTP 헤더를 확인합니다 . 그런 다음에서 예측을 얻습니다 cld3
.
컴팩트 언어 감지기 V3 (또는 CLD3)는 언어 식별을위한 신경망 모델이다. 읽어보기 상태 :
추론 코드는 입력 텍스트에서 문자 ngram을 추출하고 각 문자가 나타나는 비율을 계산합니다. 예를 들어 아래 그림에 표시된 것처럼 입력 텍스트가 "banana"인 경우 추출 된 trigram 중 하나는 "ana"이고 해당 분수는 2/4입니다. ngram은 작은 범위 내에서 id로 해시되며 각 id는 훈련 중에 추정 된 밀집된 임베딩 벡터로 표시됩니다.
모델은 분수에 따라 각각의 n 그램 유형에 대응하는 임베딩을 평균화하고, 평균 임베딩은 연결되어 임베딩 계층을 생성한다.
따라서 본질적으로 그들은 많은 웹 사이트의 사본을 다운로드하고 해당 웹 사이트의 텍스트를보고 작성된 언어를 말하도록 누군가에게 지불했습니다. 그런 다음 텍스트를 n 그램 ( n 문자 그룹) 으로 나눕니다. n-gram 분포와 언어 간의 매핑을 배우기 위해 신경망을 사용했습니다.
이제 2 개의 변수가 있습니다 :
language
이는 HTML 또는 헤더에서 설정됩니다 (둘 다 존재하는 경우 HTML 속성이 우선 함을 기억하십시오)
cld_language
페이지의 글자 그룹 빈도에 따른 예측입니다.
그런 다음 이 일련의 if 문에 도달 했습니다 (언어 불일치에 대한 분석 데이터를 보내는 부분을 편집했습니다)
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은 작으며 로컬로 실행됩니다. 실제로 오픈 소스 이며 사전 훈련 된 모델을 배포합니다 (모델 교육을위한 코드와 사용 된 데이터는 제공되지 않지만). 프로젝트에서 사용할 수 있습니다.
원래 C ++ 코드 에는 Python 바인딩 (비공식 및 유지 관리되지 않음)이 있습니다 ( Cython 을 설치해야 함 )
pip install cld3