TTS前端基础知识介绍一、TTS是什么1.1 TTS是什么1.2 都有哪些流程二、 前端流程2.1 前端组成部分2.1.1 什么是TN2.1.2 什么是G2P2.1.3 什么是PSP2.2 模型介绍2.2.1 BERT or TinyBERT2.2.2 Polyphone prediction layer2.2.3 Prosody prediction layer2.2.4 Mul-task2.2.5 distillation三、文章实验结果文章https://arxiv.org/pdf/2012.15404 介绍内容主要根据这批文章展开。一、TTS是什么1.1 TTS是什么TTS–Text To Speech释义语音合成是一种将文本转换为语音的技术。它通过分析输入的文本提取相关语音信息将其转换为相应的语音波形信号并输出语音。1.2 都有哪些流程当前我们把TTS实现分成两大部分前端后端前端由TNG2PPSP三部分组成TN 非中文符号转换处理。数字日期百分数加减法缩写等字符的转换处理。G2P字素-音素转换把文字转换成用于后端生成语音需要的发音单元–即音素单音字 音素转换多音字消歧PSP 韵律结构预测预测一个文本要在什么地方停顿。后端音素-声音波形转换例如输入文本有句谚语是“良好的开端是成功的一半”。经过TTS前端后端流程生成一条语音示例前端实现流程图二、 前端流程2.1 前端组成部分前端由TNG2PPSP三部分组成2.1.1 什么是TNTN 非中文符号转换处理。数字日期百分数加减符号缩写等字符的转换处理。原始文本1234 规范化文本一千二百三十四 or 一二三四 原始文本2023/06/27 规范化文本二零二三年六月二十七日 原始文本123.45 规范化文本一百二十三点四五元 原始文本75% 规范化文本百分之七十五 原始文本5kg 规范化文本五千克 原始文本138-0013-8000 规范化文本一三八零零一三八零零零 原始文本ABC 规范化文本ABC 原始文本你好世界 规范化文本你好,世界!2.1.2 什么是G2PG2Pgrapheme to phoneme 字素-音素转换把文字转换成用于后端生成语音的发音单元–即音素单音字直接查发音字典即可。多音字消歧需要根据语义预测多音字的发音概率取概率最大的发音。为什么要做多音字消歧例如下文“行”到底是读xing2 还是读hang2呢这就需要用到多音字消歧来确定到底是发哪一个音。人要是行干一行行一行一行行行行行。人要是不行干一行不行一行一行不行行行不行。2.1.3 什么是PSPPSP prosodic structure prediction 韵律结构预测预测一个文本应该在什么地方停顿。工程实现认为有五级韵律#0 #1 #2 #3 #4 韵律级别是指停顿时间的长短级别#0表示没有停顿#4表示停顿时间最长。一般的我们认为是有三级韵律 韵律词PW、韵律短语PPH、语调短语IPH。#0 #4是实际工程实现的时候添加的两个韵律停顿级别。eg良好的开端是成功的一半。- #0 字边界例如‘良’字边界 表示没有停顿- #1 PW prosodic word 韵律词 词边界 例如“良好”- #2 PPHprosodic phrase 韵律短语 短语边界 例如“良好的开端”- #3 IPH intonational phrase 语调短语 短句边界 例如“良好的开端是成功的一半”- #4 长句边界表示一句话的结束一般以句号、分号等作为结束标志。“良好的开端是成功的一半”为什么要做韵律结构预测为了让生成的语音更自然更能拟合人类的发音。因为正常人说话都有恰到好处的停顿。2.2 模型介绍2.2.1 BERT or TinyBERT预训练的中文BERT文本编码器用于编码原始文本。由Transformer块组成使用大量中文文本数据进行预训练能捕获丰富的中文语境和语义信息促进下游PSP G2P这两个NLP任务。当前系统用的tTinyBERT比BERT少了一些模型层和参数。BERT有12层transformer768个隐藏单元模型较大。Tinybert有6层transformer312个隐藏单元模型较小。2.2.2 Polyphone prediction layer线性层–多音字消歧预测层。对每一个多音字根据文本的上下文预测多音字所有发音的概率输出概率最大的作为发音音素输出单元是发音单元的个数。基于BERT丰富的上下文特征用一个线性层softmax去做多音字消歧预测用交叉熵对一个训练句子统计多音字损失并求损失平均值。2.2.3 Prosody prediction layer线性层–韵律结构预测层。对每一个字输出韵律等级概率。输出单元是韵律标签的个数【当前我们的模型标签是五级那么输出单元数就是5】。传统流程是做三级韵律首先预测一遍PW再此基础上再去预测PPH、IPH当前我们现有的流程是将韵律标签混合在一次预测中一次性预测出所有的韵律标签。#0 #1 #0 #1 #4 #0 #1 #1 #0 #2 #1 #0 #0 #1 #0 #42.2.4 Mul-task模型使用混合数据训练。多音字训练数据和韵律训练数据混合在一起输入到预训练的BERT编码器经过两个输出层–多音字消歧预测层韵律结构预测层分别对相应的数据做loss即每个句子只计算标记任务的损失其他损失置0。再对两个损失做加权计算一个全局损失。多音字训练数据宋代出现了▁le5▁燕乐音阶的记载2011年9月17日爆发了▁le5▁占领华尔街示威活动 韵律训练数据今天#1 天气 #1 怎么样 #3输入数据把发音和韵律整合成一个字典列表有多音字标记数据对韵律标签用IGNORE_ID占位符代替有韵律标记数据对多音字内容IGNORE_ID占位符代替计算loss的时候IGNORE_ID就会被剔除掉这样就实现了只计算标记任务的损失IGNORE_ID-100{sentence:tokens,phones:all_phones,prosody:[IGNORE_ID]* len(all_phones)}{sentence:tokens,phones:[IGNORE_ID]* len(prosody),prosody:prosody}2.2.5 distillationBERT模型训练完成后需要做蒸馏压缩为什么要做精馏压缩 BERT训练出来的模型计算量、存储量都特别大无法在实时应用和边缘设备中使用。需要对BERT模型– TinyBERT模型做蒸馏压缩。三、文章实验结果文章实验结果多音字消歧测试结果BERT-polyphone表现最好![韵律结构测试集预测结果BERT-prosody测试效果最好压缩后的TinyBERT-MTL的大小约为基准测试的25% 利于在移动设备上部署。