如何做到精准的语音识别?

  • 回答 (6)
  • 关注 (1)
  • 查看 (710)

我经常想知道技术是否会赶上科幻想象力,我最终会与一个可以与人类无缝交谈的机器人进行交互?我想知道我们如何构建世界上最准确的语音识别系统?

秋之夕颜清秋之夕颜清提问于
坐看云起时冒险家回答于

为了解决这个问题,我们将单词划分为更小的单元,称为电话。在英语(和许多印度语言)中,大约有50个电话可以组合成任何单词。例如,单词“Hello”可以分为“HH,AH,L,OW”。您可以查找CMU发音字典[6]以进行英语单词的语音扩展。

ASR的问题归结为识别电话序列而不是单词。这需要为每部手机构建ML模型。这些模型称为单声道模型。如果你能很好地识别手机,你已经解决了ASR问题的很大一部分。不幸的是,识别手机并非易事。

如果我们绘制电话话语的傅立叶频谱,则可以看到明显的峰值,如图中所示:  Formant Frequencies  [5]。

峰值频率F1和F2是手机的关键指标。这里显示了元音相对于F1和F2的散点图。可以看出,扩散很大并且经常彼此重叠。 元音之间主导频率的变化。没有明确的界限来区分元音  [3]。

这种重叠使得ML算法难以区分电话。

单声道的另一个问题是它们经常受到相邻电话的影响。 该图示  出了时域以及语音话语“脚跟”的时频域(STFT)表示。 时间域和STFT表示单词“Heel” [ 页面在upenn.edu ]。

鞋跟这个词可以在发音上扩展为“HH IY L”。在图中可以清楚地看到电话“HH”对“IY”的影响。Triphone模型(也称为上下文相关模型)被提议作为模拟该上下文依赖性的解决方案。这里的模型是针对三音素的每种可能的变化而构建的,希望它们能够捕获足够的上下文变化。这种三音素的可能数量将是50 ^ 3的数量级,这是非常高的数量。建立如此大量的模型同样是不可行的。幸运的是,并非所有三音素都使用英语(其他语言)。经过一些巧妙的技巧后,我们可以将分类单元的数量减少到5,000-10,000。

即使有良好的音素识别,仍然很难识别语音。这是因为预先没有定义单词边界。这在区分语音相似的句子时会引起问题。这类句子的一个典型例子是“ 让我们破坏一个漂亮的海滩 ”和“ 让我们认识演讲 ”。这些句子在语音上非常相似,声学模型很容易在它们之间混淆。ASR中使用语言模型(LM)来解决此特定问题。

另一个破坏ASR系统的因素是重音。就像人类一样,机器也很难用不同的口音来理解同一种语言。有关示例,请参阅此视频

这是因为系统先前为特定重音学习的分类边界对于其他重音不会保持不变。这就是为什么ASR系统在配置过程中经常询问您的位置/说话风格(例如英语 - 印度语,英语 - 美国语,英语 - 英语)的原因。

到目前为止所描述的复杂性是自然语言的一部分。即使具有如此大的复杂性,在无噪声环境中识别语音通常被认为是解决的问题。噪音和回声等外部影响是罪魁祸首。

录制音频时,噪音和回声是不可避免的干扰。由于来自诸如墙壁,镜子和桌子的表面的语音能量的反射,发生回声。当扬声器靠近麦克风说话时,这不是什么大问题。但是,当从远处说话时(例如,通过Amazon Echo进行购买),相同信号的多个副本将以不同的时间延迟和强度进行反映和组合。这将导致电话随着时间的推移而拉伸并最终破坏相邻的语音信息。

这种现象称为涂抹。去除污点的过程称为dereverberation,这是解决混响问题的常用技术。

ASR中另一个值得注意的问题是在解码阶段。在这里,LM和AM组合在一起形成一个巨大的网络。识别基本上是在如此大的空间中的搜索问题。在更大的空间,问题就越大。实时识别涉及使用维特比算法扫描网络以获得语音信号的转录。

回答过的其他问题

云,客户客户端无权写入:topic:// VirtualTopic.hahaha.kapua

在Kapua,您可以根据您的用户许可发布/订阅。 如果您的用户仅拥有broker:connect权限,则您只能发布/订阅主题: {account-name}/{connectionClientId}/{semanticTopic} 在您的特定情况下,您应该发布/订阅主题: k...... 展开详请

使用`sub`重命名数据框中的列

已采纳
更换时,您还可以返回部分找到的值,其中“\ 1”(R中的“\ 1”)表示:括号中的第一部分。 colnames(df) <- sub("(.)_frq$", "frq \\1", colnames(df)) 这将替换“X_frq”和“frq X”之类的所有内容,并且不匹配的名...... 展开详请

递归CTE以查找WorkState的当前和之前的WorkState和输入时间

已采纳
LAG()应该为你的目的工作,而不是使用递归cte。试一下: SELECT * ,LAG(WorkState) OVER(PARTITION BY CustomerId ORDER BY statechangedate) ,LAG(statech...... 展开详请

Maven发布:执行无法识别密钥库参数

Maven版本:在不同的上下文中执行目标,并且不传播您的java参数。 尝试使用-Darguments选项。例如:mvn release:perform -Darguments="-Dsign.keystore=/path/to/keystore -Dsign.alias=ke...... 展开详请

Sender Synth示例无法构建 - 未找到架构arm64的符号

这些是AudioBus SDK中的符号; 您需要链接SDK并使用API​​密钥来解决这些错误。

在Visual Studio上添加行号

在菜单栏上,选择“工具”,“选项”。展开“文本编辑器”节点,然后选择要使用的语言的节点,或选择“所有语言”以打开所有语言的行号。 📷 注意- 这是在VS 2013中的方法。其他版本可能在文本编辑器=>常规下列出“行号”选项,如下面的屏幕截图所示 - 📷 ... 展开详请

扫码关注云+社区