摘要:在本文中,我们展示了CLAS,一个全神经网络组成,端到端的上下文ASR模型,通过映射所有的上下文短语,来融合上下文信息。在实验评估中,我们发现提出的CLAS模型超过了标准的shallow fusion偏置方法。

本文分享自华为云社区《语境偏移如何解决?专有领域端到端ASR之路(二)》,原文作者: xiaoye0829 。

在这里我们介绍一篇与专有领域的端到端ASR的相关工作《DEEP CONTEXT: END-TO-END CONTEXTUAL SPEECH RECOGNITION》,这篇工作也是来自Google的同一个研究团队。

在ASR中,一个用户说话的内容取决于他所处的上下文,通常这种上下文可以由一系列的n-gram单词所代表。在这篇工作中,我们同样是研究如何在端到端的模型中应用这种上下文信息。这篇文章的核心做法,可以看做是一个contextual的LAS[1]模型,Contextual LAS(CLAS)模型就是在LAS模型的基础上,联合n-gram的embedding进行优化。即在beam search时,将独立训练的n-gram和LAS模型进行shallow fusion。

在本文的工作中,我们考虑在识别过程中动态融入上下文信息。在传统的ASR系统里,融入上下文信息的一个主流做法是使用一个独立训练的在线重打分框架,这个框架可以动态调整一小部分与特定场景上下文相关的n-gram的权重。能够把这个技术拓展到Seq2Seq的ASR模型里是十分重要的。为了实现根据特定任务偏移识别过程的目的,先前也有工作尝试将独立的LM融入到识别过程中,常见的做法是shallow fusion或者cold fusion。在工作[2]里面,shallow fusion的方法被用来构建Contextual LAS,即LAS的输出概率被一个由说话人上下文构建的特殊WFST修改,并获得了效果的提升。

之前的工作使用外部独立训练的LM进行在线重打分,与Seq2Seq模型联合优化的好处相违背。因此,在本文中,我们提出了一个Contextual LAS(CLAS),提供一系列上下文短语(即语境短语)去提升识别效果。我们的方法是首先将每个短语映射成固定维度的词嵌入,然后采用一个attention注意力机制在模型输出预测的每一步去摘要可用的上下文信息。我们的方法可以被看成是流式关键词发现技术[3]的一个泛化,即允许在推理时使用可变数量的上下文短语。我们提出的模型在训练的时候不需要特定的上下文信息,并且也不需要对重打分的权重进行仔细的调整,仍然能融入OOV词汇。

本文接下来将从标准的LAS模型、标准的上下文LAS模型、以及我们提出的修改版LAS这几个部分进行讲解。

LAS模型就是一个Seq2Seq模型,包含编码器和带有注意力机制的解码器,在解码每个词语的时候,注意力机制会动态计算每个输入隐状态的权重,并通过加权线性组合得到当前的注意力向量。这个模型的输入x是语音信号,输出y是graphemes(即英文的character,包含a~z,0~9,<space>, <comma>, <period>, <apostrophe>,<unk>)。

LAS的输出是如下公式:

这个公式依赖于encoder的状态向量hx,decoder的隐藏层状态dt,以及建模为上下文向量的Ct, Ct是用一个attention gate去聚合decoder状态和encoder的输出。

在标准的上下文LAS模型中,我们假设已经提前知道了一系列的单词级偏移短语。并把他们编译成了一个WFST。这个单词级的WFST G可以由一个speller FST S组成。S可以把一串graphemes或者word-pieces转换成对应的单词。因此我们可以获得一个上下文语言模型LM C=min(det(SоG))。来自这个上下文语言模型的的分数Pc(y), 之后能被用到解码过程中来增强标准的log概率项。

在这里,λ是一个可调整的参数,来控制上下文语言模型对整体模型得分的影响。这个公式中的总的分数,只在单词(word)层面应用。如下图所示:

因此,如果相关单词(word)没有在beam中出现,那么这个技术不能提高效果。而且,我们观察到,尽管这个方法在上下文短语数量很少的时候(比如yes,no,cancel),这个方法的效果很好,但是当上下文短语中包含很多名词(比如歌名、联系人)时,这个方法效果不好。因此,如上图c中所示,我们探索在每一个单词的子词单元上施加权重。为了避免手动设定前缀词(与前缀匹配,但不与整个短语匹配)的权重,我们也包含了一个减法损失(subtractive cost),如上图C中的负权重。

