温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何分析DuerOS中的SSML应用

发布时间:2022-01-06 16:57:17 来源:亿速云 阅读:150 作者:柒染 栏目:大数据

这篇文章将为大家详细讲解有关如何分析DuerOS中的SSML应用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

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

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

什么是SSML

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

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

  • 一致性:提供可预测的语音输出控制,支持不同的语音合成服务部署

  • 兼容性:支持W3C的标准,包括但不仅限于VoiceXML,ACSS和 SMIL

  • 通用性:支持各种语音内容

  • 国际化:支持各种语言的语音输出

  • 自动化和可读性:支持自动化生成和手写文本格式,支持良好的可读性

  • 可部署性:能够支持目前现有的技术,尽量减少可选功能数量。

SSML 的工作原理

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

如何分析DuerOS中的SSML应用

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

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

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

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

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

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

SSML中的元素和属性示例

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

如何分析DuerOS中的SSML应用

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

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

<?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应用

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。命令参考如下:

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。

关于如何分析DuerOS中的SSML应用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI