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


10

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

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


질문 왜 크롬 잘못 다른 언어에 페이지를 확인하고 번역을 제공합니까? StackOverflow의는 무리이 항목에 대한 자세한 내용은, 특히 제공에 허용 대답 에서 에밀
오웬 까만

답변:


10

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

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

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


한때 Chrome에서 XML 파일을보고 있었는데, 유럽 언어로 된 페이지를보고 있다고 말했는데 벨기에 어쩌면? 이것은 텍스트의 일부 분석이 발생하고 제 경우에는 약간 잘못되었다는 것을 제안합니다. 왜 영어 XML에 벨기에를 나타내는 인코딩이 있었는지 알 수 없습니다. 그러나 그렇습니다. 일본어와 같은 경우 인코딩은 죽은 선물이 될 것입니다.
Cam Jackson

UTF-8은 일본어를 어떻게 선물합니까?
Thilo

@CamJackson 벨기에를 제안하지 않았다고 확신합니다. 아마도 네덜란드어 였고 크롬에서 한 글자 'single'를 발견했습니다
Peter Smit

1
전적으로 페이지 인코딩이 아닙니다. 러시아어 코멘트 스팸을 적당히받는 블로그 (영문)가 있습니다. 스팸 버킷을 볼 때 종종 페이지를 번역하라는 메시지가 표시됩니다. 내용을 검사하고 "다른 언어"내용으로 트리거되는 것은 분명히 특정 백분율 임계 값을 초과합니다.
ale

1
@Thilo, UTF-8은 일본어임을 보여 주지만 페이지의 많은 문자가 일본어 범위의 일본어 인 경우 대답을 얻습니다 (자동 언어 감지는 항상 추측 일입니다) . 문자 인코딩을 확인하는 확실한 방법을 실패, I (또는 적어도 그것이한다는 것을 생각하지 않는다 요구 검출을위한 서버로 페이지를 보내려면). chrome.dll최근 크기를 보셨습니까 ? 거대합니다! 나는 최근에 (대규모) 코드를 살펴 보지 않았지만 언어 감지를위한 내장 기능이나 두 가지가 있다는 것은 의심의 여지가 없습니다.
Synetech

1

이 기능을 호출 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.