下面我们开始介绍本文提出的上下文 LAS模型,它能够利用一系列偏置短语Z提供的额外上下文信息,来有效地建模P(y|x,z)。Z中的单个元素为与特定上下文语境相关的联系人、歌名等短语。假定这些上下文短语可以被表示成:Z = Z1,Z2 …,ZN。这些偏置短语是用来使模型朝输出特定短语偏置,然而,并不是所有的偏置短语都与当前要处理的语音相关,模型需要去决定哪些短语可能相关,并用这些短语去修改模型的目标输出分布。我们利用了一个bias-encoder(偏置编码器)去增强LAS,并把这些短语编码成hz={h0z,h1z,…, hNz}。我们用上标z来区分声音相关的向量。hiz是Zi的映射向量。由于所有的偏置短语可能都与当前的语音无关,我们额外包含了一个可学习的向量,h0z = hnbz,这个向量对应不使用偏置,即在输出时不使用任何偏置短语。这个选项使得模型能够忽略所有的偏置短语。这个偏置编码器是由一个多层的LSTM网络组成,hiz是将Zi中子词对应的embedding序列送到偏置编码器中,并用LSTM的最后状态作为整个短语的输出特征。我们然后用一个额外的attention去对hz进行计算,利用下面的公式,在输入到decoder中时,Ct = [Ctx;Ctz]。其他部分都与传统的LAS模型一样。

值得注意的是,上面的公式明确建模了在给定语音和之前的输出时,当前时刻看到每个特定短语的概率。

下面我们看下实验部分。实验是在25000小时的英文数据上进行的,这个数据集用一个房间模拟器,添加不同强度的噪声和混淆,手工干扰正常语音,使得信噪比在0到30dB之间,噪声源来自于Youtube和日常生活的噪声环境录音。Encoder的结构包含10层单向的LSTM,每层256个单元。偏置编码器包含单层的LSTM,有512个单元。解码器由4层LSTM组成,每层256个单元。实验的测试集如下:

首先,为了检验我们引入的偏移模块在没有偏移短语的情况下,会不会影响解码。我们对比了我们的CLAS和普通的LAS模型,CLAS模型在训练的时候,使用了随机的偏移短语,但是在测试的时候不提供偏移短语,出乎意料的是,CLAS在没有偏移短语提供时,也获得了比LAS更好的性能。

我们进一步对比了不同的在线重打分的方案,这些方案在如何分配权重给子词单元方面有区别。从下表中可以看到,最好的模型在每个子词单元上进行偏移,有助于在beam中保留单词。下面所有的在线重打分的实验都是在子词单元上进行偏移。

接下来,我们对比了CLAS和上面的各种方案的效果:

从这个表中可以看到,CLAS显著得超过了传统的方法,并且不需要任何额外的超参数调整。

最后,我们把CLAS和传统的方法结合,可以看到偏置控制和在线重打分都有助于效果提升。

在本文中,我们展示了CLAS,一个全神经网络组成,端到端的上下文ASR模型,通过映射所有的上下文短语,来融合上下文信息。在实验评估中,我们发现提出的CLAS模型超过了标准的shallow fusion偏置方法。

[1] Chan, William, et al. "Listen, attend and spell: A neural network for large vocabulary conversational speech recognition." 2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2016.

[2] Ian Williams, Anjuli Kannan, Petar Aleksic, David Rybach, and Tara N. Sainath, “Contextual speech recognition in end-to-end neural network systems using beam search,” in Proc. of Interspeech, 2018.

[3] Y. He, R. Prabhavalkar, K. Rao, W. Li, A. Bakhtin, and I. McGraw, “Streaming Small-footprint Keyword Spotting Using Sequence-to-Sequence Models,” in Proc. ASRU, 2017.

点击关注,第一时间了解华为云新鲜技术~

