当前位置: 首页 > 科技观察

Soul智能语音技术实践之路

时间:2023-03-11 20:49:39 科技观察

作者|刘忠良编辑|更高的要求。日前,在Soul主办的AISummit全球人工智能技术大会上,Soul语音算法负责人刘忠良做了主题演讲《Soul智能语音技术实践之路》,基于Soul的一些业务场景,分享了Soul在智能语音技术。演讲内容整理如下,希望对大家有所启发。Soul的语音应用场景Soul是一个基于兴趣图谱推荐的沉浸式社交场景。在这个场景中,有很多语音通信,所以在过去的一段时间里积累了很多数据。目前,每天大约有一百万小时。如果去除语音通话中的一些静音、噪音等,仅统计这些有意义的音频片段,大约有600到7亿个音频片段。Soul的语音服务入口主要有以下几个:语音派对群可以创建房间,多人可以在里面进行语音聊天。视频派对Soul平台的用户大多不喜欢露脸,不喜欢暴露自己,所以我们做了一个自主研发的3D头像或者头饰供用户使用,帮助用户更好的表达自己或者无压力的表达自己。狼人杀游戏也是一个房间,也可以多人一起玩游戏。语音匹配比较有特色的场景是语音匹配,或者说和微信通话一样,就是一对一聊天。基于这些场景,我们构建了自研的语音能力,主要围绕两个方向:一是自然人机交互,二是内容理解和生成。主要有四个方面:第一是语音识别和语音合成;二是语音分析和语音动画。下图是我们常用的语音工具,主要是语音分析,比如音质、音效、音乐等。然后是语音识别,比如中文识别,歌唱识别,中英文混读。三是与语音合成相关,如娱乐转换、语音转换、歌声合成等。第四个是语音动画,主要是做一些语音动画技术,比如文字驱动唇形,语音驱动唇形等。基于这些语音算法能力,我们有很多语音应用形式,比如语音质量检测,包括增强、语音审核、文字配音、语音话题、虚拟环境音,比如这些3D空间音效等。下面介绍一下语音审核和头像这两个业务场景所用到的技术。语音内容审核语音内容审核是对带有政治、色情、侮辱、广告等维度的音频片段进行标注或识别,通过对这些非法标注的检测和审核来保障网络安全。这里使用的核心技术是端到端的语音识别,辅助将用户的音频转换成文本,然后对下游的审计人员进行二次质检。端到端语音识别系统下图是我们目前使用的一个端到端语音识别框架。首先,它将从用户那里捕获一段音频以进行特征提取。目前使用的特征很多,我们主要使用Alfa-Bank特征,部分场景尝试使用Wav2Letter的预训练特征。得到音频特征后,会进行端点检测,即检测人是否在说话,音频片段中是否有人声。目前使用的基本都是一些经典的能源VD和型号DNVD。获得这些特征后,我们将其发送到声学评分模块。这个声学模型一开始我们用的是TransformerCDC,后来迭代到ConformerCDC。在这个声学评分之后,我们会把一系列的序列评分发送给解码器,解码器负责对文本进行解码,它会根据识别结果进行二次评分。在这个过程中,我们使用的模型基本都是一些比如传统的EngelM模型,以及一些目前主流的Transformer深度学习模型来进行re-scording。最后,我们还会做一个后处理,比如一些标点符号检测、文本正则化、句子平滑等处理,最终得到一个有意义的、准确的文本识别结果,比如“2022全球人工智能大会”。在端到端语音识别系统中,其实我们说的端到端主要是声学评分部分用到的端到端技术。其他的主要是一些传统的,一些经典的深度学习方法。在搭建上述系统的过程中,我们其实遇到了很多问题。这里主要是三个:有监督的声学数据太少,这是大家平时都会遇到的。主要原因是,首先,您必须先听音频才能标记它。其次,它的贴标成本也很高。所以这部分数据缺失是大家的通病。造成模型识别效果不佳的原因有很多。第一个就是,比如中英文混杂或者多领域的时候,用一个通用的模型来识别会比较差。模型速度慢。针对这些问题,我们主要通过以下三种方式来解决。数据预处理Soul场景多且复杂。比如在群聊聚会中,会出现多人重叠或者AB一直在说话的情况。比如在网络KTV中,会出现边唱边说的情况。但是我们在给数据打标签的时候,因为比较贵,所以我们会选择这些场景下的干净数据来打标签,比如我们可能会给10000小时的干净数据打标签。但是clean数据的复杂度不同于真实场景数据,所以我们会根据这些clean数据做一些数据预处理。比如一些经典的方法,比如加噪音、加混响、调速度,都是相对较快或较慢,调整能量来增加或减少能量。经过这些比较经典的数据预处理方法。除了这些方法,我们还会针对我们业务场景中出现的一些问题,做一些有针对性的数据预处理或者数据扩充。比如前面提到的群聊聚会容易出现多个喇叭重叠的情况,所以我们会做一个多喇叭拼接音频,也就是把ABC的三个喇叭的音频片段剪下来做它一起数据增强。因为在音视频通话中,会在整个音频前端做一些基础的3D算法预处理,比如自动回声消除,智能降噪等,所以我们也会做一些适应线上使用场景的预处理3D算法。经过这些方式的数据预处理后,我们可以得到多样化的数据,比如有噪音的数据,一些混响的数据,多个人甚至多种风格的数据,这些都会被增强。比如我们将10000小时扩大到50000小时左右甚至80000到90000小时这样一个数量级。这样的话,数据的覆盖面和广度就会非常高。模型微创新我们使用的模型主要框架还是Conformer结构。这个Conformer结构的左边是经典的EncoderCDC框架。右边是注意力解码器。但是大家注意到右边的Loss,原来的conformer结构是CELoss,我们换成了FocalLoss。主要是我们用FocalLoss来解决稀疏单元的问题,稀疏数据训练不收敛,或者训练不好的问题,都可以解决。比如在中英文混合阅读中,我们训练数据中的英文单词很少。在这种情况下,这个单元就不好学了。通过FocalLoss,我们可以增加它的Lossweight,可以缓解一些quantityproblems或者poortrainingproblems,可以解决一些badcases。第二点,我们的训练策略会有所不同。比如我们在训练策略上也会采用一些混合训练的方式。比如在早期的训练中,我们在训练输入的Decode部分时,仍然使用preciselabel。序列数据作为输入。但是随着训练模型的收敛,我们会按照一定的概率采样一部分预测的标签作为后期解码器的输入来做一些trick。这个技巧的主要解决方案是什么?是训练模型和在线推理模型的输入特征不一致的现象。这样,我们就可以解决一部分了。但是还有一个问题。其实在Conformer的原始模型或者Vnet或者ESPnet提供的模型中,默认的是一个绝对位置信息。但是绝对位置信息无法解决序列过长时的识别问题,所以我们将绝对位置信息改为相对位置编码来解决这个问题。这样一来,就可以解决在识别过程中出现一些单词重复或者偶尔漏词或漏词等问题,也可以解决这个问题。推理加速首先是声学模型。我们将自回归模型改成这种基于EncoderCDC+WFST解码的方法,先求解一部分识别结果,比如NBest,10best或者20best。在20best的基础上,我们将其送往DecordeRescore进行二次重评分,这样可以避免时序依赖,方便GPT并行计算或推理。除了经典的加速方式,我们还做了混合量化的方式,就是在深度学习前向推理的过程中,我们使用8Bit进行计算,但是在核心部分,比如金融函数,我们仍然使用16bit,主要是在速度和精度的方向我们会做一个适当的平衡。经过这些优化,整个推理速度还是比较快的。但是在我们实际上线的过程中,也发现了一些小问题,我觉得也算是一个套路。在语言模型层面,比如我们场景中有很多聊天的文字,但是也有唱歌的。我们需要同一个模型来解决说话和唱歌。在语言模型上,比如聊天文本,通常是比较零散和短小的,所以经过我们的实验,我们发现三元更好,但是五元并没有带来提升。但以唱歌为例,它的文字比较长,句子结构和语法也比较固定,所以在实验的时候,五块钱比三块钱好。在这种情况下,我们使用混合文法来建模聊天文本和唱歌文本的语言模型。采用的是“三元+五元”混合模式,但这种“三元+五元”混合并不是我们传统意义上的差异。我们没有做区别,而是把chating的三元语法拿来和四元的歌声和五元的语法直接合并。这样得到的arpa目前体积更小,在解码过程中速度更快,更重要的是内存占用也比较小。因为在GPU上解码时显存大小是固定的。因此,我们需要控制某种语言模型的大小,尽可能地通过语言模型来提高识别效果。经过声学模型和语言模型的一些优化和技巧,我们的推理速度也很快。实时率基本可以达到0.1和0.2的水平。虚拟仿真主要是通过生成语音、嘴型、表情、姿势等,帮助用户更无压力或更自然、更自由地表达自己。这背后的核心技术之一就是多模态语音合成。MultimodalSpeechSynthesis下图是目前使用的语音合成系统的基本框架。首先,我们会获取用户输入的文本,比如“2022全球人工智能大会”,然后我们将其发送给文本分析模块。这个模块主要是对文本进行各方面的分析,比如对文本进行正则化,以及一些分词,最重要的一点是自迁移,将文本转化为音素,还有韵律预测等一些功能。经过这个文本分析,我们可以获得用户句子的一些语言特征,这些特征将被发送到声学模型。声学模型目前主要是基于FastSpeech的框架对一些模型进行改进和训练。声学模型获取声学特征,如Mel特征,或时长或能量等信息,其特征流将分为两部分。一部分会送到声码器,声码器主要用来生成我们可以听的音频波形。另一个流向被发送到唇形预测。我们可以通过唇形预测模块来预测出口形状对应的BS系数。得到BS特征值后,我们将其发送给视频生成模块。这部分由视觉团队负责,可以生成虚拟头像,就是有嘴型和表情的虚拟形象。最后,我们将虚拟头像和音频结合起来,生成音视频动画。这就是我们整个多模态语音合成的基本框架和基本流程。多模态语音合成过程中存在的主要问题:语音库数据质量比较差。合成音质很差。音画延迟大,口型和声音不符合Soul。处理方法与改进后的端到端语音识别系统类似。数据预处理我们的音库资源比较多,左图是我们首先采集和录制的。第二,当然我们非常感谢开源数据公司,他们会开源一些音色库,我们也会用它们做一些实验。第三,我们平台上会有一些公司层面的营销宣传片。制作视频的时候,我们请了一些高素质的主播来制作,所以这里的音质也是非常优质的。第四,一些公网数据,比如在对话的过程中,有一些音质比较高,所以我们也会抓取一些,然后做一些预标注,主要是做一些内部实验和预训练。针对这些数据的复杂性,我们做了一些数据预处理,比如短句的拼接。如前所述,在收集过程中,句子可长可短。在切的过程中,我们会去除一些静默,如果静默过长,会有一些影响。二是去噪。比如在获取到的网络数据或者营销视频中,我们会通过一些语音增强的方法来去除噪声。第三,其实现在标注的大部分都是音译字,但是现在基本不使用音素边界作为标注,所以我们通常使用这种MFA强制对齐的方式来获取音素边界信息。然后下面的人声分离比较特别,因为我们营销视频里面有背景音乐,所以我们会做一个人声分离,去掉背景音乐,得到干声数据。我们还做了一些能量正则化和一些VAD。VAD主要是对话或网络数据。我用VAD来检测有效的人声,然后用它们来做预标注或者预训练。模型微创新在做FastSpeech的过程中,我们主要做了三个改变。左图左边是FastSpeech的基本模型。我们首先做了第一个改动,就是我们会把音素和声调解耦来建模,也就是一般情况下,你的文本前端转换音素序列,比如左边的图是一样的,“你好”的单调音素序列。但是我们会把它拆分成右边的部分,两部分,也就是左边的部分是音素序列,只有音素,没有声调。右边只有音调,没有音素。在这种情况下,我们将它们分别发送到一个ProNet(声音),并得到两个Embeddings。这两个Embeddings会被切到一起来代替之前的Embedding方式。这样的话,好处就是可以解决发音稀疏的问题,或者说有些发音不在我们的训练语料中,基本可以解决。我们改变的第二种方式是,原来的方式是先预测一个duration,也就是右边的图,然后我们根据这个duration扩展soundset,然后预测energy和pitch。现在我们改变了顺序。我们会根据音素级别来预测Pitch和Energy,然后我们会在预测之后将其扩展到一个帧级别的持续时间。这样做的好处是它的发音在整个音素的发音过程中都比较稳定,这是我们场景的一个变化。第三个是我们在Decoder部分,也就是最上面的部分。我们在Decoder部分进行了替换更改。原来Decoder中使用的是Attention方式,现在我们换成了Iconv或者Convolution方式。这个优势是因为Self-Attention可以捕捉到非常强大的历史信息和上下文信息,但是它的渐进建模能力比较差。所以切换到Convolution之后,我们处理这种局部建模的能力会更好。比如发音的时候,刚才说的哑音或者发音模糊基本就可以解决了。以下是我们目前正在进行的一些主要更改。共享声学模型左侧为合成口型,右侧为合成语音。它们在声学模型中共享一些编码器和持续时间信息。我们主要做了三个动作。第一个是我们实际上收集了一些高精度的数据。比如我们会找一些真人戴上一些高精度的传感器来驱动我们预测好的阿凡达图像,得到高分辨率的音视频,做一些标注。这样,就会得到一些文本、音频、视频之间同步的数据。第二个可能也提到我们如何解决音视频的一致性问题?因为我们先通过文本合成来合成声音,得到声音后,我们会做一个语音到嘴形的预测。在这个过程中,会出现帧级的不对称。我们目前通过这个合成的嘴型和合成的声音来分享声学模型,是在帧级序列扩展之后做的。目前可以保证在帧级别可以对齐,可以保证音视频的一致性。最后,我们目前没有基于序列的方法来预测嘴型或BS碱基。我们基于LSTM预测BS基础。预测出BS系数后,但可能预测出一些异常,我们还会做一些后处理,比如正则化。比如BS基过大或过小都会导致口型张开过大甚至变化过小。我们会设定一个范围不宜过大,会控制在一个合理的范围内。目前基本可以保证音画的一致性。未来展望一是多模态识别。在高噪声环境下,音频结合口型进行多模态识别,提高识别准确率。二是多模态语音合成和实时语音转换,可以保留用户的情感和风格特征,而只是将用户的音色转换为另一种音色。