XML在语音中的应用(二)

xml

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 
在这一部分中让我们来看一看语音方面现有的XML标准化进程。

W3C在语音浏览上所作的工作

作为一个权威的标准化组织,W3C和早就看上了语音浏览(Voice Browser)。W3C于1998年的10月份成立了一个名为“语音浏览器”的工作站。大家在这里可以联想一下,XML是最早于1996年底被提上议案的。工作站的目标非常明确,制定语音浏览方面的标准,迎接即将来临的语音浏览热潮。工作站的工作主要基于以下一些方面,我们还要在后面对其中的部分工作放大研究。

语音标识语言对于对话的需求说明

简单的说,为了语音浏览器能够方便的结合不同的输入输出形式,和谐的同用户交互“对话”,需要对用来表示对话数据的标识语言进行限制。可以想象,用于表现平面网页的HTML就不能胜任语音浏览器。不但是因为它繁杂混乱,而且它的二维性质也使得它不能表示交互式的对话。

标识语言当中对可重复使用对话的要求说明

好比高级程序语言编程一样,有一些小的模块会是被经常重复使用的。这些小的模块被设计成为函数或是过程,每当要用的时候就调用一次。在语音浏览器使用的标识语言当中需要有这样的类似机制,用来表示那些经常会被重复使用的部分。这一点可以在后面的文章中具体的体会到。经常会被重复使用的部分包括简单的确认、收集电话号码、日期、金额、信用卡信息和地址的信息等。

标识语言当中语音识别语法层表示的需求说明

前面我们已经提到过语音浏览器的实现和语音技术的应用密不可分。为了实现语音数据的识别输入,语音浏览器会用到现成的语音识别平台。不同的语音识别方法有着不同的平台要求。如果只是独立人的小词汇量识别,我们还可能不需花费太多的时间在识别之上。但只要要求一旦稍微放松一点,语音识别的难度一下子就会变得很高。对于非独立人的小词汇量、带语法结构的语音识别,就需要在语音识别平台的接口上对带识别的语音输入语法结构做出具体的描述。而这种情况是现在一般的语音浏览器所遇到的最普遍情况。W3C在这里定义了一套这样的语法标识表示。

标识语言中对自然语言处理的需求说明

这其实就是前面我们已经提到的语音理解方面的问题。这同上面的一点一样,和语音技术密切相关。定义了对于自然语言理解在语音浏览器实现当中的标识表示需求说明。

标识语言中对语音合成的需求说明

为了实现语音的输出,人们必须要用到语音合成。简单的把事先录制好的声音拼凑起来回放也可以视为语音合成中的一种。而实际当中用的更多的还是TTS(Text To Speech)。怎样表示要合成的语句呢?不同的语音平台有着不同的方法。W3C正是在抽象出这些特征的共性。比如说一句话中的某一个词要重读,某一句话是男声发音。通过标识语言,我们就可以统一的描述一段待合成的文字。

下面我们将对一些W3C的部分工作放大研究。

语音合成

前面我们已经谈到了一些语音合成的问题。当语音浏览器需要将输出的结果由字符变成自然语音时,我们必须时间把语音读本的一些语言特征事先标示出来提供给语音合成器。语音浏览器中这是用XML语言来实现的。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
图1

如上图1所示文字数据从语音浏览器的前段处理得到后,被一种转换机制变成标识语言。这里的转换机制其实就是代码的开销。符合语音合成器的标识语言被送入特定的语音合成器当中,最终用户就可以听到自然语音了。

图2

请注意,这里图1示的语音合成方式并不是唯一的。还有简单的方法是把文字数据非拆成一些经常会被重复使用的短语段,然后通过匹配的方法读取事先录制好的语音段,拼合成为一段自然语音。见图2。但这种方法的缺点解释非常明显的。首先是对文字数据的范围限制很大,一定实效词汇量的,并且有着固定的句式。其次人工录制的开销较大,并且随着文字数据范围的扩大,开销成倍的扩大。最后,这种方法合成的自然语音并不自然。

由于不同的公司有着不同的语音应用平台,所以在从前语音合成的标识语言并不统一。但好在的是由于语音合成技术本身存在的一致性,这些不同的标识语言所标示的语音特征大同小异。差别只是在一些标识的表示方法不同之上。

