赞
踩
摘要:对话序列有利于提高数字助手(可以理解为手机的siri,微软小冰等)的能力,我们探索了神经网络语言模型模拟数字助手的对话。我们提出的结果可以有效刻画对话特征,在识别率上相对提高了%4。不想看细节的朋友可以直接看最后的创新点。
1.
不同于其他领域的语音识别,数字助手主要为对话形式的。所以应该建立一个对话式的语言模型,用于解决语音识别中的歧义(ambiguous)问题。
和前人一样,我们也使用LSTM语言模型用于刻画长文本,一个常用的方法是将speak turn或者context作为一个额外的输入到网络层或者LSTM单元。这是一种修饰语言模型的选项。
为了训练一个标准的对话式语言模型,我们探索了几种修饰输入数据的方法。这样可以保证当提供先前的对话作为context用于训练语言模型时,使用一个完全相同、可信赖的通用类语音识别语言模型又很多好处。
2.
人机对话(与数字助手)和人人对话的词分布区别很大。人机对话往往是人发出一个简短的命令,数字助手回复一个冗长的回答,我们在训练语言模型的时候考虑到这个性质,采取了相应方法。使用Rafal Josefowicz, Oriol Vinyals, Mike Schuster, Noam
Shazeer, and Wu Yonghui, “Exploring the limits of language modeling,”中的语言模型。如下图所示:
每一个LSTM单元如下:
xt,为word embedding输入,it,ft,ot为输入门,忘记门,输出门,ct和rt为lstm内部的状态,W, D, b分别为full权重矩阵,对话权重矩阵以及偏置,使用了peephole连接用于学习精确的时间输出,使用回归映射层rt,用于减少状态维度,同时保持记忆能力。
人机对话系统需要大量单词,为了减少训练以及测试的计算代价,一方面,我们只使用了训练语料中的top100K单词,没有出现的为unknown,另一方面在百分之三的词汇上使用sampled softmax,即在单词以递减顺序在训练语料中排列时,使用均匀分布的负采样。
3.对话建模
输入数据分为三种:
第一种只有人的一个询问,作为baseline.如:What is the weather today?
第二种只有人一组询问。一组询问为当前询问加上前两个询问,这三个询问在一个5分钟的时间序列内获得。通过语句边界标记(turn maker)进行区分。
第三种为人的一组询问加数字助手的回答。即三个询问加是哪个对应的回答。在此基础上衍生四个变体:
(1)忽略语句边界标记。
(2)在5分钟的时窗里如果提取的语句不足3个询问,仍旧作为训练数据输入模型。该方法可以防止丢失部分训练数据
(3)(4)变体基于这样一个假设,询问的历史数据比数字助手回答的语句更具有影响力。
(3)输入询问的词汇(重复的就去除了)非句子加数字助手的回答
(4)颠倒顺序,首先为回答,然后是询问。
4.lattice rescoring参考文献(Lattice rescoring strategies for long short term
memory language models in speech recognition)
我们使用lattice-recore算法将语言模型集成到语音识别中,每个lattice节点中只保持最好的LSTM状态,因为大量的状态计算代价还高,并不能有效提高识别结果.每一个lattice弧中线性插入LSTM语言模型分布,权重为0.5:
5.experiment
本文的语音识别采用US英语语料,低帧率的声学模型(考文献“Lower Frame Rate Neural
Network Acoustic Models”),以及含有4M词汇量,在180B句子上训练的5-gram语言模型,最后lattice由LSTM语言模型rescore.
LSTM语言模型的语料来源于Google Assistant的询问和回答数据集。每一个数据序列最多含有3个询问和一个回答。该数据集大概有200M个序列,包含6.3B个询问单词,16.9B回答单词。
训练模型细节:由于LSTM语言模型参考文献1,所以超参数也和文献1中相同。本模型采用Tensorflow框架,采用AdaDrad优化器,学习速率0.2,无dropout,RNN单元20个,batchsize128,使用clip_grad。在32个GPU上训练,异步更新梯度。
在两个测试集上测量词错误率WER,测试集A在Google Assistant中采样获得,包含4511句话,16081个单词,这里面在5分钟的时窗内可能缺少询问或者回答;测试集B在5分钟的时窗内一定包含3个询问和一个问答。
5.1第三部分提出的第一种输入和第二种输入对比。即只有当前一个询问VS当前询问加上前两个询问,结果如下:
可以发现有了上下文的输入,无论是测试集A还是测试集B,WER降低了。同时同音异词也被解决了,如two和too,我们认为如果前面的询问包含数字,当前的询问也应该是数字,所以上下文模型可以有效建模。
5.2第3部分提出的第3种输入VS第2种输入:添加助手回答context VS 纯询问context,结果如下:
模型1相对于baseline,提高了0.3,我们认为原因和5.1中解释的一样,助手的回答,有利于对询问的识别。例如如果当前的回答是no,那么之前询问的回答有利于模型知道是two,而不是too。但是有些单词在baseline中容易识别,在Model 1却识别错误,如What,who等。这是因为,我们的目标是识别人的询问,但是输入的序列中增加了大量的助手回答,训练集和测试集分布不同。
模型2(变体3)只输出来自于询问的词汇。这样为了限制模型的输出词汇只来源于询问。发现并没有什么帮助。
模型3(变体4)就是颠倒顺序。如下所示:
我们认为回答的的单词数比询问的多3.2倍,重新排序可以在单词方面引入bias,表2中可以看出结果比MODEL1提高了一点。
模型4 (变体1)去掉turn maker,用来区分连续的询问和回答的标记,发现结果相对于Model3变差了一点
模型5 (变体2)不一定包含连续的3个询问和回答。因为有些询问前后并无关联,所以模型也可以进行建模。结果显示对测试集A并无帮助,但是测试集B变差了。我们认为这也是训练集与测试集不同分布的原因,训练集中询问不一定包含上下文,但是测试集中全部都是3个询问加回答。
6.结论
我们在Google Assistant语音识别任务中,没有改变任何模型结构,只改变输入模型的数据,获得了4%的提高,这表明这种非对称(问与答长度区别较大)的对话系统中,仅仅是改变数据也是有效的。
7.思考
本文的创新点主要在于输入数据的变化:
最大的创新点在于识别当前询问时,引入了上下文!!!在训练集中加入了前两个询问即上文!!!虽然后来加入了助手的回答,即下文!!!但是提高的不明显,改变回答和询问顺序的结果最好,但是实际任务中我们是无法实时获得助手的询问的。这个问题文章并没有回答。
所以总的来说,提高输入语句的长度,引入上下文可以提高语音识别的精度。可以应用在智能家居中的语音控制系统,苹果的siri, 微软的小娜以及各个手机语音助手等。进一步思考,问答系统,语音识别中也引入上下文机制,是不是也可以提高任务水平呢?如果有朋友利用这个想法的话,请告知一声!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。