语音合成技术已经成熟的应用于各种实际场景中,大部分问题可以通过TTS解决,但是有些问题,在具体的场景中,总会出现一些合成音频播报时的错误,所以在设计语音合成产品时,应该怎么样避免这些问题,以及用怎样的方式进行优化。以下将根据实际问题分析具体的解决方案。
1. 数字播报问题
我们遇到比较多的是数字播报的问题,数字有很多不同的播报方式,可以按照数目读法,例如,1234可以读作“一千二百三十四”,也可以按照数字串的读法,读作“一二三四”,以及电报读法“幺两三四”,所以不同的场景有不同的读法,需要在当前场景设置具体的读法方式,具体方式如下:
1) 读法规则设置
在TTS中,有些读法是可以添加的读法规则中的,例如:“请问您是尾号为4321的机主吗?”可以添加“尾号为+数字”的读法规则,让数字按照数字串的方式播报。还有“数字+元”“数字+美元”等,这种就按照数目读法的方式播报。所以在生活场景有一些场景的读法是唯一的,可以通过设置读法规则的方式,使得在TTS播报的时候播报正确。
2) 修改文本的方式
在一些场景中,会出现TTS播报错误的情况,例如,“请您来一下205会议室”,有时候会播报成“二百零五会议室”,这时候可以在文本的数字前面加一个标点来规定读法,比如 “!+数字”,就按照数字串的方式播报数字。“请您来一下!205会议室”,则可以播报为“二零五会议室”;“*+数字”的规则就按照数目读法来播报,“我住在*20层”,则播报为“二十层”。所以根据符号+数字的方式来确保数字的读法,在实际应用场景中,如果某些数字播报方式错误,则可以通过修改文本添加符号的方式解决问题,这种方式也相对比较简单。
3) 标记语言的方式
语音合成标记语言(SSML:Speech Synthesis Markup Language),它是W3C的语音接口框架的一部分,是关于语音应用和在万维网上构建语音应用的一套规范,通过SSML,人们可以更多的通过移动电话、桌面计算机和其他设备来聆听合成语音。通过标记语言可以设置数字的读法,然后将xml格式的标记语言文本传入给TTS,合成相应的音频。
下面是ssml的语法图
4) 加词表
有些使用场景修改文本内容不太方便,例如用户写的地址信息,然后直接传输给TTS进行语音合成,这种文本内容不能进行添加修改,需要在文本上传之后修改播报的音频,在前一篇文章讲到过语言分析部分,在文本转音素时,可以检测出对应的文本内容,文本的音频强制转换为需要正确播报的拼音,设置成想要合成的播报音,这样可以使音频播报正确且不需要修改文本。但是这样在每次合成的时候都会按照这种设置好的规则合成,所以在设置的时候尽量确保文本的唯一性,可以用“文本+数字+文本”的形式,这样其他场景用到同样的数字时,不会受到此次设置的影响。
如下列出了在实际应该场景中,数字会出现的一些播报方式。
数目读法
数字串读法
地址
2. 多音字问题
在汉语中,多音字和数字的读法一样,有多种播报读法,这时候也需要一些优化的方式设置,使其在特定的场景下按照特定的读音去读,确保能正确的播报。优化的方式和数字的优化方式基本是一致的,可以通过设置读法规则,修改文本,标记语言,加词表的方式。通过组合这几种方式,可以避免常见的播报读法的问题。在产品设计的时候,需要支持这几种优化方式,且操作简单,用户可以自行操作,完成TTS的优化。
如下列出多音字姓氏列表,姓氏可以用特定的规则或者用添加标点的形式,确保其正确的播报。
3. 小结
简单介绍了一些播报错误的优化方式,还有一些韵律也可以用上面提到的优化方式进行优化,例如停顿,重读等一些节奏韵律的变化,可以用加标点的方式,标记语言的方式实现。也可以通过算法优化,但是算法优化时间久,难度大。所以可以在产品设计的时候加一些可以优化的功能,这样可以规避掉一些播报错误,也不需要从底层算法在进行优化,用户易操作,提高用户体验。