前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生动化你的表达——DuerOS中的SSML应用

生动化你的表达——DuerOS中的SSML应用

作者头像
半吊子全栈工匠
发布2019-04-25 15:18:57
2.5K0
发布2019-04-25 15:18:57
举报
文章被收录于专栏:喔家ArchiSelf喔家ArchiSelf

在对话式AI系统中,语音交互是主要的输入输出方式。对语音输出而言,有两种主要的方法,一种是事先制作好音频,然后根据用户的请求,播放音频;另一种是通过语音合成中的TTS技术,将文本转化为语音。在很多情况下,制作的音频往往要比语音合成的用户体验要好,因为人的声音中有更多的“色彩”,语音语调中可以有更多的情绪。

但是,预先制作的工作量往往较大,而且由于预制的确定性,导致输出内容的动态性较弱。按需定制,动态输出正是TTS的强大之处。那么,如何让TTS的表达更加生动呢?在对话式AI系统DuerOS中, 内容的生动化表达是通过SSML 实现的。

什么是SSML

SSML是一种标准的,基于XML的标记语言,使用这些标识来命令语音合成器/服务把文本(输入)转化成可读的输出结果。简单来说,就是把带有一定文字标识格式的文本语言转化语音输出结果。

SSML设计的最初目的就是为了帮助开发人员提高合成结果的内容,通过格式化和标准化的标记方式来控制语音输出的各种属性,例如发音,音量等参数设置。因此,SSML设计的几个关键要素如下:

  • 一致性:提供可预测的语音输出控制,支持不同的语音合成服务部署
  • 兼容性:支持W3C的标准,包括但不仅限于VoiceXML,ACSS和 SMIL
  • 通用性:支持各种语音内容
  • 国际化:支持各种语言的语音输出
  • 自动化和可读性:支持自动化生成和手写文本格式,支持良好的可读性
  • 可部署性:能够支持目前现有的技术,尽量减少可选功能数量。

SSML 的工作原理

支持SSML的TTS系统(语音合成处理器)将负责将文档呈现为语音输出,并使用标记中包含的信息按照预期以音频形式呈现文档,主要原理如下:

1)XML解析:XML解析器用于从传入的文本文档中提取文档树和内容。此步骤中获得的结构、标记和属性会影响以下每个步骤。

2)结构分析:文档的结构会影响文档的阅读方式。例如,有一些常见的与段落和句子相关的口语模式。

3)文本规范化:所有书面语言都有特殊的结构,需要将书面形式转换为口语形式。文本规范化是执行此转换的合成处理器的自动过程。例如,当文档中出现“$200”时,可以将其称为“200美元”。到这一步结束时,要说的文本已经完全转换为token,token的具体构成细节是特定于语言的。标记通常用空格分隔,通常是单词。 一般地,SSML中的标记不能跨越其他的标记。

4)文本到音位的转换: 一旦语音合成处理器确定了要说的token集合,就必须为每个token派生发音。发音可以很方便地描述为音素序列,它是语言中用来区分一个词和另一个词的声音单位。每种语言都有一个特定的音位集。

5)韵律分析:韵律是语音输出的一组特征,包括音调(也称为语调或旋律)、时间(或节奏)、停顿、说话速度、对单词的强调和许多其他特征。韵律分析,对于使语言听起来自然,正确传达语音中的意义是非常重要的。

6)波形生成: 语音合成处理器利用音位和韵律信息生成音频波形。此处理步骤有许多方法,因此可能存在相当大的特定于处理器的变化。

SSML中的元素和属性示例

SSML是一种标记语言,所以必须具备一定的文件结构。所有的SSML文件都需要的Speak元素标签入口,更多关于SSML的语法格式,可以参考W3C官方文档,以下是关于SSML主要标签的说明。

SSML具有非常强大的功能支持,比较典型的功能就是录音文件播放功能。其具体的实现方式是通过一个<audio>元素标签提供的URL路径对语音文件进行播放。

下面是W3C规范中给出的一个示例:

代码语言:javascript
复制
<?xml version="1.0"?>
<speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                 http://www.w3.org/TR/speech-synthesis11/synthesis.xsd"
       xml:lang="en-US">
                 
  <!-- Empty element -->
  Please say your name after the tone.  <audio src="beep.wav"/>

  <!-- Container element with alternative text -->
  <audio src="prompt.au">What city do you want to fly from?</audio>
  <audio src="welcome.wav">
    <emphasis>Welcome</emphasis> to the Voice Portal.
  </audio>