下面让我们来看一下几种主要的语音合成标识语言。

1 JSML(Java Speech Markup Language)

JSML顾名思义是用来将文字输入Java语音API合成器之用的标识语言。JSML包含了被合成文字的自然语音属性。而且它使用的是Unicode字符集,所以它适用于几乎所有的语言。

例子:
<?XML version="1.0" encoding="gb2312 "?>
<JSML>
<<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />PARA> 你一共欠了我
<EMP>
<SAYAS CLASS="number">10000元</SAYAS>
</EMP>
</PARA>
<PARA>
<EMP>
<SAYAS CLASS="literal">太夸张了</SAYAS>
</EMP>
</PARA>
</JSML>

我们不会在这里详细的介绍JSML的标识的含义,因为我们将比较详细的介绍W3C的标准。我们可以从例子当中看到这是一段对话。<PARA>表示的是这是一段话。<EMP>表示重读。<EMP>的属性LEVEL还可以设定重读的分量,上面的例子当中并没有体现。<SAYAS>用来标记文字读出的方式。具体的方式是由它的特定属性设定的。比如上面的CLASS="number"表示按照数字大方式读。CLASS="literal"表示按照分离的方式读,也就是“太夸张了”。

2 SABLE

同上面一样我们也通过一个例子来了解它。

例子:
<DIV TYPE="paragraph">这就是去年
<EMPH>你</EMPH>
为我
<PITCH BASE="high" RANGE="large">
<RATE SPEED="-20%">点的歌</RATE>
</PITCH>
</DIV>
<AUDIO SRC="easycome_easygo.wav"/>

从大体上说SABLE和JSML非常相似。我只挑出比较特别的几个标识来解释一下。<PITCH>是对音调的要求。<RATE>是对语速的要求。<AUDIO>表明的是一段以录制好的语音段。

支持SABLE典型的有Festival语音合成系统。Festival是由英国Edinburgh大学语音技术研究中心(Center for Speech Technology Research)开发的多语种语音合成系统。对于从事语音研究的人来说,CSTR值得好好钻研。因为它不但有像Festival这样的成熟语音合成系统,还有一套开放源代码的语音识别平台软件包。

下面那就让我们来看一看W3C在语音合成标识语言上的标准。

和前面所提到的两种语言一样,W3C把它所规定的标识和属性分为了三类。一类是表示语言组织结构的表识,一类是表示语音特征上的表识,还有一类是对上面两类的补充,一般是为可能的扩充留有余地。

我们将以表格的形式来介绍这些标识和属性。

下面是第一层的标识:


文件结构

文本处理

发音音素


speak


根节点


xml:lang


根节点中表示语种的属性


paragraph和sentence


表示段落和局字的结构节点


sayas


定义文本的预处理格式,属性为:type


phoneme


定义文本的发音方法,属性为:ph


发音韵律


voice


表示不同发音方法的节点


emphasis


重音发音节点


break


表示暂顿的空节点


prosody


控制语音语素语调的节点


其他


audio


表示加入预先录好语音段的节点


mark


表示异步合成当中的一个标记

针对一些结构选项复杂的节点,我们再来仔细的看一看:

"sayas" 节点type属性可选项值:


发音


acronym


首字母缩写的合成词。按单个字母分别读出。


sub("sayas" 节点的属性)


值为节点值的替换。在后面列出的DTD当中并没有声明。


数字


number


值为节点值的数字形式。可选的值有ordinal、digits等:


时间、量度


date


日期控制格式


time


时刻控制格式


duration


时间间隔长度设定


currency


金额控制格式


measure


表示文本为量度


地址、标识


name


人或是公司的名称


net


网络地址。可以是电子邮件或是网址


address


邮政地址

"voice" 节点属性值:


gender


发声者性别


age:


发声者年龄范围


variant


发声者不同的发声。(可选,针对于平台的变量)


name


针对于平台的发声标识。(可以看作是发声者的名字)

"break" 节点属性值:


size


对中断边沿大小的设定


time


对中断时间长度量化设定

"prosody" 属性属性值:


pitch


基音调设定


contour


基音调轮廓设定


range


基音变化范围设定


