Chrome 如何知道页面使用的是什么语言?

Chrome 如何知道页面使用的是什么语言?

我刚刚在 Google Chrome 中打开了一个网页,它显示“此页面是日文,您想翻译它吗?”。

请求翻译可能会将内容发送给 Google,但首先如何识别语言?这是在本地浏览器中完成的吗?还是也会将页面发送给 Google?如果是这样,难道不应该先征求我的许可吗?页面本身没有标记来指示语言,而且它是一个内部网页,所以我完全不确定 Google 是否应该有权访问其内容。

答案1

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

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

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

答案2

该函数被称为DeterminePageLanguage. 它在文件中components/translate/core/language_detection/language_detection_util.cc

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

紧凑型语言检测器 v3(或 CLD3)是一种用于语言识别的神经网络模型。README 中指出:

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

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

因此,他们下载了许多网站的副本,并付钱让别人查看这些网站上的文字,并说出这些文字是用什么语言编写的。接下来,他们将文本拆分成n-gram(组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;

CLD3 规模很小,在本地运行。事实上,它是开源的他们还发布了一个预先训练好的模型(尽管训练模型的代码和他们使用的数据尚未公布)。你可以在你的项目中使用它。

甚至还有官方Python 绑定

pip install gcld3

相关内容