</speak>

DuerOS中的SSML

在DuerOS的技能开发中,DuerOS会将技能返回的response消息里面的文本信息按照一定的规则转化成语音信息进行播放(可以参考面向接口/协议?看DuerOS的技能开发用JavaScript打造AI应用-从Nodejs SDK 看DuerOS的技能开发以及从Java SDK看DuerOS的技能开发)。转化后的语音有着与预期相同的特征,如语调、语速、停顿等都相同。

DuerOS支持基础标签和扩展标签两种。基础标签里的所有标签都是SSML标准标签,相当于SSML标签的子集。扩展标签指DuerOS使用标准SSML语言定制的标签。

基础标签

基础标签目前包括6种:

  • speak:根标签
  • audio:根据url合成已有音频
  • say-as:设置数字、符号等的读法
  • sub:替换目标单词
  • silence:设置静音,在文本播报的开头或者结尾增加静音片段,最大10s
  • phoneme:多音字注音

对于audio标签而言,音频以服务器可以访问的的地址给出,目前支持16K采样和24K采样,16bit,单声道,44字节头的wave格式文件。出于性能的约束,要求必须将相应的音频文件上传到百度云bos平台,使用bos提供的地址。单个请求最大限制3个并列的audio资源,单个audio资源大小限制为3M。

使用前需要前把音频转换为支持的格式,推荐使用ffmpeg。命令参考如下:

代码语言:javascript
复制
ffmpeg -i <input-file> -acodec pcm_s16le -b:a 16k -ar 16000 -ac 1 -flags bitexact <output-file.wav>

audio标签支持单标签和双标签,如果是双标签的话,当音频无法访问时,将合成嵌套文本。

扩展标签

扩展标签目前包括4种:

  • background:设置背景声
  • say-as: 在属性interpret-as加入两个新值,仅对英文有效
  • poem:设置诗词,属性值 “wuyan”代表五言诗;“qiyan”代表七言诗;“songci”代表宋词
  • space: 在所包含文本的空格处生成停顿

其中background标签与audio 标签具有类似的性质,要求必须将相应的音频文件上传到百度云bos平台,使用bos提供的资源url地址。

使用约束

DuerOS 中的SSML实现是W3C规范的一个子集,是应用过程中有着如下的约束:

  • audio标签不支持嵌套audio/background(内层标签不生效);
  • background/标签不支持嵌套自身,内层标签不生效;
  • sub/say-as标签不支持嵌套其他任何标签,会引发解析错误,导致标签按字母朗读;
  • 非汉字文本内部出现标签影响语义转换,建议使用汉字形式请求;
  • &和<符号在XML中为非法字符,使用前需进行转义操作,分别为&和<,另外,>(>)、”(")、’(')也建议使用前进行转义
  • 请求文本总长度(不包含SSML标签)应少于1024字节

需要注意的是,文本的长度是按照GBK编码计算的,文本的内容是UTF8编码,在不使用SSML 的时候,文本长度可达4k。

小结

了解SSML的基本原理和元素属性,可以让我们在对话式AI系统中充分地利用TTS技术来提高用户体验。

需要指出的是,这里给出的只是当前DuerOS 平台对SSML的支持状态。随着产品的演进和技术的发展,DuerOS 对SSML的支持将会越来约完善,越来越丰富,语音交互必将越来越生动。

参考资料:
  • https://dueros.baidu.com/dbp
  • https://www.w3.org/TR/speech-synthesis/
  • https://www.wisegeek.com/what-is-ssml.htm
  • www.ssml.org
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 喔家ArchiSelf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是SSML
  • SSML 的工作原理
  • SSML中的元素和属性示例
  • DuerOS中的SSML
    • 基础标签
      • 扩展标签
        • 使用约束
        • 小结
        相关产品与服务
        语音合成
        语音合成(Text To Speech,TTS)满足将文本转化成拟人化语音的需求,打通人机交互闭环。提供多场景、多语言的音色选择,支持 SSML 标记语言,支持自定义音量、语速等参数,让发音更专业、更符合场景需求。语音合成广泛适用于智能客服、有声阅读、新闻播报、人机交互等业务场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档