rate


语速


duration


发音时间长度设定


volume


发音银两大小设定

下面是W3C 设定的语音合成标识语言的DTD:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Speech Synthesis Markup Language v0.5 20000504 -->
<!ENTITY % allowed-within-sentence " #PCDATA | sayas | phoneme |voice | emphasis | break | prosody | audio | value | mark " >

<!ENTITY % structure "paragraph | p | sentence | s">
<!ENTITY % duration "CDATA">
<!ENTITY % integer "CDATA" >
<!ENTITY % uri "CDATA" >
<!ENTITY % phoneme-string "CDATA" >
<!ENTITY % phoneme-alphabet "CDATA" >

<!-- Definitions of the structural elements. -->
<!-- Currently, these elements support only the xml:lang attribute -->
<!ELEMENT speak (%allowed-within-sentence; | %structure;)*>
<!ELEMENT paragraph (%allowed-within-sentence; | sentence | s)*>
<!ELEMENT sentence (%allowed-within-sentence;)*>

<!-- The flexible container elements can occur within paragraph -->
<!-- and sentence but may also contain these structural elements. -->
<!ENTITY % voice-name "CDATA">
<!ELEMENT voice (%allowed-within-sentence; | %structure;)*>
<!ATTLIST voice gender (male|female|neutral) #IMPLIED
age (%integer;|child|teenager|adult|elder) #IMPLIED
variant (%integer;|different) #IMPLIED
name (%voice-name;|default) #IMPLIED >

<!ELEMENT prosody (%allowed-within-sentence; | %structure;)*>
<!ATTLIST prosody
pitch CDATA #IMPLIED
contour CDATA #IMPLIED
range CDATA #IMPLIED
rate CDATA #IMPLIED
duration CDATA #IMPLIED
volume CDATA #IMPLIED >

<!ELEMENT audio (%allowed-within-sentence; | %structure;)*>
<!ATTLIST audio
src %uri; #IMPLIED >

<!-- These basic container elements can contain any of the -->
<!-- within-sentence elements, but neither sentence or paragraph. -->
<!ELEMENT emphasis (%allowed-within-sentence;)*>
<!ATTLIST emphasis level (strong|moderate|none|reduced) 'moderate' >

