作者 | 刘忠亮
整理 | 卢鑫旺
审校 | 云昭
近年来,智能语音语言技术蓬勃发展,逐步改变着人们生产生活的方式,在社交领域更是对智能语音技术提出了更高的要求。
日前,在51CTO主办的AISummit全球人工智能技术大会上,Soul语音算法负责人刘忠亮,带来了主题演讲《Soul智能语音技术实践之路》,立足于Soul的一些业务场景,分享了Soul在智能语音技术的一些实践经验。
现将演讲内容整理如下,希望对大家有所启发。
Soul的语音应用场景
Soul是一个基于兴趣图谱推荐的具有沉浸感的社交场景,在这个场景下,语音交流非常多,所以在过去一段时间积累了很多的数据。目前大概一天有上百万小时的量级,如果去除掉语音通话当中的一些静音、噪声等等,只统计这些有意义的音频片段的话,大概有六七亿条音频片段。Soul的语音业务入口主要是以下几个:
语音派对
群组可以创建房间,很多用户在里面进行语音聊天。
视频派对
Soul平台的用户,其实大部分是不希望露脸的,不希望暴露自己的,所以我们就做了一个自研的3D的Avatar形象或者头套给用户使用,帮助用户更好地去表达自己或者是无压力的表达自己。
狼人杀游戏
也是一个房间,里面也可以是好多人一起玩游戏。
语音匹配
一个比较有特色的场景,就是语音匹配,或者说它跟微信打电话一样,就是可以一对一的去聊天。
基于这些场景,我们构建了自研语音能力,主要围绕两大方向:第一是自然的人机交互,第二是内容理解与生成。主要四个方面:第一是语音识别和语音合成;其次是语音分析和语音动画,下图是我们用到的常见的语音工具,主要有语音分析,比如音质、音效、音乐这些方向。然后是语音识别,比如中文识别、歌声识别、中英混读。第三是语音合成相关的,比如文娱转换、语音转换、歌声合成相关的事情。第四是语音动画,主要是做了一些文字驱动口形、语音驱动口形等等一些语音动画的技术。
基于这些语音算法能力,我们有很多语音应用形式,比如语音质量的检测,包括增强,语音审核,文字配音、语音话题、虚拟环境音,比如这些3D的空间音效等等。下面针对语音审核和虚拟形象两个业务场景下用到的技术进行介绍。
语音内容审核
语音内容审核是通过对音频片段进行涉政、色情、辱骂、广告等这些维度的内容进行打标签,或者是进行识别,通过这些违规标签的检测和审核,来保障网络安全。这里面用到的最核心的技术就是端到端语音识别,它辅助将用户的音频转成文字,然后再给下游的审核人员进行二次质检。
端到端的语音识别系统
下图是我们目前正在使用的一个端到端语音识别框架,首先它会抓取用户的一个片段音频进行特征提取,目前用到的特征有很多,我们主要是用了Alfa-Bank特征,在一部分场景下尝试用了Wav2Letter这种预训练得到的特征。得到音频特征之后会进行一个端点检测,就是检测这个人是不是在说话,这个音频片段有没有人声。目前用到的基本上是一些经典的能量VD和模型DNVD。
拿到这些特征之后,我们会送到一个声学打分的模块,这个声学模型我们在开始的时候是用的Transformer CDC,目前已经迭代到了Conformer CDC。经过这个声学打分之后,我们会把一系列的序列的分数送给解码器,解码器负责解码出文字来,它会基于识别结果再进行二次打分。在这个过程中,我们用到的模型基本上还是一些比如传统的EngelM模型,还有一些目前比较主流的Transformer深度学习的模型进行重打分。最后,我们还会做一个后处理,比如经过一些标点的检测、文本正则化、语句顺滑等这些处理,最终得到一个有意义的比较准确的识别文字结果,比如“2022年全球人工智能大会”。
在端到端语音识别系统里面,其实我们讲的端到端主要是在声学打分这部分我们是使用了端到端技术,其他的主要还是一些传统的和一些经典的深度学习方式。
在构建上面这个系统过程中,我们实际上是遇到了很多问题,在这里主要是列举三个:
- 有监督声学数据太少 这也是大家通常都遇到的事情。主要原因就是,一是音频你必须要的听完才能做标注。第二,它的标注成本也是非常高的。所以这部分数据少是一个大家都共性的问题。
- 模型识别效果差 这个有很多原因。第一个是比如在中英混读或者多领域的时候,用通用模型去识别它会存在比较差的现象。
- 模型速度慢
针对这几个问题,我们主要是通过如下三个方式去解决的。
数据预处理
Soul的场景多且比较复杂。比如群聊派对,它会出现多个人交叠的情况或者AB一直在对话。比如在在线KTV,它会出现一些边唱歌边说话的情况。但是我们在标注数据的时候,因为它比较昂贵,所以我们会选取这些场景下面比较干净的数据进行标注,比如可能会标注一万小时干净数据。但是干净的数据跟真实场景的数据的复杂性是不一样的,所以我们会基于这些干净数据做一些数据预处理。比如一些经典的加噪、加混响、调速,比较把速度调快一些或者调慢一些,调能量,把能量调大、调小一些,经过这些比较经典的一些数据预处理方式。
除了这些方式,我们会针对我们业务场景下出现的一些问题,我们会做一些针对性的数据预处理或者数据增广。比如刚才提到群聊派对很容易出现多说话人交叠的情形,所以我们会做一个多说话人拼接音频,也就是说把ABC三个说话人的音频片段我们会做一个cut,一起去做数据增广。
因为在音视频通话里面有一些会在整个音频前端做一些基本的3D算法的预处理,比如自动回声消除、智能降噪等等,所以说我们也会为了适配线上的使用场景也会做一些3D算法的预处理。
经过这些方式的数据预处理之后,我们可以得到多样性的这些数据,比如带噪声的、有一些混响的、多人甚至多风格的这种数据都会增广出来。比如我们会把一万小时增广成大概五万小时甚至比如八九万小时这么一个量级,这样的话,数据的覆盖度、广度就会非常高。
模型微创新
我们使用的模型的主要框架还是Conformer结构。在这个Conformer结构左边就是经典的Encoder CDC框架。右边是一个Attention Decoder。但是大家注意到,我们在右边这个Loss里边,原来的Conformer结构是一个CE Loss,而我们这边把它换成了Focal Loss。主要是我们是使用Focal Loss去解决稀疏单元、稀疏数据训练不收敛的问题,或者训练差的问题,它是可以解决的。
比如在中英混读里面,有些英文单词我们在训练数据里面是很少的,这种情况下这个单元是学不好的。通过Focal Loss我们可以把它的Loss权重给调高一些,可以缓解一部分数量问题或者训练不好的问题,能够解决一部分bad case。
第二个点,我们在训练策略上会不一样,比如我们在训练策略也会采用一些混合训练的方式,比如在前期训练的时候,我们训练Decode这部分输入的时候,我们还是采用精标的Label序列数据作为输入。但是随着训练模型收敛,后期的时候我们会按照一定概率去采样一部分预测出来的Label作为Decoder的输入,来做一些Trick,这个trick主要解决什么?就是训练模型跟线上推理模型的输入特征不一致的现象,通过这种方式我们是可以解决一部分的。
但还有一个问题就是,其实在这个Conformer模型原来或者比如Vnet或者ESPnet他们提供的模型里面,默认是一个绝对位置信息。但是绝对位置信息它不能解决序列过长的时候的识别问题,所以我们会把绝对位置信息改成相对位置编码来解决这个问题。通过这种方式,可以解决识别过程中出现的比如说有些词重复或者是偶发的丢字或者丢词的现象,这个问题也是可以解决的。
推理加速度
第一个是声学模型,我们会把自回归的模型改成这种基于Encoder CDC+WFST解码的方式,先解出一部分识别结果,比如NBest、10best或者20best。基于20best,我们会送到Decorde Rescore去做一个二遍重打分,这样的话可以避免时序依赖的关系,便于GPT并行的进行计算或推理。
除了经典的这种加速的方式,我们还做了混合量化的方式,就是我们在深度学习前向推理的过程中,我们一部分使用8Bit进行计算,但是在核心的一部分,比如金融函数这部分我们依然使用16bit,主要是在速度和精度方向上我们会做一个适当的平衡。
经过这些优化之后,整个推理速度是比较快的。但是在我们的实际上线过程中,我们还发现了一些小问题,我觉得也算是一个Trick。
在语言模型层面上,在语言模型层面上,比如我们场景闲聊的文本比较多,但是也有唱歌的,我们要同一个模型既要解决说话,又要解决歌声。在语言模型上面,比如闲聊文本,它通常比较碎、比较短,所以我们经过实验之后,我们发现三元的是比较好的,五元反而没有带来提升。
但是比如歌声的话,它的文本比较长,且它的句式、文法相对比较固定,所以在实验过程中,五元是比三元好的。出现这种情况,我们使用的是混合文法来对闲聊文本和歌声文本共同进行语言模型的建模。使用了“三元+五元”混合的模式,但这个“三元+五元”混合并不是我们传统意义上说的差值,我们并没有做差值,而是把闲聊的三元的文法跟四元的歌声和五元的文法拿过来直接做一个合并。这么得到的arpa目前是更小的,在解码的过程中也比较快,更重要一点就是显存占用比较小。因为在GPU上解码的话,显存大小是固定的。所以说我们是需要控制一定的语言模型大小的情况下,来尽可能通过语言模型提升识别的效果。
经过声学模型和语言模型的一些优化和Trick之后,目前我们的推理速度也是非常快的。实时率基本上能到0.1、0.2的水平。
虚拟仿真
主要是通过将声音、口形、表情、姿态等这些内容进行生成,来帮助用户更无压力或者更自然、更自由地去表达,这背后需要的核心技术之一就是多模态语音合成。
多模态语音合成
下图是目前正在使用的语音合成系统的基本框架。首先我们会获取用户的输入文字,比如“2022全球人工智能大会”,然后我们会送到文本分析这个模块,这个模块主要是对文本进行一些各方面的分析,比如进行文本的正则化,还有一些分词,最重要一点是自转移,把文字转成音素,还有一些韵律预测等等功能。经过这个文本分析之后,我们就可以拿到用户的这句话的一些语言学特征,这个特征会送到声学模型里面。声学模型目前我们主要是使用的基于FastSpeech这个框架做的一些模型的改进和训练。
声学模型得到声学特征,比如梅尔特征,或者时长或者能量等等信息,它的特征流向会分两部分。一部分我们会送到声码器里面,主要是用来生成我们可以听的音频波形。另外一个流向是送到唇形预测里面,我们通过唇形预测模块可以预测出口形对应的BS系数。得到BS特征值之后,我们会送到视频生成模块,这部分是由视觉团队负责,可以生成虚拟头像,就是带口形、带表情的这种虚拟形象。最终我们会把虚拟头像和音频会做一个合并,最终生成音视频动画。这就是我们整个多模态语音合成的基本框架、基本流程。
多模态语音合成过程中的主要问题:
- 语音音库数据质量比较差。
- 合成音质较差。
- 音画延迟大,口型和声音对不上
Soul的处理方式与在改进端到端的语音识别系统中类似。
数据预处理
我们的音库来源是比较多的,左边这个图就是第一我们会采集录制。第二,当然我们非常感谢开源的数据公司,它会开源一些音库,我们也会用它来做一些实验。第三,我们平台上在公司级会有一些公开的营销视频,在做视频的时候,请了一些优质主播来做,所以这里面的音色也是非常优质的。第四,一些公开的网络数据,比如在对话的过程中,有些音色质量比较高,所以我们也会爬取一些,然后做一些预标注,主要是做一些内部的实验和预训练。
针对这些数据复杂性,我们做了一些数据预处理,比如短句的拼接,刚才提到在采集的过程中,句子是有长有短的,我们为了扩增音库的时长,我们会把短句做一个cut,过程中我们会去掉一些静音,静音太长的话也会有一些影响。
第二,就是去噪,比如在拿到的这些网络数据或者营销视频,在这里面的噪声我们会通过一些语音增强的方式把噪声去掉。
第三,其实现在的标注大部分是标注的音转字,但音素的边界现在基本上就不作为标注了,所以我们通常是通过这种MFA强制对齐的方式去获得音素的边界信息。
然后下面人声分离的话是比较特殊的,因为是在营销视频里面我们是有背景音乐,所以说我们会做一个人声分离,会把背景音乐给去掉,获取到干声数据。我们还做一些能量规整,还有一些VAD,VAD主要是在对话或者网络数据里面,我通过VAD去检测到有效的人声,再拿去做一些预标注或者预训练。
模型微创新
我们在做FastSpeech的过程中,我们主要做了三个方面的改动。左边这个图左边这一类是FastSpeech的基础模型,我们首先做了第一个变化就是我们会把音素和音调进行解耦建模,就是正常情况下大家的文本前端转出来的是音素序列,像左边这个图一样,“你好”这种单调的音素序列。但是我们会把它拆成右边这部分,两部分,就是左边一部分是音素序列,只有音素,没有声调。右边是只有声调,没有音素。这样的话我们会分别输送到一个ProNet(音)里面,会得到两个Embedding。两个Embedding会cut到一起,来替代之前的这种Embedding的方式。这样的话,好处就是它可以解决稀疏发音的问题,或者是有些发音不在我们的训练语料里面,这种问题是基本上都可以解决的。
第二个我们改动的方式是原来的方式是先预测一个时长,就是右边这个图,然后再基于这个时长我们把声音集进行扩展,然后预测能量和Pitch。现在我们是换了一下顺序,我们会基于音素级的去预测Pitch和Energy,然后预测完之后我们才会去对它进行一个帧级别的时长的扩展。这样的好处就是,在整个完整的音素的发音过程中,它的发音就比较稳定,这是在我们场景下的一个变化。
第三个就是我们在Decoder这部分,就是最上面这部分,Decoder这部分我们做了一个替代变化。原来的Decoder里面是用的这种Attention的方式,我们现在换成了这种Iconv或者Convolution的方式。这个好处就是因为Self-Attention它虽然能捕获很强大的历史信息、上下文信息,但是对逐步建模的能力是比较差的。所以说换成Convolution之后,我们在处理这种局部建模的能力会更好一些。比如在发音的时候,刚才提到的这种发音比较哑音或者模糊的现象,基本上它是可以解决的。这是我们目前的一些主要的变化。
共享声学模型
左边是合成口形,右边是合成声音,他们共享声学模型里面的一些Encoder和时长信息。
我们主要是做了三个动作。第一个是,我们是真实的采集了一些高精度的数据,比如我们会找一些真人佩戴一些高精度传感器,去驱动我们已经预测好的Avatar形象,得到高分辨率的音视频,做一些标注。这样就会得到文字、音频、视频的三者同步的一些数据。
第二个事情就是,可能也提到我们怎么解决音画一致性呢?因为我们最开始是先通过合成,文本合成声音,拿到声音之后,我们会做一个声音到口形的预测,这个过程中它会出现帧级别不对称的现象。目前我们是通过这种合成口形和合成声音共享声学模型的方式,并且在帧级序列进行扩展之后去做。目前是可以保证在帧级上是可以对齐的,能够保证音画一致性。
最后,我们目前并没有基于序列的方式去预测口形或者BS基,我们是基于LSTM的这种方式去预测BS基。预测的BS系数之后,但是它有可能预测得有些异常,我们还会做一些后处理,比如正则化,比如BS基太大或者太小,都会导致口形张得太大甚至变化太小,我们都会设置一个范围,不能太大了,会控制在一个合理的范围之内。目前基本上是可以保证音画一致性的。
未来展望
一是多模态识别,在高噪情况下,音频结合口形做多模态识别,提高识别准确率。
二是多模态的语音合成实时语音转换,可以保留用户的情感、风格这些特征,只是把用户的音色转换到另外一个音色上面。