简介
自动语音识别 (ASR) 系统提供文本转录。通常,是一连串的词。思科使用 ASR 系统在 Webex 会议中提供实时隐藏式字幕。出现的一个问题是,在没有标点符号和大写字母的情况下,可能很难阅读字幕。理解文本含义的能力会因标点符号而改变。设想以下词语序列,其中包含两个标点符号选项:
“谢谢你你的捐款刚刚帮助某人找到了工作”。
选项 A:“谢谢你!你的捐款刚刚帮助某人找到了工作。”
选项 B:“谢谢你!你的捐款帮助了某人。找到一份工作。”
一个标点符号产生了很大的不同。
我们将介绍构建后处理系统时的几个注意事项:
- 从原始文本中恢复标点和大写的高精度模型。对临时结果进行快速推理:以跟上实时字幕的速度。
- 资源利用少:语音识别为计算密集型;我们不需要标点符号模型也是计算密集型。
- 处理词汇表以外的词语的能力:有时,我们需要给模型之前没有见过的词语加标点符号或大写。
一些经典的基于 n-gram 的方法 [1] 具有相对较好的质量。然而,它们也有其缺点。尽管 n-gram 模型具有快速推理功能,但根据语言词汇量的不同,即使是 3-gram 模型也会占用几千兆字节的磁盘空间。另一个缺点是对词汇表以外的词语的处理。如果一个词语没有出现在训练数据中,那么模型就不能以常规的方式处理它,准确性就会下降。现代方法使用有效但计算密集型技术,如双向 RNN [3] 或基于注意力和变换器的神经网络架构 [2]。这些模型有很高的准确性 [2],但可能不太适合实时流媒体用例,因为它们需要全部的输入序列来运行推理。例如,如果双向 RNN 只有一个新的输入标记,则需要更新模型先前看到的所有标记的隐藏状态(图 1)。
图 1. 双向 RNN 的反向推导计算。对于每一个新的输入,所有以前的隐藏状态都必须被依次更新。
一些方法试图通过建立两个不同的模型来解决标点符号和大写字母的问题 [3][6],而另一些方法则将两者合并为一个模型,因为其输出高度相关 [4][2]。紧跟标点符号的词语很好地证明了这种相关性:句号后的词可能被大写,而逗号后的词可能被小写。有一些方法建议采用多输出的架构 [4]:每个任务分别有一个。这些方法表明,这种架构优于单独的标点符号和大写字母架构。鉴于上述考虑,我们选择使用一个基于 GRU 的神经网络,它有两个输出,分别用于标点符号和大写字母。为了处理词汇表之外的词语,我们使用了类似于 SentencePiece 的技术 [6],将未知的词语分割成更小的标记,或者在极端情况下,分割成字符。我们将在下面描述详细信息和注意事项。
TruncBiRNN
直觉感知和实验表明,在构建标点符号模型时,考虑未来的语境是非常重要的,因为在不知道后面几个词语的情况下,很难确定当前位置的标点符号。为了使用关于下一个标记的信息,而不是被迫为后退方向的所有标记更新所有的隐藏状态,我们决定将后退方向截断为一个固定的窗口。在前进方向上,它只是一个普通的 RNN。在后退方向上,我们只考虑每个标记的一个固定窗口,在这个窗口上运行 RNN(图 2)。利用这个窗口,我们可以实现对新输入标记的恒定时间推理(在前进方向上我们需要计算一个隐藏状态,在后退方向上需要计算 n+1 个隐藏状态)。
图 2. 本例中,对于当前的每个标记,只考虑接下来的两个标记来计算后退方向的隐藏状态。
现在,对于每个标记,我们都有分别用于前进和后退方向的隐藏状态。我们把这个层称为 TruncBiRNN 或 TruncBiGRU(因为我们使用 GRU)。这些隐藏状态可以在恒定时间内计算,这不取决于输入长度。恒定时间运算对于模型跟上实时字幕的速度至关重要。
架构
该架构由嵌入层、TruncBiGRU 和单向 GRU 层以及全连接层组成。对于输出,我们使用两个 softmax 层,分别用于标点符号和大写字母(图 3)。
图 3. 窗口大小等于 TruncBiGRUFi 的两个标记的模型架构。
对于每个词语,模型预测其大写字母和该词语后的标点符号。为了更好地同步这两个输出并预测大写字母,我们还需要知道前一个标记的嵌入情况(以恢复前一步的标点符号)。再加上一个自定义的损失函数(见下一部分),这使我们能够避免在句首产生小写字母的情况。对于标点符号的预测,得到下一个词语的大写预测也很有帮助。这就是我们把当前和下一个嵌入连接起来的原因。用于标点符号的输出层预测所有标点符号的分布。对于我们的模型,它是一个集合:
句号 – 句子中间的句号,并不一定意味着下一个词语要大写(“a.m.”、“D.C.”等)
逗号
问号
省略号
冒号
破折号
句末句号 – 句子末尾的句号
对于大写,我们分为四类:
小写
大写 – 所有字母均大写(“IEEE”、“NASA”等)
大写
大小写混合 – 如单词“iPhone”
首字母大写 – 句子开头的单词
额外的类别“
首字母大写”和“
句末句号”乍一看可能是多余的,但它们有助于提高与大写和标点符号有关的答案的一致性。“
句末句号”意味着下一个大写字母的答案不能是“
小写”,而“
首字母大写”意味着前面的标点符号是一个“
句尾句号”或问号。这些类别在损失函数中起着重要作用。损失函数:我们需要同时优化大写字母和标点符号。为此,我们使用一个带系数的对数损失函数之和:
然而,如前所述,神经网络的输出可能不是完全相关的。例如,标点器可能预测当前词语的“
句末句号”,而大写器却没有预测下一个标记的“
首字母大写”。这种类型的错误虽然很少见,但可能很醒目。为了处理这个问题,我们在损失函数中使用一个额外的惩罚项来惩罚这种类型的错误:
第一个项对应的是在非“
句末句号”后出现“
首字母大写”的概率,第二个项对应的是在“
句末句号”后没有“
首字母大写”的概率。这个惩罚对发生错误的标记求和。此外,我们将前一层的两个连续的张量传递给 softmax 层。鉴于此,我们可以有效地减少惩罚项。最后,我们得到损失函数:
训练
对于训练,我们使用 Webex 内部会议的文本转录和维基百科的文本数据。首先,对训练数据进行清理,并将其分割成句子。在训练过程中,每个样本由连续的句子生成,并从固定的分布截取到随机长度。这使得模型可以在训练过程中看到裁剪好的短语,从而使模型可以在推理过程中处理中间结果。接下来,我们在大约 300 兆字节的维基百科文本上训练一个模型,然后在 Webex 会议转录上对其进行微调。对维基百科文本的预训练有助于改善所有的标点符号类别,同时对大写字母类别尤其有用。我们猜测这是由于维基百科语料库中存在大量的专有名词。我们将相同的数据准备应用于我们的评估集,将句子连接起来,并将它们截断为随机长度。这使我们能够衡量我们可能在临时转录状态中看到的内容的准确性。
结语
使用相对简单的技术和架构的一些定制,例如截断的 GRU 和损失函数中的额外惩罚,我们构建了一个可以在线运行的模型。通过实时的标点符号和大写字母,实时字幕的阅读体验得到了明显改善。
参考资料 [1] A. Gravano, M. Jansche, and M. Bacchiani, “Restoring punctuation and capitalization in transcribed speech,” in ICASSP 2009, 2009, pp. 4741–4744. [2] Monica Sunkara, Srikanth Ronanki, Kalpit Dixit, Sravan Bodapati, Katrin Kirchhoff, “Robust Prediction of Punctuation and Truecasing for Medical ASR” [3] Tilk, Ottokar & Alumäe, Tanel. (2016). Bidirectional Recurrent Neural Network with Attention Mechanism for Punctuation Restoration. 3047-3051. 10.21437/Interspeech.2016-1517. [4] Vardaan Pahuja, Anirban Laha, Shachar Mirkin, Vikas Raykar, Lili Kotlerman, Guy Lev “Joint Learning of Correlated Sequence Labelling Tasks Using Bidirectional Recurrent Neural Networks” [5] Wang, Peilu & Qian, Yao & Soong, Frank & He, Lei & Zhao, Hai. (2015). Part-of-Speech Tagging with Bidirectional Long Short-Term Memory Recurrent Neural Network. [6] Lita, Lucian & Ittycheriah, Abe & Roukos, Salim & Kambhatla, Nanda. (2003). tRuEcasIng. 10.3115/1075096.1075116. [7] https://github.com/google/sentencepiece
注册 Webex 访问我们的
主页或直接
联系我们,以获得帮助。
点击此处详细了解 Webex 提供的产品和服务,并注册免费账户。