Как Chrome знает, на каком языке страница?

10

Я только что открыл веб-страницу в Google Chrome, и там написано: «Эта страница на японском языке, вы хотите перевести ее?».

Запрос на перевод предположительно отправит содержимое в Google, но как определить язык в первую очередь? Это делается локально, в браузере? Или это также отправляет страницу в Google? Если да, то не нужно ли мне сначала спрашивать разрешения? Сама страница не имеет разметки для указания языка, и это внутренняя страница внутренней сети, так что я совсем не уверен, что Google должен иметь доступ к ее контенту.

Тило
источник
Вопрос Почему Chrome неправильно определяет страницу на другом языке и предлагает перевод? на StackOverflow дает кучу дополнительной информации по этой теме, в частности, принятый ответ от Эмиля
Оуэн Блэкер

Ответы:

10

Браузер Chrome может определить или, по крайней мере, угадать язык страницы, взглянув на ряд факторов на странице:

  • заголовки http http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
  • используемая кодировка символов
  • метатег кодирования
  • статистический анализ реальных символов или слов на странице

Это может быть сделано локально без какого-либо дальнейшего подключения к Интернету или отчетности в Google.

Перевод контента определенно отправит контент страницы на серверы Google для перевода.

s01ipsist
источник
Однажды я просматривал XML-файл в Chrome, и мне сказали, что я просматриваю страницу на ... каком-то европейском языке, может быть, на бельгийском? Это подсказало бы мне, что некоторый анализ текста происходит, и пошло немного неправильно в моем случае. Я не могу понять, почему в английском XML была бы кодировка, которая указывала бы на бельгийский язык. Но да, для чего-то вроде японского кодирование было бы мертвой раздачей.
Кэм Джексон
Как UTF-8 дешевая распродажа для японцев?
Тило
@CamJackson Я уверен, что это не предлагало бельгийца ... Возможно, это был голландский язык, и хром нашел единственную букву 'ij'
Питер Смит
1
Это не совсем кодировка страницы. У меня есть блог (на английском языке), который получает приличное количество русского спама в комментариях. Часто, когда я просматриваю свое ведро со спамом, Chrome предлагает мне перевести страницу. Очевидно, что (для меня) проверка содержимого и запуск с использованием «другого языка» превышает определенный процентный порог.
Эль
1
@Thilo, это не UTF-8, который показывает, что это японский язык, но если большой процент символов на странице относится к японскому диапазону Unicode, то вы получите свой ответ (автоматическое определение языка всегда работает угадать) , Не имея очевидного метода проверки кодировки символов, я не думаю, что он действительно (или, по крайней мере, должен ) отправить страницу на сервер для обнаружения. Вы видели размер chrome.dllнедавно? Это огромная! Недавно я не просматривал (массивный) код, но, без сомнения, есть функция или две встроенные функции для определения языка (это не так сложно).
Synetech
1

Функция называется DeterminePageLanguage. Это в файлеcomponents/translate/core/language_detection/language_detection_util.cc

Сначала Chrome проверяет атрибут HTML,lang а если его нет, он проверяет Content-Languageзаголовок HTTP . Тогда он получает прогноз от cld3.

V3 Compact Language Detector (или CLD3) представляет собой нейронную модель сети для идентификации языка. README заявляет:

Код логического вывода извлекает символьные диаграммы из входного текста и вычисляет частоту появления каждого из них. Например, как показано на рисунке ниже, если входной текст - «банан», то одна из извлеченных триграмм - «ана», а соответствующая дробь - 2/4. Нграммы хешируются до идентификатора в небольшом диапазоне, и каждый идентификатор представлен плотным вектором внедрения, оцененным во время обучения.

Модель усредняет вложения, соответствующие каждому типу ngram, в соответствии с дробями, и усредненные вложения объединяются для получения слоя вложения.

По сути, они загрузили копии группы сайтов и заплатили кому-то, чтобы они посмотрели текст на этих сайтах и ​​сказали, на каком языке они написаны. Затем они разбили текст на n-граммы (группы из n букв) и так далее. и использовал нейронную сеть для изучения соответствия между распределениями n-граммы и языками.

Так что теперь у них есть 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 маленький и запускается локально. Фактически, это открытый исходный код, и они распространяют предварительно обученную модель (хотя код для обучения модели и используемые ими данные недоступны). Вы можете использовать его в своих проектах.

Есть даже привязки Python (неофициальные и не поддерживаемые) для исходного кода C ++ (вам нужно установить Cython )

pip install cld3
Борис
источник