摘要:本文从《Shallow-Fusion End-to-End Contextual Biasing》入手,探索解决专有领域的端到端ASR。

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

对于产品级的自动语音识别(Automatic Speech Recognition, ASR),能够适应专有领域的语境偏移(contextual bias),是一个很重要的功能。举个例子,对于手机上的ASR,系统要能准确识别出用户说的app的名字,联系人的名字等等,而不是发音相同的其他词。更具体一点,比如读作“Yao Ming”的这个词语,在体育领域可能是我们家喻户晓的运动员“姚明”,但是在手机上,它可能是我们通讯录里面一个叫做“姚敏”的朋友。如何随着应用领域的变化,解决这种偏差问题就是我们这个系列的文章要探索的主要问题。

对于传统的ASR系统,它们往往有独立的声学模型(AM)、发音词典(PM)、以及语言模型(LM),当需要对特定领域进行偏移时,可以通过特定语境的语言模型LM来偏移识别的过程。但是对于端到端的模型,AM、PM、以及LM被整合成了一个神经网络模型。此时,语境偏移对于端到端的模型十分具有挑战性,其中的原因主要有以下几个方面:

1. 端到端模型只在解码时用到了文本信息,作为对比,传统的ASR系统中的LM可以使用大量的文本进行训练。因此,我们发现端到端的模型在识别稀有、语境依赖的单词和短语,比如名词短语时,相较于传统模型,更容易出错。

2. 端到端的模型考虑到解码效率,通常在beam search解码时的每一步只保有少量的候选词(一般为4到10个词),因此,稀有的单词短语,比如依赖语境的n-gram(n元词组),很有可能不在beam中。

先前的工作主要是在尝试将独立训练的语境n-gram 语言模型融入到端到端模型中,来解决语境建模的问题,这个做法也被称为:Shallow fusion (浅融合)。但是他们的方法对于专有名词处理得比较差,专有名词通常在beam search时就已经被剪裁掉了,因此即使加入语言模型来做偏移,也为时已晚,因为这种偏移通常在每个word生成后才进行偏移,而beam search在grapheme/wordpiece (对于英文来说,grapheme指的是26个英文字母+1空格+12常用标点。对于中文来说,grapheme指的是3755一级汉字+3008二级汉字+16标点符号) 等sub-word单元上进行预测。

在这篇博文中,我们来介绍尝试解决这个问题的一篇工作:《Shallow-Fusion End-to-End Contextual Biasing》,这篇工作是Google发表在InterSpeech 2019上的工作。在这个工作中,首先,为了避免还没使用语言模型进行偏移,专有名词就被剪枝掉了,我们探索在sub-word单元上进行偏移。其次,我们探索在beam 剪枝前使用contextual FST。第三,因为语境n-gram通常和一组共同前缀(“call”, “text”)一起使用,我们也去探索在shallow fusion时融合这些前缀。最后,为了帮助专有名词的建模,我们探索了多种技术去利用大规模的文本数据。

我们在这里,首先介绍下Shallow fusion,给定一串语音序列x=(x_1, …, x_K),端到端的模型输出一串子词级的后验概率分布y=(y_1,…,y_L),即P(y|x). Shallow fusion的意思就是将端到端的输出得分与一个外部训练的语言LM得分在beam search时进行融合:
y^{*}=argmax logP(y|x)+\lambda P_C(y)y∗=argmaxlogP(y∣x)+λPC​(y)

其中\lambdaλ是一个用来调节端到端模型和语言模型权重的参数。为了构建用于端到端模型的语境LM,我们假设已经知道了一系列的单词级偏置短语,并把他们编译成了n-gram的WFST(weighted finite state transducer)。这个单词级的WFST,然后被分解成一个作为拼写转换器的FST,这个FST可以把一串graphemes/wordpieces转换成对应的单词。

所有之前的偏移工作,无论是针对传统方法或者是端到端模型,都是将语境LM和基底模型(比如端到端模型或者ASR声学模型)的得分在单词(word)或者子词(sub-word)网格上进行结合。端到端的模型由于在解码时,通常设置了比较小的beam阈值,导致了其解码路径相较于传统的方法较少。因此本文主要探索在beam剪枝前将语境信息应用到端到端模型里。

