Google 网络语音 API 中的奇怪行为

Odd behaviour in Google Web Speech API

我正在使用 Google Chrome (55.0.2883.87) 与 Google 的 Web Speech API 一起工作,我遇到了一些 非常奇怪的行为。

当尝试说出名字后跟一个数字(如 John 4)时,它通常只会说出名字和数字,它应该 - 但是对于某些名称,它会在名称和数字之间放置单词 chapter,因此 Daniel 4 变为 Daniel Chapter 4.

我选择了一些随机名称并使用以下代码对其进行了测试:

<script>
var names = ['Brian', 'John', 'Mike', 'Julia', 'Daniel', 'Michael', 'David', 'Jason', 'Jack'];

names.forEach(function(name) {
  var msg = new SpeechSynthesisUtterance(name + ' 4');
  window.speechSynthesis.speak(msg);
});
</script>

msg 变量在使用 console.log()

记录时不包含单词 chapter

在这 9 个名字中,JohnDaniel 之间的单词是 chapter

问题

为什么会发生这种情况,哪些标准决定哪些名称受到影响?

我认为 your homonyms wrote something in a famous book, and a certain John did too. I would guess that it does the same for Jeremiah or these others 之一。

但我无法在我的 55.0.2883.95 和我的 57.0.2954.0 上重现 mac...

也许这是一个 圣诞节复活节彩蛋

这个答案中有很多宗教部分...

我不认为这是一个 "Easter Egg":
通常,语音合成引擎经常尝试以某种有意义的方式解释文本片段,例如阅读标点符号作为日期的数字,如果该片段 "looks" 像一个日期。

说明

对于 Google,我猜想他们在很大程度上依赖于统计数据来决定是否应该以一种或另一种方式解释文本片段。

在实践中,对于特定情况这可能会失败,原因如下:例如如果具体案例确实是一些特殊案例;如果没有足够的 "context" 来导出 correct/intended 的含义(对于非常短的 sentences/fragments 可能尤其如此);如果用于导出统计数据的(文本)语料库不平衡 w.r.t。常用...

建议

根据引擎的不同,通常可以通过不同的格式设置输入文本来控制行为。

例如在 Chrome 中测试您的代码片段:如果您写出数字("four" 而不是 4),或在名称后插入逗号(即 name + ', 4'),则语音引擎不会插入 "chapter"请注意,逗号也会引入一个短暂的停顿)。