每个强(wan)铁(nian)直(dan)男(shen)都梦想能遇到电影里的机器人女友萨曼莎♂下班回家的路上。虽然“只闻其声不见其人”,但光是听声音就能感受到各种情绪的演绎。萨曼莎背后的真实声音来自斯嘉丽约翰逊。有人说:“光是听声音,就足以满足我对她的所有幻想。”可以说,声音对于消除人与机器之间的隔阂,拉近人与机器之间的距离至关重要。在现实生活中,AI语音助手与我们理想中的声音相去甚远。为什么你的机器人女友说话不像斯嘉丽约翰逊?今天,RokidA-Lab语音合成算法工程师郑杰文就从语音合成技术入手,分析其中的原因。下面,EnjoyTTS背后的技术原理——前后端系统让语音助手说话的技术叫做TTS(text-to-speech),即语音合成。AI领域的科学家和工程师们一直在努力打造自然、真实、悦耳的TTS。但在前进的过程中,总会遇到各种“拦路虎”。这些是什么?让我们从TTS的基本原理开始。TTS技术从本质上解决了“文本到语音”的问题,机器可以通过语音来说话。图1语音合成,一个将文本转换为语音的问题但是这个过程并不容易。为了降低机器理解的难度,科学家将这个转换过程拆分为两部分——前端系统和后端系统。图2TTS前端的前端和后端负责将输入的文本转换为中间结果,然后将中间结果发送给后端,后端产生声音。接下来,我们先来了解一下前后端系统是如何协同工作的?生成“语言规范”的前端系统需要学习拼音,才能让我们小时候认字。有了拼音,我们可以用它来学习拼写我们不认识的单词。对于TTS,前端系统从文本转换出来的中间结果就像是拼音。但是,光有拼音是不够的,因为我们要朗读的不是一个词,而是一个句子。一个人如果不能正确地运用语调和语调来控制说话的节奏,就会让人感到不舒服,甚至会误解说话者想要传达的意思。所以前端也需要加入这种韵律信息,告诉后端如何正确“说话”。我们称这种有节奏的信息节奏(Prosody)。韵律是一个非常全面的信息。为了简化问题,将prosody分解为停顿、重读等信息。pause是告诉后端在读一个句子时如何停止,rereading是在朗读时强调那部分。所有这些信息综合在一起,我们可以称之为“语言规范”。图3.前端通过生成“语言书籍规范”告诉后端我们要合成什么样的内容。前端就像一个语言学家,通过各种方式分析给它的纯文本,然后向后端发出规范,告诉后端应该合成什么样的声音。在实际系统中,为了让机器能够正确说话,这个“规范”远比我们这里描述的要复杂。扮演“发音者”角色的后台系统后台系统拿到“语言规范”后,目标就是生成尽可能符合规范的语音。当然,机器不可能凭空直接发出声音。在此之前,我们还需要在录音棚里录制几小时到几十小时的音频数据(根据技术的不同,使用的数据量也会不同),然后用这些数据来制作后台系统。目前主流的后台系统有两种方式:一种是基于波形拼接,一种是基于参数生成。波形拼接的方法很简单:就是把预先录好的音频存到电脑上。当我们要合成声音的时候,我们可以根据前端下发的“规格书”从音频中找到那些音频。将最符合规范的音频片段,再将片段一个一个拼接,最终形成最终的合成语音。例如:如果我们要合成句子“你真漂亮”,我们会从数据库中搜索“你、真、好、看”这四个词的音频片段,然后将这四个片段拼接在一起。图4使用拼接法合成《你真美》当然,实际的拼接并不是那么简单。首先要选择拼接单元的粒度,在选择粒度时需要设计拼接代价函数。参数生成法和波形拼接法的原理有很大不同。使用参数生成方式的系统直接使用数学方法,先从音频中总结出音频最明显的特征,然后使用学习算法学习如何将前端语言学规范中的书籍映射到这些的转换器音频功能。一旦我们有了这个从语言规范到音频特征的转换器,在合成“youlooksogood”这四个词时,我们首先使用这个转换器来转换音频特征,然后使用另一个组件,将这些音频特征还原成我们可以听到的声音.在专业领域,这种转换器被称为“声学模型”,将声音特性转换成声音的元件被称为“声码器”。为什么你的AI语音助手不像人一样说话?如果这个问题有一个简单的答案,主要有两个原因:你的人工智能会出错。为了合成声音,人工智能需要做出一系列决定。这些决定一旦出错,就会导致最终合成的声音出现问题,机械感强,听起来不自然。TTS的前端系统和后端系统都有出错的可能。在使用AI合成声音时,工程师将问题过于简单化,导致对声音生成过程的描述不准确。一方面,这种简化源于我们自身对语言和人类语音生成的理解不足;另一方面,也源于商用语音合成系统运行时对成本控制的考虑。下面说说导致AI语音助手说话不自然的前端错误和后端错误。前端错误前端系统作为语言学家来说,是整个TTS系统中最复杂的部分。为了从明文中生成最终的“语言规范”,语言学家所做的比我们想象的要多得多。图5典型的前端处理流程典型的前端处理流程是:文本结构分析我们向系统输入一段文本,系统首先要判断文本的语言,只有知道语言才知道如何处理下一个。然后把课文一个一个地分成句子。这些句子被发送到以下模块进行处理。文本正则化在中文场景中,文本正则化的目的是将非汉字的标点或数字转换为汉字。例如“本次操作是666”,系统需要将“666”转换为“666”。文字转音位就是把文字转成拼音。由于汉语多音字的存在,我们无法通过查新华字典直接找到一个词的读音。我们必须使用其他辅助信息和一些算法来做出正确的决定。如何阅读它。这个辅助信息包括分词和每个词的词性。韵律预测用于确定阅读句子时的节奏,即语调。但是一般的简化系统只预测句子中的停顿信息。即读完一个词后是否停顿,停顿多长时间。从以上四步可以看出,任何一步都可能出错。一旦出错,生成的语言规范就会出错,进而导致后端合成的声音出错。对于一个TTS系统,典型的前端错误如下:1.文本正则化错误由于我们的书写形式和阅读形式不同,所以在前端的最早期阶段,我们需要将书写形式转化为我们实际朗读的形式。这个过程在专业领域被称为“文本正则化”。比如我们前面说的“666”应该改成“666”。我们很容易感受到TTS系统中文本正则化的错误。比如下面这句话:“我花了666元,住进了房间号为666的房间。”(点击收听音频)我们知道前面的“666”应该读作“六百六六”,后面的“666”应该读作“六六六”。但是TTS系统容易出错,又如:“我认为有2-4%的把握比分是2-4。”两个“2-4”应该读成“二比四”,“二比四””,或者“二到四呢”?应该一眼就能看出怎么读才对。不过,对于前端系统来说,这又是一个难题。2.拼音错误语言深奥,要读对不是那么容易,其中一个比较难的问题是,面对多音字应该选哪个音读?比如这两句话:“我的头发又长了。”和“我的头发很长。”这里“long”中的“long”到底应该读二声“chang”还是四声“zhang”呢?当然,人们很容易选出正确答案。那么以下句子:一个人有能力,就可以为所欲为,为所欲为;如果他做不到,他可以做任何他想做的事。(点击收听音频)中间的“台词”,你可能需要稍微思考一下才能看懂。对AI来说更难。你可能会不时听到AI小助手在读和弦字符时出错的消息。这种错误很容易被你的耳朵捕捉到,你马上就会有一个印象:“这绝对不是真人在说话~”。当然,和弦字的错误只是注音错误的一种,还有其他的错误,比如轻声、二花音、调音等。总之,要让你的AI小助手准确无误地读出所有内容,并不容易.3.节奏错误上文提到,为了更准确地传达信息,人们在说一句话时需要有节奏感。如果一个人说话中间没有任何停顿,我们就很难听懂他说的话,甚至会觉得这个人很不礼貌。我们的科学家和工程师正在尽最大努力使TTS朗读更有节奏、更有礼貌。但在很多情况下,TTS的表现总是不尽如人意。这是因为语言变化太丰富了。根据不同的语境,甚至不同的场合,我们朗读的节奏也不尽相同。在韵律学中,最重要的是讨论句子的停顿节奏,因为停顿是正确阅读句子的基础。如果停顿错误,人耳很容易听到错误。比如这句话:“为你切换单人循环模式”。如果我们使用“|”表示暂停,那么正常人阅读的暂停节奏一般是这样的:“切换|单循环模式给你”。但如果你的AI助手带着如此奇异的节奏感说出“切换|为你切换单循环模式”,你的心可能会被压碎。后端失误说完前面的“经常出错的语言学家”,我们再来看看后端:这位根据“语言学家”给的“规格书”读稿的“发音者”。前面说到后端主要有两种方式:拼接方式和参数方式。现在苹果、亚马逊的AI助手Siri和Alexa都采用了波浪拼接的方法。在中国,大多数公司使用参数化方法。那么我们来看看参数方法可能出现的后端错误。后台系统收到前台给出的语言信息后,首先要做的是决定每个汉字应该读多长时间(甚至每个声母和韵母应该读多长时间)。这个决定发音长短的成分在专业领域被称为“时长模型”。有了这个时间信息,后端系统就可以通过我们前面提到的转换器(也称为声学模型)将这个语言规范转换成音频特征。然后使用另一个称为“声码器”的组件将这些音频特征还原为声音。从durationmodel到acousticmodel,再到vocoder,这里面的每一步都可能出错或者不能完美的生成我们想要的结果。在TTS系统中,典型的后端错误包括以下几种:1.时序模型错误在阅读一个句子时,每个单词的发音时间根据上下文不同而不同。TTS系统必须根据上下文决定哪些词应该读得更长一些,哪些词应该读得更短一些。一个典型的例子是模态粒子的读取。通常,这些语气词的发音比普通单词长,因为它们带有说话者的语气和情绪,比如这句话:“嗯……我认为他是对的。”(点击收听音频)这里“嗯”,在这个场景中,很明显需要拉长,用来表达一种“思前想后的判断”。但并不是所有的“嗯”都要这么长,比如这句话:“嗯?你刚才说什么?”这里的“嗯”代表疑问的语气,发音应该比上面那句“嗯”短很多。如果时长模型不能正确判断发音的时长,会给人一种不自然的感觉2.声学模型错误最主要的声学模型错误是训练后端“发音者”时没有看到的发音,声学模型的作用是学习各种“语音”对应的语音声学特征语言规范”来自训练声音库。如果合成遇到在训练过程中没有看到的语言表示,机器将不太可能输出正确的声学特征。一个常见的例子是二话音。原则上每个汉语拼音都有一个对应的二话音,但在实际使用中,有些二话音用得很少,所以在录制音库时,一般不会把所有的二话音都覆盖。ead,只保留最常见的。这时候就会出现一些孩子发音发不出来,或者发不好的现象。3.声码器错误声码器的种类很多,但比较传统和常见的声码器通常使用基频信息。那么什么是基频呢?基频是说话时声带振动的速度。这里有一个简单的方法来感受自己说话的基频:将除拇指外的其他四指按在喉咙上,然后开始随意自言自语。这时候你会感觉到喉咙在震动,震动的信息就是我们的基频信息。浊音伴有声带振动,没有声带振动产生的声音称为清音。辅音可以是浊音也可以是浊音,而元音通常是浊音。因此,合成语音中元音和浊辅音的位置应与基频相对应。如果我们前面提到的声学模型输出的基频出现偏差,那么声码器合成的声音听起来就会很奇怪。在后端训练“说话人”时,我们还需要通过算法计算出基频信息。不好的基频提取算法可能会导致基频丢失、倍频或半频现象。这些都会直接影响基频预测模型的效果。如果基频没有预测到应该是基频的地方,那么合成的声音听起来就会沙哑,对听感影响很大。一个好的声码器还需要处理基频和谐波之间的关系。如果高频谐波太明显,会在听感上造成嗡嗡声,机械感明显。总结在这篇文章中,我们介绍了TTS的基本原理,并分析了语音助手不能像真人一样说话的原因:TTS会在做出各种决定时出错,导致错误或阅读不自然。同时,为了让计算机合成声音,工程师们会将文字转语音的问题简单化,导致对声音生成过程的描述不准确。这种简化部分来自语音语言生成过程的认知限制,但也来自当前的计算工具。虽然这个领域有很多新的方法,尤其是利用深度学习(DeepLearning)的方法直接将文本转换为语音,并且已经展示了非常自然的声音,但是让你的AI助手完全像人类一样说话仍然是一个难题非常具有挑战性的工作。作者简介:本文作者郑洁文,英国爱丁堡大学人工智能硕士,师从国际知名语音合成专家SimonKing教授。目前在RokidALab担任语音合成算法工程师,负责语音合成引擎的架构设计和后端声学模型的开发。本文转载自雷锋网。如需转载,请在雷锋网官网申请授权。