当我们选择对grapheme进行偏移,一个担心是我们可能会有大量的不必要的词语,与语境FST匹配上,从而淹没这个beam。

举例来看,如上图所示,如果我们想偏移这个单词“cat”,那么语境FST构建的目标就是去偏移“c”“a”和“t”这三个字母。当我们想要往“c”这个字母去偏移时,我们可能不仅会把“cat”加入到beam中,也有可能会把“car”这种无关的单词加入到beam中。但是如果我们是在wordpiece层面进行偏移,相关的subword有较少的匹配,因此,更多相关的单词能被加入beam中。还是以“cat”这个例子举例,如果我们按照wordpiece来偏移,那么“car”这个词就不会进入beam中。因此,在本文中,我们使用了一个4096大小的wordpiece词汇表。

我们进一步分析,Shallow fusion修改了输出的后验概率,因此我们也可以发现shallow fusion会伤害那些没有词语需要偏移的语音,即那些去语境化的语音。因此,我们探索只去偏移那些符合特定前缀的短语,举例来说,在手机中搜索联系人时,通常会先说一个“call”或者“message”,或者想播放音乐时,会先说一个“play”。因此在本文中,我们在构建语境FST时,考虑到这些前缀词语。我们抽取出在语境偏移单词前出现过50词以上的前缀词语。最后,我们获得了292个常用前缀词语用于查找联系人,11个用于播放歌曲,66个用于查找app。我们构建了一个无权重的前缀FST,并把它和语境FST级联起来。我们也允许一个空前缀选项,去跳过这些前缀词。

一个提高专有名词覆盖率的方法是利用大量的无监督数据。无监督的数据来自语音搜索中的匿名语音。这些语音利用一个SOTA模型进行处理,只有那些具有高confidence的语音会被保留下来。最后,为了保证我们留下来的语音主要关于专有名词,我们用了一个专有名词标注器(就是ner里的CRF作序列标注),并保留带有专有名词的语音。利用上述方法,我们得到了一亿条无监督的语音,并结合了3500万条有监督的语音进行训练,在训练时,每个batch内80%的时间是有监督的数据,20%是无监督的数据。利用无监督的数据,有一个问题就是他们识别出来的文字可能有错,识别的结果也会限制名称的拼写,比如到底是Eric,还是Erik,或者Erick。因此,我们也可以利用大量的专有名词,结合TTS的方法,创造了一个合成的数据集。我们从互联网上针对不同类别去挖掘大量的语境偏移词语,比如多媒体、社交、以及app等类别。最后,我们抽取除了大概58万条联系人的名字,4万2千条歌名,以及7万个app的名字。接下来,我们从日志中去挖掘大量的前缀词语,比如,“call John mobile”,可以得到前缀词“call”对应到社交领域。然后,我们利用特定类别的前缀词和专有名词去生成语音识别的文本,并利用语音合成器,为每个类别生成了大约100万条语音。我们进一步为这些语音加上了噪音来模拟室内的声音。最后,在训练时,每个batch内90%的时间是有监督的数据,10%的是合成的数据。

最后,我们探索了是否能添加更多的专有名词到有监督的训练集中。具体来说,我们对每一条语音利用专有名词标注器,找到其中的专有名词。对于每一个专有名词,我们获得了其发音特征。举例来说,比如“Caitlin”可以表示成发音单位(phonemes)“K eI t l @ n”.紧接着,我们从发音词典中,找到有相同发音单位序列的词语,比如“Kaitlyn”。对于真实的语音,和可以替换的单词,我们在训练时,随机替换。这个做法,可以让模型观察到更多的专有名词。一个更直接的出发点是,模型能够在训练的时候拼写出更多的名字,那么在后面解码时,结合语境FST,更能够拼写出这些名字。

下面看一下实验部分。所有实验均基于RNN-T模型,encoder里包含一个time reduction层,以及8层LSTM,每层有2000个隐藏层单元。decoder包含2层的LSTM,每层有2000个隐藏层单元。encoder和decoer被送到一个联合网络中,这个网络有600个隐藏层单元。然后这个联合网络被送到一个softmax里,输出为有96个单元的graphemes或者是4096个单元的wordpieces。在推理时,每条语音伴随着一系列偏移短语用来构建一个语境FST。在这个FST中,每条弧(arc)都有相同的权重。这个权重为每个目录(比如音乐,联系人等)的测试集分别调节。

