Chrome은 페이지의 언어를 어떻게 알 수 있습니까? Chrome에서 웹 페이지를

방금 Chrome에서 웹 페이지를 열 었는데 “이 페이지는 일본어입니다. 번역 하시겠습니까?”라고 표시되어 있습니다.

번역을 요청하면 내용이 Google에 전송 될 것으로 예상되지만 언어는 처음에 어떻게 식별됩니까? 브라우저에서 로컬로 수행됩니까? 아니면 페이지를 Google에 보내나요? 그렇다면 먼저 허가를 요청하지 않아야합니까? 페이지 자체에는 언어를 나타내는 마크 업이 없으며 내부 인트라넷 페이지이므로 Google이 해당 콘텐츠에 액세스 할 수 있는지 확신 할 수 없습니다.



답변

Chrome 브라우저는 다음과 같은 여러 페이지 요소를보고 페이지 언어를 식별하거나 적어도 추측 할 수 있습니다.

인터넷에 더 이상 연결하거나 Google에보고하지 않고도 로컬에서 수행 할 수 있습니다.

콘텐츠를 번역하면 페이지 콘텐츠가 Google 서버로 전송되어 번역됩니다.


답변

이 기능을 호출 DeterminePageLanguage합니다. 파일에있다components/translate/core/language_detection/language_detection_util.cc

Chrome은 먼저 HTML lang속성을 확인하고 없는 경우 Content-LanguageHTTP 헤더를 확인합니다 . 그런 다음에서 예측을 얻습니다 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


답변