<!-- These basic container elements can contain only data -->
<!ENTITY % sayas-types "(acronym|number|ordinal|digits|telephone|date|time| duration|currency|measure|name|net|address)">
<!ELEMENT sayas (#PCDATA)>
<!ATTLIST sayas
type %sayas-types; #REQUIRED >
<!ELEMENT phoneme (#PCDATA)>
<!ATTLIST phoneme ph %phoneme-string; #REQUIRED
alphabet %phoneme-alphabet; #IMPLIED >

<!-- Definitions of the basic empty elements -->
<!ELEMENT break EMPTY>
<!ATTLIST break size (large|medium|small|none) 'medium'
time %duration; #IMPLIED >

<!ELEMENT mark EMPTY>
<!ATTLIST mark name CDATA #REQUIRED >

语音对话
所谓语音对话就是语音浏览器的对话控制部分。它是整个语音浏览器的主要“食物”。VoiceXML其实就是典型的语音浏览对话控制语言。编写VoiceXML非常类似在编写一段程序,而不像HTML那样纯粹是信息的堆砌。

因为要考虑到语音浏览器的特殊浏览方式,对于语音对话控制部分的标识语言的设计就显得特别的困难。W3C也只是对它的需求进行了说明,然后又认证由工业界提交的现成版本。因为我们将在后面详细介绍VoiceXML的结构,所以我们只在这一小节中对W3C的需求说明进行简单的介绍。

总的来看,需求说明阐明了四个大方面的需求:

形态需求:这主要是对浏览器输入输出以及中间过程上的数据形态的规定。
功能需求:这主要是对可支持的对话发式的定义。针对语音浏览会最常用到的对话方式,规定了一些语音对话标识语言必须实现的对话功能。

格式需求:在标识语言的书写格式上也有一些要求。比方是对可重复使用的常用单元的支持等。

其他方面就非常空泛了。包括触发事件句柄、语音浏览的用户制和语音用户的认证。

 

时间: 2024-08-03 00:31:28

XML在语音中的应用(二)的相关文章

XML在语音中的应用

xml|语音 随着XML在工业界被广泛的采用,在不同的领域不同的行业,各自派生出了一些在一些特定领域适用的XML子集.在这一系列文章中中将要主要介绍的VoiceXML就是其中之一.它和WML的地位非常相似.WML是应用于无线上网中的特种语言,VoiceXML是应用于语音浏览的特种语言.无线上网(WAP)和语音浏览是现在网络发展的两大热点,XML在它们身上都找到了用武之地. 整篇文章将比较介绍XML在语音中应用的一些重要环节.除了VoiceXML之外,还会介绍一些XML在语音技术中应用的其他方面.

XML在语音中的应用(一)

xml <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  随着XML在工业界被广泛的采用,在不同的领域不同的行业,各自派生出了一些在一些特定领域适用的XML子集.在这一系列文章中中将要主要介绍的VoiceXML就是其中之一.它和WML的地位非常相似.WML是应用于无线上网中的特种语言,VoiceXML是应用于语音浏览的特种语言.无线上网(WAP)和语音浏览是现在网络发展

设计-Android studio 在XML布局文件中编辑好代码,为什么Design界面创建的控件会重叠?

问题描述 Android studio 在XML布局文件中编辑好代码,为什么Design界面创建的控件会重叠? 新手表示每次都要在Design界面一个一个拖来调整位置,但看教程上并不需要拖.求各位指点~ 解决方案 应该 是因为你在xml并没有排列好控件的布局,重叠很有可能是你把控件都放在了relativelayout里,relativelayout需要手动设置控件的位置 解决方案二: 尽量不要采取拖动方式,使用代码控制会比较好 解决方案三: 默认是相对布局 相对布局的控件式会重叠的

jdbc-SpringMVC结构有没有可能在不基于XML的方式中与数据库发生交互?

问题描述 SpringMVC结构有没有可能在不基于XML的方式中与数据库发生交互? 小弟之前使用Sping框架的时候SQL语言都是写在XML中的,如: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dt

xml-为什么不能将XML数据岛中的内容在HTML页面中显示?

问题描述 为什么不能将XML数据岛中的内容在HTML页面中显示? 下面是country.xml <?xml version="1.0" encoding="gb2312"?> <country> <provice id="0001"> <provice_name>浙江</provice_name> <provice_city>杭州</provice_city> &

内容营销中的“内容”二字到底有什么内涵?

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 内容营销是一个既熟悉又陌生的概念,熟悉是因为经常可以看到这个概念,陌生是因为很多人还不知道怎么去定义它.其中,"内容"二字是最耐人寻味的,也是最让人吃不透的.搞懂了内容营销中的"内容"二字,你就不会把内容营销这个概念当做"最熟悉的陌生人"了. 内容营销中的内容,说得简单一点就是有价值

XML在金融行业中应用的问题分析

xml|问题 导读-- XML以其开放.自描述.向前兼容的特性逐渐成为数据交换的事实标准,并将触角伸展到金融行业的不同领域,尽管道路不是很平坦,颇有些泥泞.   XML以其开放.自描述.向前兼容的特性逐渐成为数据交换的事实标准,并将触角伸展到金融行业的不同领域,尽管道路不是很平坦,颇有些泥泞,但XML在金融业的应用依然向前. 渐行渐近的行业标准 目前,针对不同的金融应用领域已经出现了几种不同的XML 格式.如Interactive Financial Exchange (IFX)和 Open F

XML在电子商务中的应用

xml|电子商务   电子商务的发展 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 最早的电子商务是传统的EDI(Electronic Data Interchange,电子数据交换).20世纪60年代末,欧洲和美国几乎同时提出了EDI的概念.早期的EDI是在两个商业伙伴之间依靠计算机之间直接通信完成的,70年代,数字通信技术的发展大大加快了EDI技术的成熟和应用范围

微软面试题解析:求一个矩阵中最大的二维矩阵(元素和最大)

题目:求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码 分析: 直接遍历二维数组,求出最大的二维数组就OK了 实现如下: #include<iostream> using namespace std; int max_matrix(int (*array)[5], int maxx, int maxy, int& posi, int