上图是Shallow Fusion的一些结果,E0和E1是grapheme和wordpieces的结果,这些模型是没有进行偏移的。E2是grapheme带偏移的结果,但是不带任何本文中的提升策略。E3是用了一个减法代价(subtractive cost)去防止在beam中保留糟糕的候选词,这个操作在几乎所有的测试集上都带来了提升。再从grapheme层面的偏移转换到wordpiece上的偏移,即我们在更长的单元上进行偏移,有助于在beam内保持相关的候选词,并提高模型的性能。最后,我们的E5模型在beam search剪枝前,就应用偏移FST,我们称之为early biasing,这样有助于确保好的候选词能更早的保留在beam里,并带来了额外的性能提升。总之,我们最好的shallow fusion模型是在wordpiece层面进行偏移,并带有subtractive cost和early biasing。

由于语境偏置的可能存在于句子中,我们也需要保证当语境偏移不存在时,模型的效果不会下降,即不会损害那些不带有偏置词的语音的识别。为了测试这一点,我们在VS test数据集上进行了实验,我们随机从Cnt-TTS测试集中选择了200个偏置短语,去构建一个偏置FST。下图展示了实验的结果:

从这个表中可以看到,E1是我们的baseline模型,当添加偏移后,E5模型在VS上出现了很多程度上的效果下降。为了解决这个问题,传统的模型在偏移FST中包含了前缀词。如果我们只在看到任何非空前缀词后,才应用偏移(E6),我们可以观察到VS数据集上相较E5出现了结果提升,但是在其他有偏移词的测试集上,出现了结果下降。进一步,当我们允许其中一条前缀可以为空时(主要想解决有偏移词的场景),但是我们仅仅获得了与E5类似的结果。为了解决这个问题,我们对于语境短语用了较小的权重如果前面是一个空的前缀词(即没有前缀词)。利用这个方法,我们观察到E8相较于E1模型,在VS上取得了很小程度的效果下降,但是在有偏移短语的测试集上,能够保持有效果提升。

在分析完了上述内容后,我们进一步探索下,当模型能感知到更多的专有名词时,我们是否能进一步提升偏移的能力。我们的基线模型是E8,这个模型是在3500万的有监督数据集上训练得到的。结合我们上面的无监督数据和生成的数据,我们做了下面的实验:

E9的实验结果展示,当有无监督的数据一起训练时,在各个数据集上,都有效果提升。当有生成的数据一起训练时(E10),相比于E9在TTS测试集上有更大的效果提升,但是在真实场景数据集Cnt-Real上出现了较大程度的下滑(7.1 vs 5.8),这表明在TTS偏移测试集上的提升,主要来源于训练集和测试集间匹配的音频环境,而不是学到了更丰富的专有名词的词汇表。

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