从Encoder-Decoder模型入手,探索语境偏移解决之道的更多相关文章

  1. 自定义Encoder/Decoder进行对象传递

    转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...

  2. 比sun.misc.Encoder()/Decoder()的base64更高效的mxBase64算法

    package com.mxgraph.online; import java.util.Arrays; /** A very fast and memory efficient class to e ...

  3. Netty自定义Encoder/Decoder进行对象传递

    转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...

  4. 探索专有领域的端到端ASR解决之道

    摘要:本文从<Shallow-Fusion End-to-End Contextual Biasing>入手,探索解决专有领域的端到端ASR. 本文分享自华为云社区<语境偏移如何解决 ...

  5. IE/Chrome背景图片居中1px偏移解决方法

    最近在支持行业运营的一个推广页面,遇到了非常规的页面banner图居中的问题,为了解决此问题,做了简单的测试,做了一个小结,为经常做大促页面的兄弟姐妹们提供参考解决方案. 首先来看看现象.最经典的页面 ...

  6. Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

    1.主要完成的任务是能够将英文转译为法文,使用了一个encoder-decoder模型,在encoder的RNN模型中是将序列转化为一个向量.在decoder中是将向量转化为输出序列,使用encode ...

  7. pytoch之 encoder,decoder

    import torch import torch.nn as nn import torch.utils.data as Data import torchvision import matplot ...

  8. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  9. 并发编程-epoll模型的探索与实践

    前言 我们知道nginx的效率非常高,能处理上万级的并发,其之所以高效离不开epoll的支持, epoll是什么呢?,epoll是IO模型中的一种,属于多路复用IO模型; 到这里你应该想到了,sele ...

  10. ASP.NET Core MVC/WebAPi 模型绑定探索 转载https://www.cnblogs.com/CreateMyself/p/6246977.html

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

随机推荐

  1. js数据结构--集合

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  2. Vue + Element UI 实现复制当前行数据功能(复制到新增页面组件值不能更新等问题解决)

    1.需求 使用Vue + Element UI 实现在列表的操作栏新增一个复制按钮,复制当前行的数据可以打开新增弹窗后亦可以跳转到新增页面,本文实现为跳转到新增页面. 2.实现 1)列表页 index ...

  3. 【Javaweb】做一个房产信息管理系统二

    由于我还不太熟练用sql语句写数据库,所以直接用navicate了 我们需要新建四个数据表: adimin(超级管理员信息) customer(顾客) property(房产信息) realestat ...

  4. TPC-DS工具介绍及性能测试

    一. Hive-testbench工具介绍 TPC-DS:https://www.cnblogs.com/webDepOfQWS/p/10544528.html 由于原生态工具生产测试数据表存在bug ...

  5. [NOI online22提高A] 丹钓战

    题目描述 有 \(n\) 个二元组 \((a_i, b_i)\),编号为 1 到 n. 有一个初始为空的栈 SS,向其中加入元素 \((a_i, b_i)\) 时,先不断弹出栈顶元素直至栈空或栈顶元素 ...

  6. 429 You are being rate limited

    记录贴 429 真的很让人伤心 清除浏览器数据 我用的 Edge : 设置 ⇒ 隐私.搜索和服务 ⇒ 清除浏览器数据 ⇒ 立即清除 然后就重新登陆可以了

  7. Chrome扩展的核心:manifest 文件(上)

    大家好,我是dom哥.我正在写关于 Chrome 扩展开发的系列文章,感兴趣的可以点个小星星. Chrome 在全球浏览器市场份额独占 6 成,无论是对普通用户还是开发者,都是电脑里的必备利器.Chr ...

  8. 基于Raft算法的DLedger-Library分析

    1 背景 在分布式系统应用中,高可用.一致性是经常面临的问题,针对不同的应用场景,我们会选择不同的架构方式,比如master-slave.基于ZooKeeper选主.随着时间的推移,出现了基于Raft ...

  9. linux 上安装kapacitor

    转载请注明出处: 1.通过安装包安装 1.使用以下命令下载安装包: wget https://dl.influxdata.com/kapacitor/releases/kapacitor_1.6.3- ...

  10. npm 发布流程

    登录npm 查看本地是否登录 # 全局配置源 npm who am i # 官方源 npm who am i --registry https://registry.npmjs.org 注: npm源 ...