Як Chrome знає, на якій мові знаходиться сторінка?


10

Щойно я відкрив веб-сторінку в Google Chrome, і на ній написано "Ця сторінка японською мовою, ви хочете її перекласти?".

Прохання про переклад імовірно буде надсилати вміст до Google, але як мова визначається в першу чергу? Це робиться локально, у браузері? Або це також надсилає сторінку в Google? Якщо так, чи не слід мене спочатку просити дозволу? Сама сторінка не має розмітки для вказівки мови, і це внутрішня сторінка інтрамережі, так що я зовсім не впевнений, що Google повинен мати доступ до її вмісту.


Відповіді:


10

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

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

Це можна зробити на місцях без будь-якого подальшого підключення до Інтернету чи звітування з Google.

Переклад вмісту, безумовно, надішле вміст сторінки на сервери Google для перекладу.


Я колись переглядав XML-файл у Chrome, і він сказав мені, що я переглядаю сторінку на… якійсь європейській мові, може, бельгійській? Це підказало б мені, що якийсь аналіз тексту відбувається, і пішов трохи не так у моєму випадку. Я не бачу, чому в англійському XML було б кодування, яке вказувало б на бельгійську. Але так, для чогось на зразок японського кодування було б мертвим подарунком.
Cam Jackson

Як UTF-8 роздає японцям?
Тіло

@CamJackson Я впевнений, що це не було припущення по-бельгійськи ... Можливо, це було голландцем, а хром знайшов одну букву "ij"
Peter Smit

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 зазначено:

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

Модель усереднює вбудовування, відповідні кожному типу ngram відповідно до дробів, і усереднені вбудовування з'єднуються для отримання шару вбудовування.

Тож по суті вони завантажували копії з багатьох веб-сайтів і платили комусь подивитися текст на цих веб-сайтах і сказати, якою мовою вони написані. Далі вони розділили текст на n-грам (групи з n літер) тощо. і використовував нейронну мережу для вивчення відображення між n-грамовими розподілами та мовами.

Отже, у них є дві змінні:

  • 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.