实时犯罪警报:且看深度学习如何保护你的安危( 二 )


用于关键词识别的卷积神经网络
因为我们只关心关键字 , 所以并不需要知道单词正确的顺序 , 由此可简化问题为关键字识别 。 这就简单多了 , 我们决定使用在数据集上训练的卷积神经网络(CNN) 。
在循环神经网络(RNNs)或长短期记忆(LSTM)模型之上使用卷积神经网络(CNN)意味着我们可以更快地训练和重复 。 我们评估了Transformer模型 , 其大致相同 , 但需要大量硬件才能运行 。
由于我们只在音频段之间寻找短期的依赖关系来检测单词 , 计算简单的CNN似乎优于Transformer模型 , 同时它能腾出硬件空间 , 从而可以通过超参数调整更加灵活 。
实时犯罪警报:且看深度学习如何保护你的安危
本文插图
用于识别关键字并运用了卷积神经网络的剪辑标记模型(图自作者)
音频片段会被分成固定时长的子片段 。 如果词汇表中的一个单词出现了 , 该子片段会被加上一个正标签 。 然后 , 如果在某个片段中发现任何这样的子片段 , 该音频片段会被标记为有用 。
在训练过程中 , 我们尝试改变子片段的时长以判断其如何影响融合性能 。 长的片段让模型更难确定片段的哪个部分会有用 , 也让模型更难调试 。 短片段意味着部分单词会出现在多个剪辑中 , 这使得模型更难识别出它们 。 调整这个超参数并找到一个合理的时长是能做到的 。
对于每个子片段 , 我们将音频转换成梅尔倒谱系数(MFCC) , 并添加一阶和二阶导数 , 特征以25ms的帧大小和10ms的步幅生成 。 然后 , 通过Tensorflow后端输入到基于Keras序列模型的神经网络中 。
第一层是高斯噪声 , 这使得模型耐得住不同无线信道之间的噪声差异 。 我们尝试了另一种方法 , 人为地将真实的噪音叠加到片段上 , 但这大大放缓了训练 , 却没有显著的性能提升 。
然后 , 我们添加了Conv1D、BatchNormalization和MaxPooling1D三个后续层 。 批处理规范化有助于模型收敛 , 最大池化有助于使模型耐得住语音和信道噪声的细微变化 。 另外 , 我们试着增加了脱落层 , 但这些脱落层并未有效改进模型 。
最后 , 添加一个密集连接的神经网络层 , 将其注入到一个有着sigmoid函数激活的单一输出密集层 。
生成标记数据
实时犯罪警报:且看深度学习如何保护你的安危
本文插图
音频剪辑的标记过程(图自作者)
为了标记训练数据 , 我们把问题领域的关键字列给了注释者 , 并要求他们如果有词汇表里的单词出现 , 必须为片段标记好开始和结束位置和单词标签 。
为了确保注释的可靠性 , 我们在注释器之间有10%的重叠 , 并计算了它们在重叠片段上的表现 。 一旦有了大约50小时的标记数据就会启动训练 , 我们会在重复训练的过程中不断收集数据 。
由于词汇表中的一些单词比另一些单词更为常见 , 模型针对于普通单词来说表现正常 , 但是对于仅有较少示例的单词却遇到了困难 。
我们试图将单字发音覆盖在其他片段中 , 借以人为制造示例 。 然而 , 性能的提升与这些单词的实际标记量不相称 。 最终 , 模型对于常用词等会更加敏感 , 我们在未被标记的音频片段上运行该模型 , 并消除掉那些含有已习得单词的片段 , 这有助于减少未来标记时多余的词语 。
模型的发行
经过几次重复的数据收集和超参数调整 , 我们已能训练出一个对词汇表里的词语具有高查全率和精准捕捉能力的模型 。 高查全率对于捕捉关键的安全警报非常重要 。 标记的片段会在发送警报之前被收听 , 因此误报不是一个大问题 。
我们在纽约市的一些区对这个模型进行了测试 , 该模型能够将音频音量降低50–75%(取决于频道) , 它明显超越了我们在公共语音转文本引擎上训练的模型 , 因为纽约由于模拟系统有非常嘈杂的音频 。


推荐阅读