| 第六节 Mapping Semantic Interpretation Results to VoiceXML forms | |
| |
| SRGS语法返回的语义解释必须映射到一个或多个VoiceXML ECMAScript变量中。映射form级别和field级别的语义解释的方法有少许不同,不同之处见下一节。使用推荐的NLSML(Natural Language Semantics Markup Language)或SISR类似ECMAScipt的输出的语义解释格式对本次讨论没有任何影响。为了本次讨论方便,我们假定识别器返回的实际的识别结果在application.lastresult$.interpretation中被完整的映射成类似ECMAScript格式(见5.1.5节)。 |
|
| 有可能语法被匹配了,但没有返回一个语义解释。在这种情况下,平台将使用该短语的原始文本串作为语义结果。否则,就认为该语义解释由一个简单的值组成来处理。 |
|
| 每个input item都由一个相应的slot名(只可能出现在<field>元素中),用于提取完整的语义解释中大的相应部分。如果有指定slot属性的话,slot名就是该slot属性的值。否则slot名为该input item的name属性的值。如果name和slot属性都没有指定,则该slot名为undefined。 |
|
| Slot名用于在FIA的处理阶段确定一个input item是否被匹配了。当该slot名和语义结果顶层的属性一样时,或slot名用于选定一个子属性时,即为该input item匹配。语义结果中值为undefined(ECMAScript的undefined)的属性即为不匹配。同样的值为undefined的slot名也为不匹配。3,1,6,3节给出了例子。 |
|
| 下一小节谈论的是form级别和field级别的结果的映射。也简要的讨论了其他的问题。如NL语义到ECMAScript的映射,ASR结果到VoiceXML的跳转的信息,语义结果和VoiceXML中匹配出错的处理。 |
| |
| 一、Mapping form-level results |
|
| form级别的语法产生一个form级别的语义结果,该结果可以同时填充多个input item。用户的输入匹配了一个激活的form级别的语法,这种情况随时都可以出现,不管是在<initial>元素中,还是在一个input item中。 |
|
| 设想一下“I would like a coca cola and three large pizzas with pepperoni and mushrooms.”这个句子的语义结果。该语义解释结果的结构如下,并被copy到application.lastresult$.interpretation中: |
|
{drink: "coke" pizza: {number: "3" size: "large" topping: [ "pepperoni" "mushrooms" ] } } |
|
| 下表说明了来自form级别的语法的结果在该form中怎样被赋给各个<field>元素。注意,所有能被该解释填充的input item是同时被填充的。Input item变量原来的值将被覆盖。这些input item将在FIA的处理阶段由<field>元素处理(见2.4节和附录C)。 |
| VoiceXML field | Assigned ECMAScript. value | Explanation | | 1、<field name="drink"/> | "coke" | 结果的顶层属性默认的赋给一个<field>元素,该<field>元素的name属性和该结果的顶层属性相匹配。 | | 2、<field name="..." slot="drink"/> | "coke" | 如果指定了slot属性,则他代替name属性去选定该结果的属性。 | 3、<field name="pizza"/> --or--ITPUB个人空间8e*sWO6| R,A;~:LG2d <field name="..." slot="pizza"/> | {number: "3", size: "large", topping: ["pepperoni", "mushroom"]} | 上面的例子选择了一个单纯的值,<field>的name和slot属性也可以用同样的方法选定一个ECMAScript对象变量。然而,在应用中必须要处理检查该对象的组成,这显然不是VoiceXML FFA(form-filling algorithm)的优势。在FFA中,语义结果中没有指定slot的,将不会自动的被提示。在服务器能够处理结构化对象的情况下,这是没有问题的。换句话说,使用下面描述的方法,对应用来说会更好。 | 4、<field name="..." slot="pizza.number"/> `?5T2xF
S0<field name="..." slot="pizza.size"/> | "3" ` }u]7|0"large" | Slot用于选定该结果的一个子属性。这种方法把该结果分配到几个<field>元素中。 | | 5、<field name="..." slot="pizza.topping"/> | ["pepperoni", "mushroom"] | 被选定的属性可以是一个复合的对象。 |
|
| 表30:Form-level Grammar Assignments |
|
| 这些例子可以用以下几条规则来解释,这些规则是直接由VoiceXML1.0的name和slot属性扩展得到的,且与之兼容。 |
|
| 1、<field>的slot属性是一个非常受限制的ECMAScript表达式,它选定结果中的某部分赋给该元素。除了能够选定结果的顶层元素外,该属性也能使用由点隔开的元素/属性名选定嵌套结构中任意级的属性。如使用“pizza.number”和“order.pizza.topping”。注意,如果几个<field>元素的slot属性值一样的话,一个特定的slot值有可能填充多个<field>元素。 |
|
| 2、如果在结果中,以一个<field>元素的slot(或name)属性命名的那一部分没有一个给定的值,则不改变该field item的值。 |
| |
| 二、Mapping a field-level result |
|
| 在一个input item中指定的语法产生一个field级别的语义解释结果,该结果只可以填充包含该语法的input item。这些语法只有在FIA访问该input item时才是激活的。这很有用。例如在引导型的dialog中,每个input item会单独的给用户播放提示语。 |
|
| Field级别的语义解释结果以下面的方式填充相应的input item: |
|
| 1、如果该语义解释是一个简单的结果,则直接赋给该input item变量。 |
|
| 2、如果该语义解释是一个结构化的结果,且该slot名和该结果的一个属性匹配,则将该属性的值赋给相应的input item变量。 |
|
| 3、在其他的情况下,整个语义解释的结果都赋给相应的input item变量。 |
|
| 这个处理过程允许input item从语义解释结果中提取一个特定的属性。和<filled>元素集合使用可以取得更好的控制效果。 |
|
<field name="getdate"> <prompt>On what date would you like to fly?</prompt> <grammar src="http://server.example.com/date.grxml"/> <!-- this grammar always returns an object containing string values for the properties day, month, and year --> <filled> <assign name="getdate.datestring" expr="getdate.year + getdate.month + getdate.day"/> </filled> </field> |
| |
| 三、Additional examples |
|
| 一个匹配的slot名允许input item提取语义解释中相应的部分。 |
|
application.lastresult$.interpretation = { drink: { size: 'large', liquid: 'coke' }pizza: { number: '3', size: 'large', topping: ['pepperoni', 'mushroom' ] }sidedish: undefined } |
|
| 下表再次说明了当slot名匹配了结果中的一个属性时的定义: |
| slot name | match or not? | | undefined | does not match | | drink | matches; top level property | | pizza | matches; top level property | | sidedish | does not match; no defined value | | size | does not match; not a top-level property | | pizza.size | matches; sub-property | | pizza.liquid | does not match |
|
| 表31:Slot Name Matching |
|
| 下面的例子用于比较form级别和field级别的结果的行为: |
|
<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd"> <form. id="exampleForm"> <grammar src="formlevel.grxml"/> <initial> Say something. </initial> <field name="x"> <grammar src="fieldx.grxml"/> </field> <field name="z" slot="y"> <grammar src="fieldz.grxml"/> </field> </form> </vxml> |
|
| 在这个例子中定义了两个input item变量,“x”和“z”,相应的slot名分别为“x”和“y”。下表描述的是,根据被识别的语法和返回的语义结果给这些变量赋值。ValueX表示属性x相应的结果值,可以是结构化的对象,也可以是简单的值。 |
| application. lastresult$. interpretation | form-level result H [ u U
fc8y0(formlevel.grxml) | field-level result in field xITPUB个人空间MK0s.A#g)cx (fieldx.grxml) | field-level result in field zITPUB个人空间v}$Q/G"n (fieldz.grxml) | | = 'hello' | no assignment; cycle FIA | x = 'hello' | z = 'hello' | | = { x: valueX } | x = valueX | x = valueX | z = { x: valueX } | | = { y: valueY } | z = valueY | x = { y: valueY } | z = valueY | | = { z: valueZ } | no assignment; cycle FIA | x = { z: valueZ } | z = { z: valueZ } | | = { x: valueX, y: valueY, z: valueZ } | x = valueXITPUB个人空间x1S%FU
o z = valueY | x = valueX | z = valueY | | = { a: valueA,b: valueB } | no assignment; cycle FIA | x = { a: valueA,b: valueB } | z = { a: valueA,b: valueB } |
|
| 表32:Variable Assignments Depending on Grammar and Semantic Result |
|
| 在form级别,简单的结果,像字符串‘hello’,不能匹配任何input item;结构化对象给所有slot名能匹配的input item变量赋值。在field级别,简单的结果总是赋给相应的input item变量;在结构化对象中,如果存在和该input item的slot名匹配的属性,则把该对象中匹配的属性值赋给相应的input item,否则把整个语义解释结果赋给该input item。 |
| |
| 四、Additional issues |
|
| 1、把NL语义映射到ECMAScript:如果使用NLSML,,需要定义NLSML表示法到ECMAScipt 对象的映射。由于这两种表示法有相近的嵌套结构,映射起来还算简单。NL语义技术规范详细的讨论了如何映射。 |
|
| 2、把ASR的语义结果转换到VoiceXML:当所有相关的语义求值完毕,W3C ASR语法的语义标识符就是元素的rule属性值。另外,根规则(和所有的non-terminals一样)有一个相应的"text"变量,该变量包含了由non-terminal控制的utterance中的一组token。在把ASR结果转换到VoiceXML中的过程中,VoiceXML平台唤鲆輗oot属性值填充VoiceXML中相应的field,还要填充这些field的影子变量。该field的影子变量name$.utterance和ASR根规则的text变量的值应该要一样。平台还要根据ASR平台提供的信息实例化影子变量name$.confidence的值,同时根据所处理的DTMF或语音语法实例化影子变量name$.inputmode的值。除了平台用于设置整个utterance解释的confidence的application.lastresult$.confidence外,最后平台还有把上面提到的那些信息填充到application.lastresult$(见5.1.5节。特别的,“application.lastresult$.utterance”,“application.lastresult$.inputmode”和 “application.lastresult$.interpretation”)。 |
|
| 3、语义结果和VoiceXML field之间的不配对:语义结果到VoiceXML的映射取决于ASR语法和VoiceXML标记之间严格的配对。由于当前的框架协议不能保证语法和相应的VoiceXML dialog之间的一致性,因此,开发者的疏忽可能导致出现不配对。由于这些不配对的情况和某些正确的情况很难分辨,信息一致性的检查就显得格外重要。不配对的一些例子: |
|
| ·语义结果中包含了额外的信息,使得VoiceXML没有相应的field与之配对。开发者的疏忽或使用的语法比VoiceXML应用要求的语法包含更对的信息,都可能出现这种不配对。这些额外的信息将被忽略。 |
|
| ·语义结果中没有提供VoiceXML应用期望的信息。开发者的疏忽或因用户的输入太简单而没法提供一个值给某个特定的slot,都可能出现不配对。在这种情况下,FIA继续执行,没有提供的值将单独由用户提供。如果问题是由于开发者的疏忽引起的,且该语法实际上不能识别出正确的结果,FIA将继续让用户提供该丢失的值,直到达到平台和应用规定的失败次数。 |
|
| ·最后,VoiceXML和ASR的语义结果中都提供了配对的信息,但是两者的格式不一致。例如ASR语法可能提供的是一个结构化的对象,而VoiceXML中期望的却是一个字符串。在这种情况下,平台的行为取决于对该结果的处理。例如,该结构化的对象可能被提交给服务器端的脚本,转换成一个字符串。这样,平台的行为就取决于服务器端的脚本。 |
|
| 为了解决这些潜在的问题,委员会这在考虑各种方法以确保语法和VoiceXML的一致性。 |