Chrome 如何知道页面使用的是哪种语言?

Thi*_*ilo 10 google-chrome translation privacy

我刚刚在谷歌浏览器中打开了一个网页,它说“这个页面是日文的,你要翻译吗?”。

要求翻译可能会将内容发送给谷歌,但首先是如何识别语言的?这是在本地完成的,在浏览器中完成的吗?或者这是否也会将页面发送给 Google?如果是这样,我不应该先征得许可吗?该页面本身没有用于指示语言的标记,而且它是一个内部 Intranet 页面,因此我完全不确定 Google 是否应该可以访问其内容。

s01*_*ist 10

Chrome 浏览器可以通过查看许多页面因素来识别或至少猜测页面语言:

这可以在本地完成,无需任何进一步的互联网连接或向 Google 报告。

内容的翻译肯定会将页面内容发送到 Google 服务器进行翻译。


小智 8

该函数称为DeterminePageLanguage. 是在文件里的components/translate/core/language_detection/language_detection_util.cc

Chrome 首先检查HTMLlang属性,如果不存在,则会检查Content-LanguageHTTP 标头。然后它从 中得到一个预测cld3

Compact Language Detector v3(或 CLD3)是一种用于语言识别的神经网络模型。自述文件指出:

推理代码从输入文本中提取字符 ngram,并计算每个字符出现的次数。例如,如下图所示,如果输入文本是“banana”,则提取的三元组之一是“ana”,对应的分数是2/4。ngram 被哈希成一个小范围内的 id,每个 id 都由训练期间估计的密集嵌入向量表示。

该模型根据分数对每个 ngram 类型对应的嵌入进行平均,并将平均后的嵌入连接起来以产生嵌入层。

因此,本质上,他们下载了一堆网站的副本,并花钱请人查看这些网站上的文本,并说出它们是用什么语言编写的。接下来,他们将文本拆分为n 元语法n 个字母组成的组)等并使用神经网络来学习 n-gram 分布和语言之间的映射。

所以现在他们有两个变量:

  • 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;
Run Code Online (Sandbox Code Playgroud)

CLD3 很小并且在本地运行。事实上,它是开源的,他们分发了一个预先训练的模型(尽管用于训练模型的代码和他们使用的数据不可用)。您可以在您的项目中使用它。

甚至还有官方的Python 绑定

pip install gcld3
Run Code Online (Sandbox Code Playgroud)