探索专有领域的端到端ASR解决之道的更多相关文章

  1. 汽车行业解决方案_K2助力车企实现费控/生产“端到端流程”

    如今汽车行业正面对一轮全球范围内新变革周期,这种“变革”一方面来源于在新能源技术.人工智能.信息技术.物联网技术等高新科技地猛烈敲击,另一方面源于全球的经济政策变幻莫测,贸易保护时代地到来,车企深陷发 ...

  2. 论文翻译——Fast-R-CNN(端到端开篇, End to end)

     快速的区域卷积网络方法(Fast R-CNN)   论文地址:https://arxiv.org/abs/1504.08083 摘要: 本文提出一种基于快速的区域卷积网络方法(Fast R-CNN) ...

  3. 端到端TVM编译器(下)

    端到端TVM编译器(下) 4.3 Tensorization DL工作负载具有很高的运算强度,通常可以分解为张量运算符,如矩阵乘法或一维卷积.这些自然分解导致了最近的添加张量计算原语.这些新的原语带来 ...

  4. 端到端TVM编译器(上)

    端到端TVM编译器(上) 摘要 将机器学习引入到各种各样的硬件设备中.AI框架依赖于特定于供应商的算子库,针对窄范围的服务器级gpu进行优化.将工作负载部署到新平台,例如手机.嵌入式设备和加速器(例如 ...

  5. BPM端到端流程解决方案分享

    一.需求分析 1.企业规模的不断发展.管理水平的不断提升,通常伴随着企业各业务板块管理分工更细.更专业,IT系统同样越来越多.越来越专 业化.不可避免的,部门墙和信息孤岛出现了,企业的流程被部门或者I ...

  6. 详解APM数据采样与端到端

    高驰涛 云智慧首席架构师 据云智慧统计,APM从客户端采集的性能数据可能占到业务数据的50%,而企业要做到从Request到Response整个链路中涉及到的所有数据的准确采集,并进行有效串接,进而实 ...

  7. [DeeplearningAI笔记]ML strategy_2_4端到端学习

    机器学习策略-端到端学习 End-to-end deeplearning 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.9 什么是端到端学习-What is End-to-end dee ...

  8. 【OCR技术系列之八】端到端不定长文本识别CRNN代码实现

    CRNN是OCR领域非常经典且被广泛使用的识别算法,其理论基础可以参考我上一篇文章,本文将着重讲解CRNN代码实现过程以及识别效果. 数据处理 利用图像处理技术我们手工大批量生成文字图像,一共360万 ...

  9. 【OCR技术系列之七】端到端不定长文字识别CRNN算法详解

    在以前的OCR任务中,识别过程分为两步:单字切割和分类任务.我们一般都会讲一连串文字的文本文件先利用投影法切割出单个字体,在送入CNN里进行文字分类.但是此法已经有点过时了,现在更流行的是基于深度学习 ...

随机推荐

  1. 极速精简 Go 版 Logstash

    前言 今天来介绍 go-zero 生态的另一个组件 go-stash.这是一个 logstash 的 Go 语言替代版,我们用 go-stash 相比原先的 logstash 节省了2/3的服务器资源 ...

  2. Python fire库使用

    1.前要fire是python中用于生成命令行界面(Command Line Interfaces, CLIs)的工具 不需要做任何额外的工作,只需要从主模块中调用fire.Fire() 它会自动将你 ...

  3. Dynamics CRM安装教程九(续):自建证书的CRM项目客户端设置CRM访问

    配置完IFD之后就可以为客户端电脑配置访问CRM了首先到CA证书服务器中把证书下载下来,打开CA服务器的浏览器,输入地址http://stg-ad/certsrv/ 其中stg-ad是机器名之后点击下 ...

  4. SpringBoot-如何设计优秀的后端接口?

    1 概述 本篇文章以Spring Boot为基础,从以下三个方向讲述了如何设计一个优秀的后端接口体系: 参数校验:涉及Hibernate Validator的各种注解,快速失败模式,分组,组序列以及自 ...

  5. 一次ssh不能登陆问题

    看提示应该是进程数满了 ps -eLf | wc -l  查看当前进程数 [root@qc-app-16-63 containers]# ps -eLf | wc -l2625 查看允许最大进程数 s ...

  6. 473. Matchsticks to Square

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  7. Python 极速入门指南

    前言 转载于本人博客. 面向有编程经验者的极速入门指南. 大部分内容简化于 W3School,翻译不一定准确,因此标注了英文. 包括代码一共两万字符左右,预计阅读时间一小时. 目前我的博客长文显示效果 ...

  8. ltrim的思考

    ltrim的思考 说明 string ltrim( string $str[, string $character_mask] ) 删除字符串开头的空白字符(或其他字符) 案例1 $test = &q ...

  9. hdu1505 暴力或dp优化

    题意:        给你一个矩阵,让你在里面找到一个最大的f矩阵.. 思路:       三种方法ac这到题目;  方法(1) 以宽为主,暴力    开一个数组sum[i][j],记录当前这个位置的 ...

  10. 技术面试问题汇总第004篇:猎豹移动反病毒工程师part4

    这次所讨论的三个问题,比如DLL以及HOOK,很容易被病毒木马所利用,因此必须要比较全面地进行了解.而异常处理机制,则往往与漏洞相关联.它们自身的概念并不难理解,只是由之引申而来的问题,在计算机安全领 ...