以对话为目的的应用抽象的制作方法

文档序号:6601181阅读:268来源:国知局
专利名称:以对话为目的的应用抽象的制作方法
技术领域
本发明一般涉及执行特殊应用的编码计算机。更具体地,本发明涉及多个控制,用于限定执行识别和/或听觉提示的应用,诸如产生由识别和/或听觉提示启动的客户端标记的服务器。
背景技术
在人们的日常生活中,诸如个人数字助理(PDA)、装置和便携式电话的小型计算装置的使用不断增加。随着现在微处理器可用于运行这些装置的处理能力的提高,这些装置的功能性也提高了,且在某些情况下合并了。例如,现在,许多便携式电话可以被用于访问和浏览互联网,并可以被用于存储诸如地址、电话号码等的个人信息。
从这些计算装置被用于浏览互联网或被用在其它服务器/客户机结构中来看,就有必要将信息输入计算装置。遗憾的是,由于要将这些装置保持得尽量小以便容易携带,由于该计算装置外壳上可用的表面面积受限,通常不可能用所有字母作为分开按钮的常规键盘。
对于这一问题,人们的兴趣增加了,并采取用语音或话音经诸如互联网的广域网存取信息。例如,诸如通过使用VoiceXML(语音扩展标记语言)的语音入口已经发展到允许只用电话就访问互联网内容。该结构中,文本服务器(例如,网络服务器)处理经VoiceXML解释器来自客户机的请求。网络服务器可以回应产生VoiceXML文本,用VoiceXML解释器处理这些文本并出声地反应给用户。通过语音识别的语音命令,用户可以浏览网页。
通常,有“话音启动”信息或网络内容这两种技术。在第一种技术中,现有通常可以用有显示器的装置来看的视觉标记语言页被翻译和反应为听觉的。然而,因为对视觉相互作用有意义的页通常没有足够的信息来自动产生可感知的听觉对话,所以这种方法的效果总是很差。另外,语音相互作用易于出错,尤其是经过诸如电话的有噪声的信道时。不使用视觉或其它形式的持久反馈,用户就会很难经网络服务器应用程序来导航。因此这种方法要求诸如帮助信息的机制,这些机制也被出声地反映给用户以便帮助他们经网站导航。这些机制通常称为“语音对话”,当用户响应听觉的问题而提供不正确的信息或不提供信息时,它们也会出错。由于这些机制不是共同基于网页的视觉内容,不自动产生这些机制,因而应用程序开发者通常要求大量的开发时间。
话音启动网络内容的第二种方法包括以新的语言编写特殊的语音页。该种方法的优势是话音启动页包含听觉对话所需的所有机制,如修复和导航帮助。然而,显著的缺点是应用程序页就必须适于包括视觉内容页中的应用逻辑。换句话说,视觉内容页的应用逻辑必须以话音启动语言重写。甚至在用从相同标准产生视觉和听觉页的工具使该过程自动化时,视觉和话音启动页的保持通常难以同步。另外,该方法不易于允许多模态应用,例如,在网页上同时提供视觉和话音相互作用时。由于视觉页和话音启动页无关,所以不易于输入和输出逻辑相互一致工作。
到此为止,由于当前用作接口的组织和格式,话音相互作用也很麻烦。通常,话音接口与应用程序的商业逻辑联系过紧,这制约了其它应用程序中话音接口单元(element)的再利用,或者话音接口被过分简单的对话模式(例如,格式和字段)限制过死。
因此,目前需要改善用于在应用中提供话音识别的的结构和方法,如服务器/客户机结构,如互联网。尤其是,需要针对上述一个、几个或全部缺点的方法、系统或程序设计工具,以在应用中提供产生话音启动识别和/或话音启动提示。

发明内容
提供对网络服务器的控制,以产生包括识别和/或听觉提示的客户端标记。这些控制包含诸如问题、回答、确认、命令或陈述的对话元素。一个模块用这些控制携带的信息形成对话。
每个控制在对话中起一个作用。例如,陈述控制被用来产生用于客户机装置的标记以将信息呈现给用户,同时询问控制产生用于客户机装置的标记以便问问题。回答控制产生用于客户机装置的标记以便用于识别的语法与涉及所问的问题的输入字段关联。如果识别结果是否正确不清楚的话,确认控制可以被激活,产生标记以确认识别结果。命令控制产生允许用户提供命令的标记,否则产生对特定问题的预期回答,这样,允许用户经例如网络服务器应用程序导航。每个控制包括表示相关控制是否可以被激活的属性。比如在客户端执行的模块产生对话来征求或提供信息作为激活控制的功能。


图1是计算装置操作环境的第一实施例的平面图;图2是图1的计算装置的框图;图3是通用计算机的框图;图4是用于客户机/服务器系统的结构的框图;图5是用于获得信用卡信息的显示;图6是可以在具有显示和语音识别能力的客户端执行的标记语言示例页;图7是说明用于提供客户端标记中的识别和听觉提示的第一种方法框图;图8是说明用于提供客户端标记中的识别和听觉提示的第二种方法框图;图9是说明用于提供客户端标记中的识别和听觉提示的第三种方法框图;图10是说明伴随控制的框图;图11是说明伴随控制的详细框图。
具体实施例方式
在描述基于网络的识别结构和用于实现它的方法之前,描述该结构中起作用的普通计算装置会很有用。现在参考图1,30说明了数据管理装置(PIM,PDA等)的示例形式。然而,要知道本发明也可以利用下面的讨论的其它计算装置来实现,尤其是,那些对于输入按钮等表面面积有限的计算装置。例如,电话和/或数据管理装置也可以从本发明受益。与已有便携式个人计算机信息管理装置和其它便携式电子装置相比,这种装置实用性更强,这种装置的功能和小尺寸会更促使用户随时携带。因此,本文中描述的结构的范围不会被本文中所公开说明的示例数据管理或PIM装置、电话或计算机所限制。
数据管理移动装置30的示例形式如图1所示。移动装置30包括外壳32和用户接口,用户接口包括显示器34,它结合输入笔33使用触摸式显示屏。输入笔33用于在制定坐标按压或接触显示器34以便选择区域,从而选择性地移动光标的开始位置,或者例如经手势或手写提供命令信息。或者(或另外),可以在装置30上包括一个或多个按钮35用于导航。另外,也可以提供诸如转轮、滚子等的其它输入机制。然而,应当注意,本发明不会被这些形式的输入机制所限制。例如,其它形式的输入可以包括视觉输入,例如经计算机视觉。
现在参考图2,框图说明了包含移动装置30的功能成分。中央处理单元(CPU)50实现软件控制功能,CPU50与显示器34连接以便根据出现在显示器34上控制软件产生的文本和图标。通常可以用数-模转换器59将扬声器43连接到CPU50以便提供听觉输出。用户下载或输入到移动装置30中的数据被存储在非易失性读/写随机存取存储器54中,非易失性读/写随机存取存储器54双向连接到CPU50。随机存取存储器(RAM)54提供用于由CPU50执行的指令的易失性存储和用于临时数据的存储,诸如登记数据。配置选择和其它变量的缺省值被存储在只读存储器(ROM)58中。ROM58也可以被用于存储操作系统软件,操作系统软件用于控制移动装置30的基本功能和其它操作系统核芯函数(例如将软件成分安装到RAM54中)。
RAM54也起用于代码存储的作用,其方式类似于PC上用于存储应用程序的硬驱的功能。应当注意,虽然非易失性存储器被用于存储代码,但是,它也可被存储在不用于执行这些代码的易失性存储器中。
可以用移动装置经无线收发信机52发射/接收无线信号,无线收发信机52与CPU50连接。也可以按需要提供选择通信接口60来直接从计算机(例如台式计算机)或从有线网络下载数据。因此,接口60可以包含多种形式的通信装置,例如红外链路、调制解调器、网卡等。
移动装置30包括麦克风29、模-数(A/D)转换器37和存储在存储54中的选择识别程序(话音,DTMF,手写,手势或计算机视觉)。用实例的方式,响应听觉信息,来自装置30、麦克风29的指令或命令提供话音信号,话音信号被A/D转换器37数字化。话音识别程序可以执行对数字化的话音信号执行标准化和/或特征提取以获得中间话音识别结果。利用无线收发信机52或通信接口60,话音数据可以被发射到下面要讨论的远端识别服务器204,如图5的结构所示。然后将识别结果回复到移动装置30以反映(例如视觉和/或听觉)在上面,最后发射到网络服务器202(图5),其中,网络服务器202和移动装置30以客户机/服务器关系操作。类似的处理可以被用于其它形式的输入。例如,可以经或不经装置30上的预处理而将手写输入数字化。象话音数据那样,可以将该形式的输入发射到识别服务器204用于识别,其中,将识别结果回复到装置30和/或网络服务器202中的至少一个。类似地,DTMF数据、手势数据和视觉数据可以进行类似地处理。按输入形式,装置30(和下面要讨论的其它形式客户机)应包括必要的硬件,如用于视觉输入的照相机。
除了上述便携式或移动计算装置,要知道,可以用诸如普通台式计算机的其它计算装置来利用本发明。例如,当诸如全字母数字键盘的常规输入装置难以操作时,本发明会允许具有物理能力的用户向计算机或其它装置输入或送入文本。
本发明也可以用多种其它通用计算机或专用计算系统环境或结构来操作。适用于本发明的周知计算系统、环境和/或结构的实例包括(但不限于)无线或蜂窝电话、常规电话(无屏幕)、个人计算机、服务器计算机、手持或手提式装置、多处理器系统、基于微处理器的系统、电视机顶盒、可编程消费电子设备、网络PC、微型计算机、大型计算机、包括任何上述系统或装置的分布式计算环境等。
下文是对图3所示通用计算机120的简要描述。然而,计算机120也只是适当的计算环境的一个实例而不是限制本发明的使用范围或功能。计算机120也不应被看作是与本文中所述的任何成分或其组合有关的从属性或要求。
可以在计算机可执行指令的普通前后关系下描述本发明,计算机可执行指令如计算机可执行的程序模块。通常,程序模块包括执行特殊任务或实现特殊抽象数据类型的例程、程序、对象、成分、数据结构等。也可以在经通信网络链接的远端处理装置执行任务的分布计算环境下实践本发明。在分布计算环境中,程序模块可以位于包括存储器存储装置的本地和远端计算机存储媒体中。下面结合附图描述程序和模块所执行的任务。本领域的技术人员可以将描述和图作为处理器可执行指令来实现,处理器可执行指令可以被写在任何形式的计算机可读媒体上。
参考图3,计算机120的部件包括(但不限于)处理单元140、系统存储器150和将包括系统存储器的多个系统部件连接到处理单元140的系统总线141。系统总线141可以是以下几种类型总线中的任何一种,包括存储器总线或存储器控制器、外设总线和利用多种总线结构中任何一种的局域总线。用实例的方式而不是限制本发明,这种结构包括工业标准结构(ISA)总线、通用串行总线(USB)、微通道体系结构(MCA)总线、增强型工业标准结构(EISA)总线、视频电子标准协会(VESA)总线和外设部件互连(PCI)总线,它也称为中层总线。计算机120通常包括多个计算机可读介质。计算机可读介质可以是能用计算机120访问的任何一种介质,包括易失性和非易失性的介质、可移动或不可移动媒体。用实例的方式而不是限制本发明,计算机可读介质可以包含计算机存储介质和通信介质。计算机存储媒体包括以用于存储信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质,信息诸如计算机可读指令、数据结构、程序模块或其它数据。计算机存储介质包括(但不限于)RAM、ROM、EEPROM、闪存存储器或其它存储器技术、CD-ROM、数字多用途光盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储装置或可以用于存储预期信息和可被计算机120访问的任何其它介质。
通信媒体通常体现为计算机可读指令、数据结构、程序模块或在诸如载波或其它传送机制的调制后数据信号中的其它数据,并包括任何信息传送媒体。术语“调制后数据信号”的意思是为了编码信号中的信息而设定或改变了一个或多个信号特性的信号。用实例的方式而不是限制本发明,通信媒体包括诸如有线网络或直接线连接的有线介质、诸如声、FR、红外的无线介质和其它无线介质。上述任何一种的组合也可以包括在计算机可读介质的范围内。
系统存储器150包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)151和随机存取存储器(RAM)152。包含基本例程的基本输入/输出系统153(BIOS)通常存储在ROM151中,基本例程有助于例如在起动时在计算机120的元件之间传送信息。RAM152通常包含用处理单元140立即访问和/或即时操作的数据和/或程序模块。用实例的方式而不是限制本发明,图3说明了操作系统54、应用程序155、其它程序模块156和程序数据157。
计算机120也可包括其它可移动/不可移动易失性/非易失性计算机存储介质。只用实例方式,图3说明了从不可移动、非易失性磁性介质读取或向其写入的硬盘驱动器161,从可移动、非易失性磁盘172读取或向其写入的磁盘驱动器172,和从诸如CD-ROM或其它光学介质的可移动、非易失性光盘176读取或向其写入的光盘驱动器175。其它可以在示例操作环境下使用的可移动/不可移动、易失性/非易失性计算机存储介质包括(但不限于)盒式磁带、闪存存储卡、数字多用途光盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器161通常经诸如接口160的不可移动存储接口与系统总线141连接,磁盘驱动器171和光盘驱动器175通常用诸如接口170的可移动存储接口与系统总线141连接。
图3中说明的上述驱动器和与它们相关的计算机存储媒体提供计算机可读指令、数据结构、程序模块和由于计算机120的其它数据。图3中,例如,硬盘驱动器161被示为存储操作系统164、应用程序165、其它程序模块166和程序数据167。注意,这些部件可以与操作系统154、应用程序155、其它程序模块156和程序数据157相同或不同。这里,操作系统164、应用程序165、其它程序模块166和程序数据167被给予不同的数字以便说明它们至少是不同的拷贝。
用户可以经诸如键盘182、麦克风183和定点设备181(如鼠标,跟踪球或触摸垫)的输入装置向计算机120输入命令和信息。其它输入装置(没画)可以包括游戏操纵杆、游戏垫、圆盘式卫星电视天线、扫描仪等。这些和其它输入装置常经与系统总线连接的用户输入接口180连接到处理单元140,但是,可以用诸如并行端口、游戏端口或通用串行总线(USB)的其它接口和总线结构来连接。监视器185或其它类型的显示装置也经诸如视频接口185的接口与系统总线141连接。除了监视器,计算机也可以包括其它外设输出装置,如扬声器187和打印机186,它们可经输出外部接口188来连接。
计算机120可以在利用与诸如远端计算机194的一个或多个远端计算机逻辑连接的网络环境下操作。远端计算机194可以是个人计算机、手持装置、服务器、路由器、网络PC、对等装置或其它公共网络节点,且通常包括与计算机120有关的上述多个和所有元件。图3中描绘的逻辑连接包括局域网(LAN)191和广域网(WAN)193,但是也可以包括其它网络。这种网络环境在办公室里、企业计算机网络、内部网络和互联网中很常见。
当用在LAN网络环境中时,计算机120经网络接口或适配器190与LAN191连接。当用在WAN网络环境中时,计算机120通常包括调制解调器192或用于经诸如互联网的WAN193建立通信的其它装置。内置或外置的调制解调器192可以经用户输入接口180或其它适当机制与系统总线141连接。在网络环境中,所描绘的关于计算机120的程序模块或其多个部分可以存储在远端存储器存储装置中。用实例的方式而不是限制本发明,图3说明了位于远端计算机194上的远端应用程序195。要注意,所示的网络连接是示例性的,可以使用在多个计算机之间建立通信链接的其它装置。
示例结构图4说明了可以使用本发明的用于基于网络的识别的结构200。通常,可以通过移动装置30(本文中也表示根据所要求的输入形式具有显示屏幕、麦克风、照相机、触摸感知面板等其它形式的计算装置)、或通过电话80访问存储在网络服务器202中的信息,其中,响应按键听觉地或通过电话80产生的音调请求信息,且其中,只将来自网络服务器202的信息听觉地供回给用户。
本示例实施例中,结构200被统一为通过利用话音识别的装置30还是电话80获得信息,单个识别服务器204可以支持两种操作模式中的任何一种。另外,结构200用周知的标记语言(例如,HTML,XHTML,cHTML,XML,WML等)的扩展来操作。因此,也可以用这些标记语言中周知的GUI方法来访问存储网络服务器202上的信息。用周知的标记语言的扩展,易于在网络服务器202上编写,现有的法定应用易于被修改成包括语音或其它形式的识别。
通常,装置30执行网络服务器202提供的HTML+脚本等。当要求语音识别时,用实例的方式,将话音数据提供给具有语法或语言模型指示的识别服务器204以在话音识别期间使用,该话音数据可以被数据化成音频信号或话音特征,其中音频信号已经被装置30进行了上述预处理。可以采取多种形式实现识别服务器204,说明了其中之一,但是通常包括识别器211。如果是预期的或适当的话就将识别结果供回给装置30用于局部反映。通过识别和可能用到的图形用户界面汇编之后,装置30将所有信息发送到网络服务器202用于处理和接收其它HTML脚本,如果需要的话。
如图4所述,装置30、网络服务器202和识别服务器204公共连接,且可通过网络205在诸如互联网的广域网中分别寻址。因而这些装置不必在物理上都相互接近。尤其是,网络服务器202不必包括识别服务器204。以这种方式,在网络服务器202的编写可以集中在应用上,编写者不用知道识别服务器204的复杂结构。相反,识别服务器204可以被独立设计和连接到网络205,因而,不要求再对网络服务器202进行改变来更新和改善识别服务器204。如下所述,网络服务器202也可以包括可以动态产生客户端标记和脚本的编写机制。在另一实施例中,可以根据实现机器的性能将网络服务器202、识别服务器204和客户机30组合起来。例如,如果客户机包含通用计算机,例如个人计算机,客户机可以包括识别服务器204。类似地,按需要,网络服务器202和识别服务器204可以被包括在一个机器中。
通过电话80对网络服务器202的访问包括将电话80连接到有线或无线电话网络208,再将电话80连接到第三方网关210。网关210将电话80连接到电话语音浏览器212。电话语音浏览器212包括媒体服务器214,媒体服务器214提供电话接口和语音浏览器216。象装置30那样,电话语音浏览器212从网络服务器202接收HTML脚本等。在一个实施例中,HTML脚本是类似于被提供给装置30的HTML脚本的形式。以这种方式,网络服务器202不需分别支持装置30和电话80,或者分别支持标准GUI客户机。甚至可以使用普通标记语言。另外,象装置30那样,例如,用TCP/IP,来自电话80发送的听觉信号的语音识别被通过网络205或专用线路207从语音浏览器216提供给识别服务器204。网络服务器202、识别服务器204和电话语音浏览器212可以体现在任何适当的计算环境中,如图3所示的普通目的台式计算机。
然而,应当注意,如果利用DTMF识别,通常在媒体服务器214而不是在识别服务器204执行这种形式的识别。换句话说,DTMF语法要用媒体服务器214来使用。
再看图4,网络服务器202可以包括服务器端插件编写工具或模块209(例如,微软公司的ASP、ASP+、ASP.Net,JSP,Javabeans等)。服务器端插件209可以动态产生客户端标记、甚至用于访问网络服务器202的客户机类型的特殊形式标记。随着客户机/服务器关系的建立,客户机信息可以被提供给网络服务器202,或者网络服务器202可以包括模块或例程来检测客户机装置的性能。以这种方式,服务器端插件209可以产生用于每个语音识别场景的客户端标记,即,只通过电话80或用于装置30的多模态语音。用恒定客户端模型,用于多个不同的客户机的应用编写显然更容易了。
除了动态产生客户端标记之外,可以将下述高级对话模块作为存储在存储器211中的服务器端控制来实现,供开发者在应用编写时使用。通常,高级对话模块211会根据开发者指定的参数在纯语音和多模态场景中都动态产生客户端标记和脚本。高级对话模块211可以包括多个参数以产生客户端标记来符合开发者的需要。
示例客户端扩展描述本发明所注重的客户端脚本的动态产生之前,先讨论对基于网络的识别用使用的标记语言的示例形式的扩展是会有帮助的。
如上所述,诸如HTML、XHTML、cHTML、XML、WML或其它SGML-派生标记的标记语言被扩展为包括多个控制和/或在客户机/服务器结构中提供识别的对象,这些标记语言用于网络服务器202和客户机装置30之间的相互作用。通常,多个控制和/或多个对象可以包括一个或多个下述功能用于识别器构成的识别器控制和/或对象,识别器执行和/或后处理;用于合成器构成和即时播放的合成器控制和/或对象;用于指定输入语法源的语法控制和/或对象;和/或用于处理识别结果的捆绑控制和/或对象。扩展被设计成轻权标记层,它向现有标记语言添加听觉、视觉、手写等接口能力。这样,扩展可以仍独立于它们所在的高级页,例如HTML;低级格式,扩展用它来参考语言资源,例如文本-话音和语法格式;和被用在识别服务器204中的识别和话音合成平台的单独性质。虽然下面讨论了话音识别,但是,要知道,下文要描述的技术、标签(tag)和服务器控制可以被类似地应用在手写识别、手势识别和图像识别中。
在示例实施例中,扩展(也就是“标签”)是一小组具有相关属性和DOM对象性质的XML元素、事件和方法,可以结合源标记文档使用这些方法来将识别和/或听觉提示接口、DTMF或调入控制应用于源页(source page)。扩展的格式和语义于源文档的本质无关,所以扩展可以被等效地用在HTML、SHTML、cHTML、XML、WML或其它任何SGML-派生标记中。扩展遵循文档对象模型,其中提供了可以被分级的新的功能对象或元素。在附录中详细讨论了每个元素,但是,通常元素可以包括属性、性质、方法、事件和/或其它“子”元素。
这时,也应当注意,可以根据执行浏览的装置的性能用两种不同的“模式”解释扩展。第一模式,即“对象模式”下,可以使用完全性能。由应用进行的扩展的纲领性操纵被装置上的浏览器启动的任何机制所执行,这些机制例如XHTML浏览器中的Jscript解释器、或WML浏览器中的WMLScript解释器。因此,只需要定义一小组扩展的核芯特性和方法,这些被任何纲领性(programmatic)机制所操纵的性质和方法位于装置或客户端。对象模式提供了事件和脚本,并可提供更强的功能以经话音相互作用给予对话编写者更精细的客户端控制。如本文中所用的那样,支持完全事件和脚本的浏览器被称为“上级浏览器”。这种形式的浏览器支持扩展的所有属性、性质、方法和事件。上级浏览器常见于具有更强处理能力的装置中。
也可以在“声明性(declarative)模式”下执行扩展。如本文中所用的那样,以宣言模式操作的浏览器被称为“下级浏览器”,且不支持完全事件和脚本能力。相反,这一形式的浏览器支持给定扩展的声明性方面(即核芯元素和属性),但是不支持所有DOM(文档对象模式)对象性质、方法和事件。该模式利用专用的声明性语法,还可以结合诸如SMIL(同步多媒体集成语言)2.0的声明性多媒体同步和同位机制(同步标记语言)来使用。下级浏览器常见于处理能力有限的装置中。
这时,应讨论一种特殊的进入模式。尤其是,使用话音识别时结合至少一个显示器且在另一实施例中还结合定位设备是很有用的,定位设备能协调多种输入模式,例如指示数据进入的区域。具体地说,这一数据进入模式下,用户通常能协调定位设备和话音输入的作用,所以,例如用户在选择区域和提供与该区域有关的相应信息时是受控制的。例如,图5说明了信用卡提交图形用户界面(GUI),用户可以先决定在区域252中输入信用卡号再在区域254中输入到期日。类似地,用户可以回到区域252并修改错误的输入,如果需要的话。当与话音识别结合时,提供了一种简易和自然的导航形式。如本文中所用的那样,这一同时使用屏幕显示和识别的输入形式被称为“多模态”,屏幕显示允许定位设备在屏幕上自由形式的作用,例如选择。
参考图6,说明HTML标记语言代码。HTML代码包括主体部分270和脚本部分272。在每个区域250、252和254中的信息输入分别由代码部分280、282或284来控制或执行。先参考代码部分280,例如用装置30的输入笔在区域250上选择时,启动了事件“onClick”,它在脚本部分272中调入或执行“谈话”。该作用激活了用于话音识别的语法,该话音识别与区域250中的通常预期数据类型有关。这一包括一种以上输入技术(例如语音和笔点/滚子)类型的相互作用称为“多模态”。
现在再返回语法,该语法是诸如上下文无关语法、N-语法或混合语法的合成语法,但不限于这些。(当然,当利用相应形式的识别时会使用DTMF语法、手写语法、手势语法和图像语法。如本文中所用的那样,“语法”包括用于执行识别的信息;在另一实施例中还包括相应于预期输入的信息,例如,在特殊区域中)。控制290(本文中识别为“reco”)包括多个元素,说明了它们中的两个,即语法元素“语法”和“联编”元素。通常,象从网络服务器202下载到客户机的代码那样,可以在网络服务器202产生语法并被下载到客户机和/或传给用于话音处理的远端服务器。然后,语法可以被局部存储在高速缓存中。结果,将语法提供给识别服务器204,在识别中使用。语法元素被用于指定语法,内联或用属性来参考。
一从相应于所识别的话音的识别服务器204收到识别结果,就提供手写、手势、图像等语法的reco控制290来接收相应结果和使它与相应区域关联,该区域可包括显示器34上反映的文本。在所说明的实施例中,一用被发回到客户机的结果完成话音识别,就使reco对象无效并将所识别的文本与相应区域关联。部分282和284的操作类似,其中为每个区域252和254调入唯一的reco对象和语法,并随着收到所识别的文本使每个区域252和254相关联。对应于卡号区域252的接收,功能“handle”对应卡类型检查卡号的长度。
客户端标记的产生如上所述,当从客户机装置30发出请求时,服务器端插件209输出客户端标记。简言之,服务器端插件209允许网站,从而允许定义和构建应用和应用所提供的服务。服务器端插件209中的指令由编译代码构成。当网络请求到达网络服务器202时运行该代码。然后,服务器端插件209输出新的客户端标记页,该页被发送到客户机装置30。众所周知,该过程常被称为反映。服务器端插件209对“控制”进行操作,该“控制”抽象和压缩了标记语言,从而抽象和压缩了客户端标记页代码。这种抽象和压缩标记语言并在网络服务器202上操作的的控制包括或相当于“服务器插件”或“服务器端插件”等几例。
已知,已有技术的服务器端插件可以为视觉反映和与客户机装置30的相互作用产生客户端标记。本说明书提供了3个不同种方法,用于扩展服务器端插件209以包括识别和听觉提示扩展,如上面讨论的示例客户端扩展,它们也分为本发明的几个方面。图7示意性说明了第一种方法,当前的视觉服务器端控制(包括用于视觉显示的参数,诸如反映的位置、字体、前景颜色、背景颜色等)被扩展为包括用于识别的参数和属性以及用于相关识别的听觉提示。用实例方式的话音识别和相关听觉提示,属性通常与听觉提示参数有关,如提示是否包含用于文本-话音转换的内联文本、预记录听觉文件(例如wave文件)的播放、用于听觉反映的数据(用于文本-话音转换或预记录听觉文件的文本)的位置等。对于识别,参数或属性可以包括识别期间要用的语法位置、信用度阈值等。由于服务器端插件209产生客户端标记,所以,用于对服务器端插件209的控制的参数和属性与用于识别和/或听觉提示的客户端标记中提供的扩展有关。
图7中300A所指示的控制是在网站应用开发或编写工具中周知的控制,编写工具诸如ASP、ASP+、ASP.Net、JSP、Javabeans等。这种控制一般形成在库中并被控制302用来执行特殊视觉任务。库300A包括用于产生预期客户机标记、事件处理程序等的方法。视觉控制302的实例包括“标签”控制,它在视觉显示器上提供所选择的文本标签,诸如图5中的标签“信用卡提交”304。较高级视觉控制302的实例是“文本框”,它允许在诸如图5中250所示的数据区域中输入数据。现有视觉控制302也是周知的。在对将服务器端插件模块控制扩展成包括识别和/或听觉提示的第一种方法中,除了一组与视觉反映有关的属性外,每个视觉控制302应再包括与识别或听觉提示有关的参数或属性。在“标签”控制的情况下(否则就在视觉显示器上提供被选择的文本),其它属性可以包括要反映听觉数据或是利用文本-话音转换和该数据文件的位置。库300B与库300A类似,还包括用于执行识别和/或听觉提示的标记信息。每个视觉控制302被编码成将该信息适当提供给控制300B以执行关于识别或听觉提示的特殊任务。
作为另一实施例,在视觉显示器上产生且允许客户机装置30的用户输入信息的“文本框”控制也应包括适当的识别或听觉提示参数或属性,诸如识别要用的语法。应当注意,识别或听觉提示是可选的,如果不希望识别或听觉提示就无须使用。
通常,如果在级302的控制包括关于视觉方面的参数,该控制就访问和使用库300。类似地,如果该控制包括关于识别和/或听觉提示的参数,该控制就访问和使用库300B。应当注意,已经分别说明了库300A和300B以便强调库300B中的附加信息,以及可以实现具有库300A和300B的信息的单个库。
这种方法中,每个当前或已有技术视觉控制302被扩展成包括适当识别/听觉提示属性。可以在库中形成控制302。服务器端插件209访问访问库找标记信息。执行控制用所提供的参数产生了客户端标记页或其部分。
图8所示的第二种方法中,提供了新的视觉识别/听觉提示控制304以便控制304成为与视觉控制302有关的子类,其中,在控制304提供识别/听觉提示功能或标记信息。换句话说,为识别/听觉提示提供新的一组控制304,它包括适当的参数和属性以在客户机装置30上执行预期识别或与识别任务有关的听觉提示。控制304将现有视觉控制302用于经显示器反映或获得视觉信息的范围。例如,级304的控制“话音标签”在级302使用“标签”控制以提供听觉反映和/或视觉文本反映。类似地,,“话音文本框”控制应使语法和相关控制资源和处理与输入区域关联。象第一种方法那样,用于控制304的属性包括用于识别的语法位于何处,用于文本-话音转换的内联文本,或者直接反映或要经文本-话音转换的文本文件来反映的预记录音频数据文件的位置。第二种方法的优势在于具有视觉控制302的识别控制304通过参数或属性来相互作用,这样,只要控制304和302之间的参数或属性接口技术仍然适当,改变视觉控制302就可以不要求在识别控制304中有任何改变。然而,随着又一视觉控制302的产生,级304的相应识别/听觉提示控制也可能要被写入。
图9说明第三种方法。通常,第三种方法的控制306与视觉控制302是分开的,但是,如下所述其中有选择性关联。以这种方式,控制306不直接建立在视觉控制302之上,但是还提供识别/听觉提示启动而不必重写视觉控制302。控制306象控制302那样,使用库300。本实施例中,库300包括视觉和识别/听觉提示标记信息,它同样是图7的库300A和库300B的组合。
第三种方法有显著的优势。第一,视觉控制302不必在内容上有所改变。第二,控制306可以形成一致的单个模块且不需根据话音启动控制302的本质而改变。第三,话音启动的过程,即,在设计时控制306与视觉控制302的明显关联完全在开发者的控制之下,由于它是明显的选择性的关联。这也就使视觉控制的标记语言有可能经诸如控制306产生的标记语言提供的识别、或者经诸如键盘的常规输入装置从多个源接收输入值。简言之,控制306可以被添加到服务器端插件209的视觉编写页的现有应用编写页上。控制306为客户机装置30的用户提供新形式的相互作用(即,识别和/或听觉提示),同时重利用视觉控制的应用逻辑和视觉输入/输出能力。从控制302可以与可以编码应用逻辑的视觉控制302相关联来看,控制306在下文中可称为“伴随控制306”,视觉控制302被称为“基本控制302”。应当注意,为了区分控制302和306而提供了这些参考名称而不是要限制它们。例如,伴随控制306可以被用于开发或编写网站,该网站不包括诸如纯语音网站的视觉反映。在这种情况下,可以在伴随控制逻辑中体现某种应用逻辑。
图10进一步说明了示例组的伴随控制306。这组伴随控制306可以被分组为输出控制308和输入控制310。输出控制308提供“提示”客户端标记,它通常包括预记录音频文件的播放、或用于文本-话音转换的文本、包括在标记中直接或经URL参考的数据。虽然可以用参数定义单个输出控制以管理所有的听觉提示,这样就要考虑本发明的另一方面,在示例性实例中,人物对话中的听觉提示形式或类型被形成为分别的控制。尤其是,输出控制308可以包括“问题”控制308A、“确认”控制308B和“陈述”控制308C,这些将在下文详细讨论。类似地,输入控制310也可以形成或遵循人物对话并包括“回答”控制310A和“命令”控制310B。下面讨论输入控制310,但是,通常输入控制310将命令和来自客户机装置30的用户的预期和可能输入关联起来。
虽然关于用作伴随控制306详细讨论了询问控制308A、确认控制308B、陈述控制308C、回答控制310A、命令控制310B、也有这些控制的普通结构的其它控制、参数和事件处理程序,但是要知道这些控制、普通结构、参数和事件处理程序可以适于在上述关于图7和8讨论的其它两个种方法中提供识别和/或听觉提示。例如,参数“ClientToSpeechEnable”包括一个示例机制以形成伴随控制和视觉控制之间的关联,当在图7和8的种方法中体现时可以不需要该参数。
多模态应用中,输出控制308中的至少一个或输入控制310中的一个与基本或视觉控制302关联。在所说明的实施例中,在“问题/回答”(下文也称为“QA”)控制320的控制下配置和组织输出控制308和输入控制310。在网络服务器202上执行QA控制320,这意味着用服务器端标记体系在网络服务器上的应用开发网页上定义它,但不把它作为不同形式的标记输出到客户机装置30。虽然在QA控制表现为由所有输出控制308和输入控制310形成的图10说明了这一点,但是,要知道,这些仅仅是包括在可用于QA控制的选择中的一种或多种选择。
这时,按应用场景解释控制308和310的使用会有帮助。参考图11,在纯语音应用中,QA控制320可以包含单个询问控制308A和回答控制310A。询问控制308A包含一个或多个提示对象或控制322,同时,回答控制310A可以通过用于输入数据的识别和该输入的相关处理的语法对象或控制324来定义语法。线326表示QA控制320与相应基本控制302的关联,如果会用到的话。在客户机装置30的用户可以触摸视觉文本框(例如TapEvent)的多模态场景中,例如,对于包含文本框的基本控制(文本框具有形成了指示的视觉文本,指示客户机装置的用户应向相应区域输入些什么),相应QA控制320可以或不可以有诸如音频重放或文本-话音转换的相应提示,但是,应当有相应于用于识别的预期值的语法、和处理输入的事件处理程序328,或者处理诸如未检测到话音、未识别话音或超时取消事件的其它识别器事件(如下述“事件”)。
通常,通过输出控制308和输入控制310和附加逻辑QA控制可以执行下述过程中的一个或多个提供输出听觉提示,收集输入数据,执行输入结果的信用证实,允许附加类型的输入诸如“帮助”命令、或允许客户机装置的用户导航网站的其它选择区域的命令,允许确认输入数据和控制网站的对话流,这里仅举几例。简言之,QA控制320包含所有与指定题目有关的控制。以这种方式,通过用对于题目的控制产生对话,以便通知获得信息、确认有效性或修复对话或改变交流题目。
在包含本发明另一方面的开发方法中,应用开发者可以用视觉控制302定义应用的视觉布局。然后,应用开发者可以用伴随控制306(体现为QA控制320或输出控制308和输入控制310)来定义应用的讲话接口。如图10和11所示,然后每个伴随控制306被链接或与相应基本或视觉控制302关联以提供识别和听觉提示。当然,如果需要的话,应用开发者可以通过在视觉控制302和伴随控制306之间转换来定义或编码应用,直到完全定义或编码应用,在视觉控制302和伴随控制306之间形成链接。
这时,提供对每个输出控制308和输入控制310的简短说明会有帮助。在附录B中提供的详细描述。
询问,回答和命令通常,如上所述,QA控制320中的询问控制308A保持与基本控制302有关的提示和语法资源,并使联编(使识别结果和客户端标记页的输入区域关联)和处理逻辑相关。询问控制308A和回答控制310A的存在与否确定了是否在激活时启动了话音输出或识别输出。命令控制310B和用户初始回答被回答控制310A和命令控制310B的范围性质的指定所激活。
在简单的纯语音应用中,QA控制320通常保持一个询问控制或对象308A和一个回答控制或对象310A。虽然在下面的实例中没显示,但是,命令控制310B也可以被指定,例如帮助、重复、取消等,以使用户能输入不与特殊询问的回答直接相关的输入。
用于纯语音对话的通常的“常规”QA控制如下<pre listing-type="program-listing"> <SpeechQA id=″QA_WhichOne″ ControlsToSpeechEnable=″textBox1″ runat=″server″> <Question>&lt;dp n="d16"/&gt;<prompt>Which one do you want?</prompt> </Question> <Answer><grammar src=″whichOne.gram″/> </Answer> </SpeechQA></pre>(本文中提供的实例被写为ASP.Net框架,这只是例子而不是限制本发明)该实例中,QA控制可以用它的“id”来识别,同时,通过参数“ControlsToSpeechEnable”获得QA控制与预期基本或视觉控制的关联,它用各自的标识符识别一个或多个基本控制。如果需要的话,可以使用其它周知的控制来形成关联。例如,通过上述第一和第二种方法可以得到直接、隐含的关联,或者,可以产生分别的表格用于保持关联。参数“runat”指示网络服务器应在网络服务器202执行该代码以产生正确的标记。
QA控制也可以只保持陈述控制308C,这种情况下,它只是提示控制而无活动语法(active grammar)(例如用于欢迎提示)。类似地,QA控制可以保持多模态控制,作为来自GUI的事件的结果,其回答控制310A直接激活它的语法或用于用户初始的范围机制(在下面讨论)。
也应当注意,QA控制320也可以保持多个输出控制308和输入控制310,诸如多个询问控制308A和多个回答控制310A。这允许编写者描述关于相同QA控制中的相同输入的相互作用流。它对于更复杂的纯语音对话尤其有用。所以,可以在与表示对话输入的视觉控制有关的QA控制包裹(wrapper)中指定可能包括多种询问和回答(例如,提问、确认、给予帮助等)的小对话。图11说明了一个复杂的QA控制。
上文表示了QA控制的主要特点。从下面的功能观点描述每个特点。
回答控制回答控制310A将语法概念、联编和其它识别处理抽取到一个对象或控制中。回答控制310A可以被用于指定一组与问题有关的可能语法以及联编声明和相关脚本。对多模态应用的回答控制,如“Tap-and-Talk”被GUI浏览事件激活或失效。下面的实例说明了回答控制310A被用在多模态应用中以便在文本框“txtDepCity”的“mouseDown”事件中选择离开城市,并将其值写入基本文本框控制
<pre listing-type="program-listing"> <SpeechQA controlsToSpeechEnable=″txtDepCity″ runat=″server″> <Answer id=″AnsDepCity″StartEvent=″onMouseDown″StopEvent=″onMouseUp″/&gt; <grammar src=″/grammars/depCities.gram″/> <bind value=″//sml/DepCity″ targetElement=″txtCity″/> </Answer> </SpeechQA></pre>纯语音应用中的标准回答控制310A被下述询问控制308A直接激活。
回答控制还包括一种机制用来使收到的结果与基本控制相关联。本文中,联编将多个值放在基本控制中;然而,在另一实施例中,关联机制可以允许基本控制看到或访问被识别的结果。
询问控制询问控制308A将提示标签(附录A)的概念抽取到包含可能提供选择的对象和要响应问题的回答控制310A中。每个询问控制308A都能指定在其执行中激活了哪个回答控制310A。它许可适当的响应语法被塞进回答控制310A中,它反映了相关询问控制308A。
下面的询问控制308A可以被用在纯语音应用中以请求离开城市<pre listing-type="program-listing"> <SpeechQA id=″QADepCity″controlsToSpeechEnable=″txtDepCity″runat=″server″><Question id=″Q1″Answers=″AnsDepCity″> <prompt>Please give me the departure city. </prompt></Question><Answer id=″AnsDepCity″.../> </SpeechQA></pre>在下面的实例中,可以根据询问控制308A的内部条件调入不同的提示。在询问控制308A内的提示上指定条件测试的能力意味着在询问控制308A的相同功能单元中可以容许用词改变。
<pre listing-type="program-listing"><SpeechQA id=″QADepCity″ controlsToSpeechEnable=″txtDepCity″ runat=″server″> <Question id=″Q1″Answers=″AnsDepCity″> <prompt count=″1″> Now I need to get the departure city. Where would you like to fly from? </prompt> <prompt count=″2″> Which departure city? </prompt> </Question> <Answer id=″AnsDepCity″.../></SpeechQA></pre>条件QA控制下面的实例说明了如何根据应用已知的信息来确定是否要激活QA控制。实例是调查应用的一部分。调查就是从员工们收集他们用来工作的传送模式。
调查部分首先要问用户是否搭公共汽车来上班。如果回答是——是,下面的问题就问用户上周搭了几天公共汽车。
——否,就绕过“搭公共汽车天数”的问题。
<pre listing-type="program-listing"><aspLabel id=″lblDisplay1″ text=″Do you ride the bus to work?″ runat=″server″/> <aspDropDownList id=″lstRodeBusYN″runat=″server″> <aspListItemselected=″true″>No</aspListItem> <aspListItem>Yes</aspListItem></aspDropDownList><SpeechQA id=″QA_RideBus ControlsToSpeechEnable=″lstRodeBusYN″ runat=″server″><SDNQuestion id=″Q_RideBus″> <prompt bargeIn=″False″> Do you ride the bus to work? </prompt></SDNQuestion><SDNAnswer id=″A_RideBus″ autobind=″False″ StartEvent=″onMouseDown″ StopEvent=″onMouseUp″ runat=″server″&lt;dp n="d19"/&gt; onClientReco=″ProcessRideBusAnswer″ <grammar src=″...″/><--!″yes/no″grammar--> </SDNAnswer></SpeechQA><aspLabel id=″lblDisplay2″ enabled=″False″ text=″How many days last week did you ride the bus to work?″ runat=″server″/><aspDropDownList id=″lstDaysRodeBus″enabled=″False″runat=″server″><aspListItem selected=″true″>0</aspListItem><aspListItem>1</aspListItem><aspListItem>2</aspListItem><aspListItem>3</aspListItem><aspListItem>4</aspListItem><aspListItem>5</aspListItem><aspListItem>6</aspListItem><aspListItem>7</aspListItem> </aspDropDownList><SpeechQA id= QA_DaysRodeBus″ControlsToSpeechEnable=″lstDaysRodeBus″ClientTest=″RideBusCheck″runat=″server″> <Question id=″Q_DaysRodeBus″> <prompt bargeIn=″False″> How many days last week did you ride the busto work? </prompt> </SDNQuestion> <SDNAnswer id=″A_DaysRodeBus″ autobind=″False″ StartEvent=″onMouseDown″ StopEvent=″onMouseUp″ runat=″server″ onClientReco=″ProcessDaysRodeBusAnswer″ <grammar src=″...″/><--!″numbers″grammar--> </SDNAnswer></SpeechQA>&lt;dp n="d20"/&gt; <script language=″jscript″>function ProcessRideBusAnswer(){<--!using SML attribute of the Event object, determine yes or no answer--><--!then select the appropriate item in the dropdown listbox<--!and enable the next label and dropdown listbox if answer is″yes″-->if<--!Answer is″yes″-->{ lstRodeBusYN.selectedIndex=2 lblDisplay2.enabled=″true″ lstDaysRodeBus.enabled=″true″} } function RideBusCheck(){ if lstRodeBusYN.selectedIndex=″1″<--!thisis no--> then return″False″ endif } function ProcessDaysRodeBusAnswer(){ <--!case statement to select properdropdown item --> }</script></pre>在上面的实例中,根据布尔参数“ClientTest”执行QA控制“QA DaysRodeBus”,在本实施例中,根据函数RideBusChech()设定该参数。如果函数返回伪条件(false condition),就不激活QA控制,而如果返回真条件,就激活QA控制。使用激活机制允许在所产生的客户端标记页中增大灵活性、改善对话流。如附录B中所述,许多控制和对象包括激活机制。
命令控制命令控制310B是纯语音对话中常见的用户说法,纯语音对话通常几乎没有关于所问的问题的语义输入,而有搜索助理或效果导航,例如帮助、取消、重复等。QA控制306中的命令控制310B不仅可被用于指定关于识别的语法和相关处理(不象回答控制310A那样没有结果到输入区域的联编),而且指定上下文的“范围”和类型。这允许在客户端标记上编写整体和上下文敏感行为。
从上文描述,本领域的技术人员可以了解,可以用类似于视觉控制302中的树状结构来组织控制306。由于每个控制306也与所选择的视觉控制302关联,所以控制306的组织可以与控制302的结构关联。
QA控制302可以被用于话音启动自动控制(文本框、标签等)和容器控制(形式、面板等)。这提供了一种规定行为范围和获得子对话控制的模块化的方法。例如,该范围允许客户机装置的用户导航其它客户端标记没有完成对话的其它部分。
在一个实施例中,“范围”被确定为基本控制树的节点。下面是“帮助”命令的实例,它是在“Pnl1”容器控制的水平上,包含两个文本框<pre listing-type="program-listing"> <asppanel id=″Pnl1″...> <asptextbox id=″tb1″.../> <asptextbox id=″tb2″.../> </asppanel> 原 <SpeechQA...> <Commandid=″HelpCmd1″scope=″Pnl1″type=″help″onClientReco=″GlobalGiveHelp()″><Grammar src=″grammars/help.gram″/> </Command> </SpeechQA> <script>function GlobalGiveHelp(){...} </script></pre>如所说明的那样,在关于“Pnl1”的每个QA控制及其内容中“帮助”语法是激活的。每次识别到“帮助”时就执行GlobalGiveHelp子例程。为了克服它并实现上下文敏感行为,可以将相同类型的命令放到所要求级别的上下文范围中<pre listing-type="program-listing"><SpeechQA...> <Command id=″HelpCmd2″ scope=″Tb2″ type=″help″&lt;dp n="d22"/&gt; onClientReco=″SpecialGiveHelp()″ > <Grammar src=″grammars/help.gram″/></Command></SpeechQA><script> function SpecialGiveHelp() ... }</script></pre>确认控制QA控制320也可以包括用于简化公共确认子对话的编写的方法。下面的QA控制以先提问再确认值的常规子对话为例<pre listing-type="program-listing"> <SpeechQA id=″qaDepCity″ controlsToSpeechEnable=″txtDepCity″ runat=″server″> <!--asking for a value--> <Question id=″AskDepCity″type=″ask″Answers=″AnsDepCity″> <prompt> Which city?</prompt> </Question> <Answer id=″AnsDepCity″ confirmThreshold=″60″> <grammar src=″grammars/depCity.gram″/> </Answer> <!--confirming the value--> <Confirm id=″ConfirmDepCity″Answers=″AnsConfDepCity″> <prompt>Did you say<value targetElement=″txtDepCity/Text″>? </prompt> </Confirm> <Answer id=″AnsConfDepCity″><grammar src=″grammars/YesNoDepCity.gram″/> </Answer> </SpeechQA></pre>
该实例中,用户响应“哪个城市?”与AnsDepCity语法匹配但其信用度不超出confirmationThreshold值,该用户响应引发确认控制308。编写者可以使用的更灵活的确认方法包括利用多个询问控制和多个回答控制的机制。
在另一实施例中,关于确认控制的附加输入控制包括认可控制、否定控制和校正控制。这些控制都可以别相应确认控制激活(以类似于其它控制的方式)并分别包括认可、否认或校正结果的语法。例如,用户可能会说“不”来否认、说“是”或“是+当前值”来认可(例如“你想去西雅图吗?”“是,去西雅图”)、说“不”+新的值来校正(例如,“你想去西雅图吗?”“不,去匹兹堡”)。
陈述控制陈述控制允许当不要求来自客户机装置30的用户的响应时,应用开发者提供关于客户端标记执行的输出。可以是例如在开始执行客户端标记页时播放“欢迎”提示。
可以在陈述控制中提供属性以便区分要提供给客户机装置的用户的不同类型信息。例如,可以提供属性以便指示警告消息或帮助消息。这些类型信息有不同的内在性质,如不同的语音。如果需要的话,可以提供不同形式的陈述控制,即,帮助控制、警告控制等。无论是作为分别控制还是陈述控制的属性来提供,不同类型的陈述在所产生的对话中起不同的作用,但是,它们共享向客户机装置的用户提供信息而不期望回答的基本作用。
事件图11所示的事件管理程序设在QA控制320、输出控制308和输入控制310中,它们用于客户机装置30用户的有效/无效、用于识别服务器204的操作等,附录B中指明了其它事件。例如,QA控制320详细说明了话音检测器检测到用户在含糊说、但不能识别词和没检测到话音的静音的情况。这些事件参考编写者定义的客户端脚本函数。在上文说明的多模态应用中,可以将在文本框中放入错误消息的一个简单的含糊处理程序写为下面这样<pre listing-type="program-listing"> <SpeechQA controlsToSpeechEnable=″txtDepCity″onClientNoReco=″OnMumble()″runat=″server″> <Answer id=″AnsDepCity″ StartEvent=″onMouseDown″ StopEvent=″onMouseUp″ >&lt;dp n="d24"/&gt; <grammar src=″/grammars/depCities.gram″/> <bind value=″//sml/DepCity″targetElement=″txtCity″/> </Answer></SpeechQA><script> function OnMumble(){ txtDepCity.value=″...recognition error...″; }</script></pre>控制执行算法在一个实施例中,向客户机装置提供客户端脚本或模块(本文中称为“RunSpeech”)。该脚本的目的是经逻辑执行对话流,在客户机装置30上执行时、即激活关于控制的脚本以便按其中包含的值来执行时的脚本中详细说明了该逻辑。该脚本允许在页面请求之间的多次对话往来,因而,对于诸如经电话浏览器216的纯语音对话控制尤其有用。在客户机装置30上以环路方式执行客户端脚本RunSpeech,直到发送完成的形式或从客户机装置30请求新的页。
应当注意,在一个实施例中,多个控制可以按在客户机上执行时的值相互激活(例如,询问控制激活所选择回答控制)。然而,在另一实施例中,多个控制可以相互“激活”以便产生适当的标记,这种情况下可以实现服务器端处理。
通常,在一个实施例中,算法通过输入话音和识别用户输入产生对话往来。算法的整个逻辑如下用于纯语音场景1.发现下一激活输出伴随控制;2.如果是陈述,就播放陈述并回到1;如果是问题或确认就到3;3.收集预期的回答;4.收集命令;5.播放输出控制并听到它以便输入;6.激活识别回答或命令对象,或者,如果没有识别到什么,就发布事件;7.回到1。
在多模态情况下,逻辑被简化为下面的算法1.等候引发事件——即,用户在控制上轻敲;2.收集预期回答;3.听到它以便输入;4.激活所识别的回答对象,或者,如果没识别到什么,就丢弃(throw)事件。
5.回到1。
算法相对简单是因为如上所述,控制包含关于何时可以激活它们的内置信息。算法也利用对话中控制的作用。例如,立即播放陈述,同时一旦已经收集到了预期回答就播放询问和确认。
在另一实施例中,可以提供隐含确认从而系统确认一条信息并同时提问。例如,系统可以确认飞机到达城市并以一种说法来要求旅行日期“你想什么时候去西雅图?”(即,问“什么时候”和隐含确认“目的地西雅图”)。如果用户给出了日期,那么,由于如果城市是错的,用户就会立即有疑问,所以认为是暗示认可了该城市。该场景下,显然用户要获得的知识是极其重要的他们要问问题、或者他们要校正值、或者他们要求帮助吗?通过利用在对话中用户输入的作用,系统可以直到何时暗示认可值。
总之,因对话中控制的作用和与其它控制的关系产生对话,其中,算法执行控制并因而管理对话。每个控制包含基于其类型的信息,执行算法用该类型根据它在客户机对话中是否起有用的用途来选择(即,使执行有效)给定控制。例如,只有在有值来进行确认和系统没有使值继续进行的足够信用度时确认控制才有效。在另一实现中,这些内置信息中的大多数可以被忽略或被应用开发者改编。
下面的表格总结了多个控制、它们在对话中相应作用和与其它控制的关系。

通过说明简单的人/机对话来解释这些控制的使用。下面的对话中,每个对话打开一部分系统或根据反映其在对话中目的的控制(用括号来表示)赋予用户特征。
1.系统(陈述)“欢迎来到旅行订购服务”。
2.系统(询问)“您想去哪?”3.用户(回答)“旧金山”。
4.系统(确认)“您是想说西雅图吗?”5.用户(否认)“不”。
6.系统(问题)“您想去哪?”7.用户(回答)“旧金山”。
8.系统(确认)“您想去西雅图吗?”9.用户(校正)“我说的是旧金山”。
10.系统(确认)“您说的是旧金山吗?”11.用户(校正)“是”。
12.系统(问题)“您想什么时候出发?”13.用户(命令)“帮助”。
顺序1是系统部分上的陈述。由于陈述控制在响应中不激活回答控制,系统就不期望输入。系统在顺序2继续激活询问控制。它再激活一组可能的回答控制,包括持有通过服务可以使用的城市的语法的控制,包括许可用户在顺序3中提供的城市“旧金山”、“西雅图”等。
用户的顺序3被系统所误认。虽然系统认为它有了一个来自用于城市的回答控制的值,但是该值的信用度低(当然如此,由于它已经误认了)。刚收到的回答控制中的该低信用度值对于RunSpeech是足以出发系统部分上的确认控制的信息,象在顺序4中产生的那样。确认控制再激活否认控制、校正控制和认可控制,并使它们各自的语法可被用来识别用户的下一轮。用户顺序5、9和11说明了对这些控制的实例响应。用户的轮5简单地否认“否”。这会从系统除去该值,所以RunSpeech的下一作用是再问问题以重新获得该值(顺序6)。
顺序7和8象用3和4那样返给我们确认控制。
用户顺序9是校正控制,它被再次激活作为对确认控制的可能响应。校正控制不仅否认正进行确认的值,而且提供新的值。所以用户顺序9被系统识别为具有新值的正确控制,该值这次被正确地识别为“旧金山”。
新值中的系统信用度低,然而,在顺序10产生又一确认控制。这再在响应中激活认可、否认和校正控制,用户顺序11(“是”)与认可控制语法匹配。认可控制的识别的效果是在它试图获得的值用打下系统信任的“基础”,所以现在RunSpeech能选择其它空值来获得它。在顺序12中,输出新的询问控制,它要求日期值。这时的用户响应(顺序13)是命令“帮助”。通常以整体风格激活命令控制,即,在系统部分上的独立的不同的询问控制和确认控制。以这种方式,用户能随时要求帮助,象他在顺序13中所做的那样。命令控制也可以被根据谈论哪部分基本控制结构来规定它们的激活范围的机制更灵敏地启动。
再看算法,,在一个示例性实施例实施例中,客户端脚本RunSpeech检查每个基本控制中的值和QA控制的属性、以及当前页上的QA控制的任何选择测试,并选择用于执行的一个QA控制。例如,在所选择的QA控制中,选择一个问题和它的相应提示用于输出,然后关于对相应问题的常规回答活动语法。也可以并行激活附加语法,允许被表示为可允许的其它命令(或其它回答)。假设已经进行了识别且完成了对输入数据的任何进一步处理,客户端脚本RunSpeech再次开始以便确定下面应执行那个QA控制。附录B中提供了示例性实现和RunSpeech算法。
应当注意,控制和RunSpeech算法或模块的使用不限于上述客户机/服务器应用,还可适于用其它应用抽象来使用。例如,可以想像只在客户机装置30上运行的诸如VoiceXML的应用包括其它元素和控制,诸如作为上述VonceXML的一部分提供且以相同方式操作的问题和回答。这种情况下,上述RunSpeech算法机制可以被浏览器缺省执行而不需额外脚本。类似地,诸如有限状态机的其它平台可以适于包括本文中描述的多个控制和RunSpeech算法或模块。
同步如上所述,伴随控制306与基本控制302(页上现有的控制)相关联。因而伴随控制306可以重利用基本控制302的商业逻辑和呈现能力。这用两种方式来进行在基本控制302中存储多个值和通知基本控制改变302。
伴随控制306经所谓的联编机制使它们的值与基本控制302同步或关联。联编将从识别器收到的多个值放入基本控制302,例如将文本放入文本框,本文中以回答控制为例。由于基本控制302响应视觉呈现,它将视觉反馈提供给多模态场景中的用户。
多个伴随控制306也提供通知基本控制302它们已经过识别器收到输入的机制。这允许基本控制302采取措施,如调用商业逻辑。(由于通知伴随控制306的委托的量达到它们写入基本控制302的值,所以实现提供了一种以精细控制来控制通知的机制。该控制是由RejectThreshold和ConfirmThreshold性质在回答控制上提供的,回答控制指定了数字声音信用值,在该值以下系统会分别拒绝或试着确认一个值)。
虽然已经参考最佳实施例描述了本发明,但是,在不背离本发明的精神和范围的情况下,本领域的技术人员会知道可以进行形式或细节上的改变。
附录A1.介绍下面的标签是一组允许文档使用话音作为输入或输出媒体的标记元素。标签被设计成自主式XML,它可以被嵌入到任何SGML派生标记语言中,如HTML、XHTML、cHTML、SMIL、WML等。本文中使用的标签类似于SAPI5.0,已知它们是可以从Redmond,Washington的微软公司得到的方法。标签、元素、事件、属性、性质、返回值等只是示例性的,用于话音和DTMF识别,类似的标签可以被提供用于其它形式的识别。
本文中讨论的主要元素是&lt;prompt...&gt;用于话音合成构成和提示播放&lt;reco...&gt;用于识别器构成和识别执行和后处理&lt;grammar...&gt;用于指定输入语法资源&lt;dtmf...&gt;用于DTMF的构成和控制2.识别识别元素用于指定可能的用户输入和用于处理输入结果的方法。因而,它的主要元素是&lt;gramar&gt;和&lt;bind&gt;,它包含用于构成识别器性质的资源。
识别元素被经起动和停止方法在上级浏览器中、或用SMIL命令在SMIL-启动浏览器中可编程地激活。由于它们呈现在页上,被认为在下级浏览器(即,非脚本支持浏览器)中是声明性地有效。为了许可并行激活多个语法,可以同时认为多个识别元素有效。
识别也可以采取特殊模式——“自动”、“单个”或“多个”——来区分它们启动的识别场景的种类和识别平台的行为。
2.1识别内容识别元素包含一种或几种语法和任选的一组联编元素,这些联编元素审查识别结果和将相关部分复制到包含页中的值。
在上级浏览器中,识别支持各个语法规则中的纲领性激活和失效。也要注意,语法中的所有顶级规则对于识别上下文都是缺省激活的。
2.1.1&lt;grammar&gt;元素语法元素被用于通过内联或利用src属性参考来指定语法。通常指定至少一种语法(内联或参考)。内联语法可以是基于文本的语法格式,同时参考语法可以是基于文本的或二进制类型的。可以指定多个语法元素。如果指定了一种以上的语法元素,将加入语法中的规则作为相同语法中的额外规则。可以重写具有相同名称的任何规则。
属性·src如果指定内联语法时可选。要包括语法的URI。注意,语法中的所有顶级规则对于识别上下文来说都是缺省激活的。
·lang function checkKWBargein(){ news.change(1.0,0.5);//turn down thevolume while verifyingif(keyword.text== ″″){//result is below threshold news.change(1.0,2.0);//restore the volume keyword.Start();//restart the recognition }else{news.Stop();//keyword detected!Stop the prompt//Do whatever that is necessary } } // </script><script for=″window″event=″onload″> <!--news.Start();keyword.Start();//</script> </head>θbody> <prompt id=″news″bargein=″0″>&lt;dp n="d44"/&gt; Stocks turned in another lackluster performanceWednesday as investors received little incentive tomake any big moves ahead of next week′s FederalReserve meeting.The tech-heavy Nasdaq Composite Indexdropped 42.51 points to close at 2156.26.The DowJones Industrial Average fell 17.05 points to 10866.46after an early-afternoon rally failed. -<!-- </prompt><reco id=″keyword″reject=″70″onReco=″checkKWBargein()″><grammar src=http//denali/news bargein grammar.xml /> </reco></body> </html></pre>3.4提示事件提示DOM对象支持下面的事件,可以将这些事件的处理程序指定为提示元素的属性。
3.4.1 onBookmark在遇到合成书签时激发。该事件不中止重放。
语法

事件对象信息

事件属性虽然事件处理程序不直接接收属性,但是,该处理程序可以询问用于数据的事件对象。
3.4.2 onBargein
当检测到用户的闯入事件时激发。(注意确定是什么构成了闯入事件,例如能量检测湖哦关键字识别,直到平台)该事件处理程序的指定不自动打开闯入。
语法

事件对象信息

事件性质虽然事件处理程序不直接接收性质,但是,该处理程序可以询问用于数据的事件对象。
3.4.3 onComplete当提示重放到达终点或遇到排除时(如上定义的那样)激发。
语法

事件对象信息

事件性质虽然,事件处理程序不直接接收性质,但是,该处理程序可以询问用于数据的事件对象。
3.4.4使用书签和事件下面的实例显示了按照提示输出期间发生的闯入,书签事件可以被如何用来确定用户响应的语义——校正离开城市或提供目的城市。该onBargein处理程序调入一个脚本,该脚本设定了可对于在提示中遇到的最末书签变化的整体“标志”,并且该“标志”的值被用在识别后处理函数(‘heard’)以设定正确的值。
<pre listing-type="program-listing"> <script><![CDATA[ var mark; function interrupt(){mark=event.srcElement.bookmark; } function ProcessCityConfirm(){confirm.stop();//flush the audiobufferif(mark==″mark_origin_city″)txtBoxOrigin.value=event.srcElement.text; elsetxtBoxDest.value=event.srcElement.text; } ]]></script> <body> <input name=″txtBoxOrigin″value=″Seattle″type=″text″/> <input name=″txtBoxDest″type=″text″/> ... <prompt id=″confirm″onBargein=″interrupt()″bargein=″0″>From<bookmark mark=″mark_origin_city″/><value targetElement=″orgin″targetAttribute=″value″/>, please say <bookmark mark=″mark dest_city″/>the destination city you want to travel to.</prompt><reco onReco=″ProcessCityConfirm()″> <grammar src=″/grm/1033/cities.xml″/></reco> ...</body></pre>4.DTMF产生DTMF识别对象。该对象可以用内联标记语言语法或在脚本中举例说明。当被激活时,DTMF可以使提示对象激发闯入事件。应当注意,下面相对于DTMF识别讨论的标签和事件以及在部分5中讨论的调入控制与语音浏览器216和媒体服务器214之间的相互作用有关。
4.1内容·dtmfgrammar用于内联语法。
·bind象适当的区域分配DTMF转换结果。
属性·targerElement要求。要被分配部分识别结果的元素(u W3C SMIL 2.0中相同)。
·targetAttribute要被分配识别结果的目标元素的属性(与SMIL 2.0中相同)。缺省为“值”。
·test用于分配的条件。缺省为真。
实例1将键映射到文本。
<pre listing-type="program-listing"> <input type=″text″name=″city″/> <DTMF id=″city_choice″timeout=″2000″numDigits=″1″> <dtmfgrammar> <key value=″1″>Seattle</key> <key value=″2″>Boston</key> </dtmfgrammar> <bind targetElement=″city″targetAttribute=″value″/> </DTMF></pre>当激活“city choice”时,如果用户按下了1,就将“西雅图”分配到输入区域,如果按下2,就分配“波士顿”,否则什么也不分配。
实例2可以如何用多个区域来使用DTMF。
<pre listing-type="program-listing"><input type=″text″name=″area_code″/><input type=″text″name=″phone_number″/><DTMF id=″areacode″numDigits=″3″onReco=″extension.Activate()″><bind targetElement=″area_code″/></DTMF><DTMF id=″extension″numDigits=″7″> <bind targetElement=″phone_number″/&gt;</DTMF></pre>实例说明了如何允许用户输入多个区域。
实例3当用户起动DTMF时如何同时允许话音和DTMF输入以及停用话音。
<pre listing-type="program-listing"> <input type=″text″name=″credit_card number″/> <prompt onBookmark=″dtmf.Start();speech.Start()″ bargein=″0″>please say<bookmark name=″starting″/>or enter your credit card number now </prompt> <DTMF id=″dtmf″escape=″#″length=″16″ interdigitTimeout=″2000″onkeypress=″speech.Stop()″><bind targetElement=″credit_card_number″/> </DTMF> <reco id=″speech″><grammar src=″/grm/1033/digits.xml″/><bind targetElement=″credit_card_number″/> </reco></pre>4.2属性和性质4.2.1属性·dtmfgrammar要求。DTMF语法的URI。
4.2.2性质·DTMFgrammar读写一种将DTMF呈现给字符串转换矩阵的SML DOM节点对象(也称为DTMF语法)。缺省语法为&lt;dtmfgrammar&gt;
&lt;key value=“0”&gt;0&lt;/key&gt;
&lt;key value=“1”&gt;1&gt;&lt;/key&gt;
...
&lt;key value=“0”&gt;0&lt;/key&gt;
&lt;key value=“9”&gt;9&lt;/key&gt;
&lt;key value=“*”&gt;*&lt;/key&gt;
&lt;key value=“#”>#&lt;/key&gt;
&lt;/dtmfgrammar&gt;
·flush写-读,指示是否在激活之前在下层电话接口卡上自动刷新DTMF缓冲的布尔标志。缺省为伪以便启动提前键入。
·escape
读-写。结束DTMF读取会话的换码键。换码键是一个键。
·numDigits读写。结束DTMF读取会话的击键数。如果同时指定换码和长度,DTMF会话就在满足条件时结束。
·dtmfResult只读字符串,存储用户已经输入的DTMF键。如果键入换码,它就包括在结果中。
·text只读字符串,存储空白分隔符号串,根据DTMF语法转换每个符号。
·initialTimeout读-写。用于接收第一DTMF击键的几毫秒超时期。如果未指定,缺省为电话平台的内部设定。
·interdigitTimeout读-写。用于相邻DTMF击键的几毫秒超时期。如果未指定,缺省为电话平台的内部设定。
4.3对象方法4.3.1起动启动DTMF中断和起动DTMF读取会话。
语法Object.Start()返回值无。
排除无。
4.3.2停止使DTMF失效。然而,用户输入的击键仍留在缓存中。
语法Object.Stop()返回值无。
排除无。
4.3.3刷新刷新DTMF缓存。不能在DTMF会话期间调入刷新。
语法Object.Flush()返回值无。
排除无。
4.4事件4.4.1 onkeypress当按下DTMF键时激发。这重写了从HTML控制继承的缺省事件。当用户点击换码键时,onRec事件激发,而不是onKeypress。
语法

事件对象信息

事件性质虽然事件处理程序不直接接收性质,但是,该处理程序可以询问用于数据的事件。
4.4.2 onReco当结束DTMF会话时激发。该事件使当前DTMF对象自动失效。
语法

事件对象信息

事件性质虽然事件处理程序不直接接收性质,但是,处理程序可以询问用于数据的事件对象。
4.4.3 onTimeout当在超时前没接收到阶段完成事件(phrase finish event)时激发。该事件自动停止识别过程。
语法

事件对象信息

事件性质虽然事件处理程序不直接接收性质,但是,该处理程序可以询问用于数据的事件对象。
5.调入控制对象表示电话语音浏览器的电话接口(调入、终端和连接)。该对象在GUI浏览器中象窗口对象一样的性质。同样,电话对象的寿命与浏览器实例自身相同。用于电话的语音浏览器举电话对象为例,用于每个调入。用户不以对象为例或处置它。
此时,通过该对象仅暴露与第一方呼叫控制有关的特征。
5.1性质·address只读。XML DOM节点对象。具体实现。它是调入者的地址。对于PSTN,可以是ANI和ALI的组合。对于VoIP,它是调入者的IP地址。
·ringsBeforeAnswer回答来电前的响铃数。缺省为无限,意味着开发者必须专门使用下面的Answer()方法来回答电话调入。当调入中心用ACD等候来电调入时,该数字可以被设为0。
5.2方法注这里所有的方法都是同步的。
5.2.1转移转移该调入。对于盲目转移,系统可以终止原始调入,并且一旦转移完成就释放系统资源。
语法telephone.Transfer(strText);参数○strText要求。计划接收器的地址。
返回值无。
排除当调入转移失败时丢弃排除。当对方忙时,就没有数字、传真或回答机器回答。
5.2.2 Bridge第三方转移。在调入被转移后,浏览器可以释放为该调入分配的资源。直到应用恢复用strUID返回所转移的调入时的会话状态。下层电话平台可以将返回调入指路到不同的浏览器。调入可以只在接收者终止调入时返回。
语法
telephone.Bridge(strText,strUID[imaxtime]);参数○strText要求。计划接收器的地址。
○strU //read address,prepare customized stuff if anycallControl.Answer();// </SCRIPT><SCRIPT for=″callControl″event=″onOffhook″> <!--p_main.Start();g_login.Start();dtmf.Start(); focus=″user″; // </SCRIPT><SCRIPT for=″window″event=″onload″> <!--if(logon.user.value!=″″){ p_retry.Start(); logon.user.value=″″; logon.pass.value=″″; checkFields();} //</SCRIPT><BODY> <reco id=″g_login″onReco=″login_reco();runSpeech()″ timeout=″5000″ onTimeout=″p_miss.Start();RunSpeech()″><grammar src=http//kokaneel/etradedemo/speechonly/login.xml/></reco> <dtmf id=″dtmf″escape=″#″onkeypress=″g_login.Stop();″onReco=″dtmf_reco();RunSpeech()″interdigitTimeout=″5000″onTimeout=″dtmf.Flush();p_miss.Start();RunSpeech()″/><prompt id=″p_main″>Please say your user I D and pin number</prompt><prompt id=″p_uid″>Please just say your user I D</prompt>&lt;dp n="d57"/&gt; <prompt id=″p_pin″>Please just say your pin number</prompt> <prompt id=″p_miss″>Sorry,I missed that</prompt> <prompt id=″p_thank″>Thank you.Please wait while I verify your identity</prompt> <prompt id=″p_retry″>Sorry,your user I D and pin number do not match</prompt> <H2>Login</H2>form id=″logon″>U comspeech″> <head> <style>.time{behaviorurl(#default#time2);} </style> </head> <body> <input name=″txtBoxOrigin″type=″text″/> <input name=″txtBoxDest″type=″text″/><spprompt class=″time tbegin=″0″> please say the origin and destination cities</spprompt><tpar tbegin=″time.end″trepeatCount=″indefinitely″ <spreco class=″time″> <grammar src=″./city.xml″/> <bind targetElement=″txtBoxOrigin″ value=″//origin_city″/><bind targetElement= ″txtBoxDest″ test=″/sml/dest_city[@confidence $gt$ 40]″ value=″//dest_city″/> </spreco></tpar></body></html></pre>
附录B1.QA话音控制QA控制将话音功能添加到它所附加的基本控制。其对象模型是附录A中示例标签的内容模型的抽象。
1.1 QA控制<pre listing-type="program-listing"><SpeechQA id=″...″ controlsToSpeechEnable=″...″ speechIndex=″...″ ClientTest=″...″ runat=″server″> <Question...> <Statement...> ... <Answer...> <Confirm...> ... <Command...> ...</SpeechQA></pre>1.1.1核芯特性字符串ControlToSpeechEnalbeControlToSpeechEnalbe指定对话音使能的主要控制的ID表。ID的公共定义的。
1.1.2激活机制SpeechIndex指定QA控制的订购信息——用RunSpeech来使用它。注如果一个以上的QA控制有相同的SpeechIndex,RunSpeech会以源命令(source order)执行它们。在一些QA控制具有指定的SpeechIndex和一些QA控制没有指定的SpeechIndex的情况下,RunSpeech用SpeechIndex先命令QA控制,然后用源命令来命令QA控制。
字符串ClientTestClientTest指定了客户端脚本函数,它返回布尔值以确定QA控制何时可以被RunSpeech选择。因而该系统策略可以通过用它作为条件来进行改变,以比SpeechIndex更灵敏地激活QA控制或使其失效。如果未指定,QA控制可被认为是激活的。
1.1.3询问、陈述、回答、确认和命令Question[]QuestionQA控制包含问题对象或控制阵列,它们由对话编写者来定义。每个询问控制通常涉及系统的一个函数,例如要求一个值等。每个询问控制可以用ClientTest属性指定一个激活函数,所以激活QA控制可以在不同的环境中问关于其基本控制的多种问题。例如,用于主要问题A_Main的激活条件可以是相应基本控制没有值,用于Q_GiveHelp的激活条件可以是用户刚请求帮助。每个问题可以从QA控制中指定回答控制,这些回答控制在输出询问控制时被激活。
Statement[]StatementQA控制包含一个陈述对象或控制的阵列。陈述被用于向听者提供信息,如欢迎提示。
Answer[]AnswerQA控制包含一个回答对象或控制的阵列。回答控制被QA控制中的询问控制直接激活。使用多个回答时,它们通常将回答反映给系统函数,例如,A_Main可以响应A_Main提供一个值,A_Confirm可以向确认提供是/否+校正。
Confirm[]ConfirmQA控制可以包含确认对象或控制。该对象是提供给对话编写者的机制,它简化了普通确认子对话的编写。
Command[]Command命令阵列保持一组命令控制。命令控制可以被认为是没有询问控制的回答控制,它的识别行为可以被规定在控制树的下部范围。
1.2询问控制询问控制被用于关于给定的基本控制的话音输出。它包含一组用于呈现信息或问问题的提示、和回答控制的id列表,该列表可以回答问题。如果指定了多个回答控制,就在激活问题时并行载入这些语法。如果在询问控制中不指定回答控制就丢弃排除。
<pre listing-type="program-listing"><Question id=″...″ ClientTest=″...″ Answers=″...″ Count=″...″ initialTimeout=″...″ babbleTimeout=″...″ maxTimeout=″...″ Modal=″...″ PromptFunction=″...″ OnClientNoReco=″...″><prompt.../>... </Question></pre>字符串ClientTestClientTest指定返回布尔值的客户端脚本函数,布尔值确定在什么环境下认为QA控制中询问控制激活(QA控制对于要被评价的问题必须是激活的)。对于给定QA控制,选择具有真条件的第一询问控制用于输出。例如,该函数可以被用于确定是否要输出确定要求值(“您想去哪个城市?”)或试图确认它(“您是说伦敦吗?”)的问题。如果未指定,就认为问题条件为真。
Prompt[]Prompt提示阵列指定了下面要讨论的提示对象的列表。提示也能指定选择条件(经客户函数),且在RunSpeech执行期间,只选择具有真条件的第一提示用于播放。
String Answer回答是用ID的参考阵列以便控制对问题的可能回答。该行为是要响应询问控制所问的提示激活来自每个有效回答控制的语法。
Integer initialTimeout在识别起动和检测话音之间的几毫秒时间。如果超时,该值就被送到识别平台,从识别平台丢弃onSilenct事件。如果未指定,话音平台就使用缺省值。
Integer babbleTimeout识别服务器或其它识别器必须在检测话音后返回结果的几毫秒时间段。对于“tap-and-talk”场景中的识别,它应用于话音检测和可以使用的识别结果之间的时期。对于指令场景中的识别,该超时应用于话音检测和每个识别返回之间的时期——即,每次返回结果或其它事件后重新开始的时期。如果超时,onClientNoReco事件被丢弃但可以有不同的状态代码。如果已经可以检测到任何一种识别平台错误且经过了babbleTimeout时期,那么,onClientNoReco就被丢弃但状态代码为-3。或者,如果识别器仍处理音频——例如在超长说法的情况下或者如果用户已经在超时中继续下笔——丢弃onClientNoReco,状态代码为-15。如果未指定babbleTimeout,话音平台就缺省为内值。
Integer maxTimeout识别起动和将结果返回被客户装置浏览器之间的几毫秒时期。如果超时,浏览器就丢弃onMaxTimeout事件——它适于内部环境中的网络或识别器故障。对于指令场景中的识别,象babbleTimeout那样,在返回每个识别或其它事件后重新开始该时期。注意,maxTimeout属性应大于或等于intialTimeout和babbleTimeout之和。如果未指定,该值就是浏览器缺省值。
bool modal当将模态设为真时,不激活除了对问题的一组立即回答之外的回答(即,不考虑没规定范围的回答)。缺省为伪。例如,该属性允许应用开发者使客户装置的用户回答特殊问题。
字符串PromptFunction(prompt)PromptFunction指定一旦已经选择了问题但播放提示之前调入的客户端函数。它为开发者执行对可能要求的提示的最后修改提供了机会。PromptFunction用目标提示的ID作为所要求的参数。
字符串onClientNoRecoonClientNoReco指定客户端函数的名称在收到NoReco(mumble)时调入。
1.2.1提示对象提示对象包含关于如何播放提示的信息。所定义的所有性质是写/读性质。
<pre listing-type="program-listing"><promptid=“...”count=“...”ClientTest=“...”Source=“...”bargeIn=“...”&lt;dp n="d64"/&gt;onClientBargein=“...”onClientComplete=“...”onClientBookmark=“...”</prompt>int count</pre>Count指示用于提示选择的整数。当在提示上指定的计数值与其询问控制的计数值匹配时,就选择提示用于重放。合法值是0-100。
&lt;Question id=Q_Ask”&gt;
&lt;prompt count=“1”&gt;Hello&lt;/prompt&gt;
&lt;prompt count=“2”&gt;Hello again&lt;/prompt&gt;
&lt;/Question&gt;
该实例中,当Q_Ask.count等于1,播放第一提示,如果等于2(即,以前已经输出问题),然后播放第二提示。
字符串ClientTestClientTest指定了返回布尔值的客户端脚本函数,该函数确定在什么环境下选择激活询问控制中的提示用于输出。对于给定询问控制,选择具有真条件的第一提示。例如,该函数可以被用于实现提示渐细,例如(如果是第一次用户返回真的函数“您想离开哪个城市?”或用于老手的“哪个城市?”)如果未指定,就认为提示的条件为真。
字符串InlinePrompt提示性质包含要播放的提示的文本。它被定义为提示元素的内容。它还可以包含标记,象在TTS反映信息中那样,或者&lt;value&gt;元素。如同页的所有部分,它也可以被指定为&lt;script&gt;标签中的脚本代码,用于提示输出的动态反映。
字符串SourceSource指定URL,从该URL检索要播放的提示的文本。如果指定了内联提示,就忽略该性质。
Bool BargeInBargeIn被用于指定是否在提示上允许闯入(其中,当播放提示时,客户装置的用户开始讲话)。缺省为真。
字符串onClientBargein
onClientBargein指定闯入事件所调用的客户端脚本函数。
字符串onClientCompleteonClientComplete指定当完成提示的播放时调用的客户端脚本函数。
字符串onClientBookmarkonClientBookmark在遇到书签时访问要调入的客户端函数的名称。
1.2.2提示选择在RunSpeech执行时,QA控制以下面的方式选择其提示ClientTest和每个提示的计数属性被依次评价。播放具有ClientTest和counttrue的第一提示。错过的计数被认为是真。错过ClientTest被认为是真。
1.3陈述控制当不要求活动语法时,陈述控制被用于信息给出系统输出。它在纯语音对话中是公用的。如果playOnce属性为真,陈述就在每页只播放依次。
&lt;Statementid=“...”playOnce=“...”ClientTest=“...”PromptFunction=“...”&lt;prompt.../&gt;
&lt;/Statement&gt;
bool playOnceplayOnce属性指定每页是否可激活1次以上的陈述控制。playOnce是具有TRUE缺省(如果未指定)的布尔属性,即,只执行1次陈述控制。例如,playOnce属性可以被用在其目的是输出电子邮件消息到终端用户的陈述控制。设定playOnce=“False”会给对话编写者提供启动读取电子邮件消息的页上的“repeat”功能的能力。
字符串ClientTestClientTest指定返回布尔值的客户端脚本函数,它确定在哪种环境下选择陈述控制用于输出。RunSpeech会激活ClientTest等于真的第一陈述。如果未指定,ClientTest条件就被认为是真。
字符串PromptFunction
PromptFunction指定一旦选择了陈述控制但在播放提示前要调入的客户端函数。它给了编写者对所要求的提示最后修改的机会。
Prompt[]Prompt提示阵列指定了提示对象的列表。提示也能指定选择条件(经客户函数),在RunSpeech执行期间,只选择具有真条件的第一提示用于重放。
&lt;SpeechQAid=QA_Welcome”ControlsToSpeechEnable=“Labell”Runat=“server”&lt;Statementid=“WelcomePrompt”&gt;
&lt;prompt bargeIn=“False”&gt;Welcome&lt;/prompt&gt;
&lt;/Statement&gt;
&lt;/SpeechQA&gt;
1.4确认控制确认控制是询问控制的特殊类型。它们会保持所有其它询问控制的性质和对象,但是,它们的激活不同。RunSpeech算法会检查在ControlsToSpeechEnable的回答控制的confirmThreshold中发现的信用分。如果信用分太低,就激活确认控制。如果回答控制的信用分低于confirmThreshold,那么,就进行联编但是不调入onClientReco方法。对话编写者可以为每个QA控制指定一个以上的确认控制。RunSpeech会根据ClientTest指定的函数确定要激活哪个确认控制。
&lt;Answer ConfirmationThreshold=.../&gt;
&lt;Confirm&gt;
...all attributes and objects of Question...
&lt;/Confirm&gt;
1.5回答控制回答控制被用于指定话音输入资源和特点。它包含一组关于基本控制的语法。注意,可以独立于问题使用回答,例如在多模态应用且没有提示时、或者额外回答可以启动用户主动(initiative)的电话应用中。回答控制可以被询问控制、引发事件或明显的范围直接激活。如果在回答控制中不指定语法对象,就丢弃排除。
<pre listing-type="program-listing"><Answer id=″...″ scope=″...″ StartEvent=″...″ StopEvent=″...″ ClientTest=″...″ onClientReco=″...″ onClientDTMF=″...″ autobind=″...″ server=″...″ ConfirmThreshold=″...″ RejectThreshold=″...″> <grammar.../> <grammar.../> ... <dtmf.../> <dtmf.../> ... <bind.../> <bind.../> ...</Answer></pre>字符串ScopeScope在页上保持任何被命名元素的id。Scope被用在回答控制中用于给用户主动可用性(混合的任务主动即,服务跳跃离题(service jump digression))语法。如果在回答控制中指定了范围,那么,就在激活相应于上下文控制子树中的基本控制的QA控制的任何时候激活Scope。
字符串StartEventStartEvent指定了来自要激活回答控制的基本控制的事件名称(起动Reco对象)。它通常被用在多模态应用中,例如onMouseDown,用于tap-and-talk。
字符串StopEventStopEvent指定来自号使回答控制失效的基本控制的事件名称(停止Reco对象)。它通常被用在多模态应用中,例如onMouseUp,用于tap-and-talk。
字符串ClientTestClientTest指定返回布尔值的客户端脚本函数,它确定在哪种环境下另外会被范围或询问控制选择的询问控制是激活的。例如,该测试被用在询问控制激活‘correction’回答控制时‘correction’回答控制使自己失效的确认期间,但是,不希望是混合主动(只有认可/否认回答控制是激活的)。或者许可服务跳跃的被规定范围的回答控制可以通过指定一个测试来确定更灵活的激活方法,该测试的真或伪取决于对话的另一部分。如果未指定,回答控制的条件被认为是真。
Grammar[]GrammarsGrammars访问语法对象列表。
DTMF[]DTMFsDTMFs保持DTMF对象阵列。
Bind[]BindsBinds保持需要将回答控制语法结果(dtmf或讲话)映射到控制值中的联编对象列表。所有为回答指定的联编都在识别相关输出时执行。如果没有指定联编,识别返回的SML输出就被联编到在QA控制的ControlsToSpeechEnable中指定的控制。
字符串onClientRecoonClientReco指定了在可以使用讲话识别结果时要调入的客户端函数名称。
字符串onClientDTMFonClientDTMF保持在可以使用DTMF识别结果时要调入的客户端函数名称。
boolean autobindautobind的值确定是否为来自回答控制的识别返回实现系统缺省联编。如果未指定,缺省为真。将autobind设定为伪是让系统不执行自动联编的指令。
字符串serverserver属性是指定要执行识别的服务器的URI的可选属性。该属性重写了整体话音服务器属性的URI。
integer ConfirmThreshold保持表示信用水平的值,在该水平以下在QA控制中识别回答后确认控制问题会被自动立即引发。合法值是0-100。
注意,同时指定联编陈述和onClientReco脚本时,得到的标签的语义是在onClientReco中指定脚本前实现的联编。
integer RejectThresholdRejectThreshold指定了考虑返回所识别的说法的最低信用分。如果整个信用低于该水平,NoReco事件就被丢弃。合法值是0-100。
1.5.1语法语法对象包含关于选择和语法内容的信息以及用于处理结果的方法。所有被定义的性质都是读/写性质。
&lt;GrammarClientTest=“...”Source=“...”&gt;
...grammar rules...
&lt;/Grammar&gt;
字符串ClientTestClientTest性质参考客户端布尔函数,它确定在哪种条件下语法是激活的。如果在回答控制中指定了多个语法(例如,实现系统混合主动策略,或减小进行差的对话时可能回答的混乱),只选择具有真ClientTest函数的第一语法用于RunSpeech执行期间的激活。如果,未指定该性质,就假设为真。
字符串SourceSource访问要加载的语法的URI,如果被指定的话。
字符串InlineGrammarInlineGrammar访问语法的文本,如果内联指定的话。如果该性质不空,Source属性就被忽略。
1.5.2联编用于联编的对象模型紧密遵循其对端客户端标签。联编可以被同时指定给讲话语法和在单个回答控制中返回的DTMF识别。
&lt;bindValue=“...”TargetElement=“...”TargetAttribute=“...”Test=“...”/&gt;
字符串Value
Value指定要被联编到目标元素的文本。它被指定为从识别输出的SML上的XPath。
字符串TargetElementTargetElement指定要应用联编陈述的基本控制的id。如果未指定,就假设它是相关QA控制的ControsToSpeechEnable。
字符串TargetAttributeTargetAttribute指定TargetElement控制上的属性,在TargetElement中联编值。如果未指定,就假设目标元素的文本性质。
字符串TestTest属性指定在联编机制上必须评价为真的条件。它被指定为从识别输出的SML受到XML模式。
1.5.2.1自动联编识别上返回到话音启动的基本控制的缺省行为是要将确定性质联编到该基本控制。这对于对话控制以便检验来自各轮(甚至各页)的基本控制的识别结果是有用的。回答控制将根据接收识别结果执行下面的作用1.将SML输出树联编到基本控制的SML属性中;2.将说法的文本联编到基本控制的SpokenText属性中;3.将识别器返回的信用分联编到基本控制的Confidence属性中。
除非在回答控制上指定autobind=“False”属性,回答控制将在基本控制上执行下面的作用1.将SML输出树联编到SML属性中;2.将说法的文本联编到SpokenText属性中;3.将识别器返回的信用分联编到基本控制的Confidence属性中。
属性中已有的任何值将会被重写。自动联编发生在所有编写者指定联编命令前,因此就是在所有onClientReco脚本前(它也可以联编到这些属性)。
1.5.3 DTMFDTMF可以被回答控制用在电话应用中。DTMF对象主要应用于相同回答的不同模态语法(键区输入语法而非话音输入语法)。DTMF内容模型与客户端输出标签DTMF元素的内容模型很匹配。用DTMF对象的targetAttribute属性指定用于DTMF返回的联编机制。
<pre listing-type="program-listing"><DTMFfirstTimeout=“...”interDigitTimeout=“...”numDigits=“...”flush=“...”escape=“...”targetAttribute=“...”ClientTest=“...”></DTMF>integer firstTimeout</pre>在激活和出现超时事件前的第一键入之间的几毫秒数。
Integer interDigitTimeout等候出现超时事件之前的按键之间的几毫秒数。
Int numDigitsDTMF识别期间许可的最大键输入数。
bool flush陈述是否在识别开始前刷新电话服务器DTMF缓冲的标志。设定刷新为伪许可DTMF键输入被存储在识别/页调入之间,它许可用户‘type-ahead’。
字符串escape保持将被用于结束DTMF识别的键的串值(例如‘#’)。
字符串targetAttributeTargetAttribute指定了要联编值的基本控制上的性质。如果未指定,就假设它是基本控制的Text性质。
字符串ClientTestClientTest性质参考客户端布尔函数,该函数确定在哪种条件下DTMF语法是激活的。如果在DTMF对象中指定了多个语法,就只选择具有真ClientTest函数的第一语法用于在RunSpeech执行期间激活。如果未指定该性质,就假设为真。
1.5.4 DTMF语法DTMF语法将键映射到与该键有关的输出值。下面的例子显示了如何将“1”和“2”键映射到文本输出值。
&lt;dtmfgrammar&gt;
&lt;key value=“1”&gt;Seattle&lt;/key&gt;
&lt;key value=“2”&gt;Boston&lt;&lt;/key&gt;
&lt;/dtmfgrammar&gt;
1.6命令控制命令控制是可以在任何QA控制中定义的回答控制的特殊变量。命令控制由用户输入形成,这些命令控制不是对将来问题的回答(例如,帮助、重复、取消)且不需将识别结果联编到基本控制中。如果QA控制指定了激活范围,命令语法对于范围中的每个QA控制就是激活的。因此,命令不需被问题或事件直接激活,它的语法被独立于回答控制建立过程并行激活。在范围较低的QA控制的相同类型命令控制可以用上下文敏感行为来重写高级命令(甚至是不同/扩展后的语法,如果需要的话)。
&lt;Commandid=“...”scope=“...”type=“...”RejectThreshold=“...”onClientReco=“...”&gt;
&lt;Grammar...&gt;
&lt;dtmf...&gt;
&lt;/Command&gt;
字符串ScopeScope保持基本控制的id。Scope被用在命令控制中用于给命令语法的可用性规定范围。如果为命令控制指定了范围,就会在激活相应于上下文控制的子树中基本控制的QA控制的任何时候激活命令的语法。
字符串typeType指定了命令的类型(例如‘帮助’、‘取消’等)以便允许在范围树的低级重写相同类型的命令。在该属性中任何串值都是可能的,所以是由编写者来保证类型的正确使用。
Integer RejectThresholdRejectThreshold指定了识别引发命令所需的最低识别信用水平(可能在要求高于普通信用的信用时用到,例如在执行‘取消’命令的结果前)。合法值是0-100。
字符串onClientRecoonCommand指定了在命令控制的语法的识别上执行的客户端脚本函数。
Grammar Grammar将听到命令的grammar对象。
DTMF []DTMF将激活命令的dtmf对象。
2.起始和对话流的类型用上述控制,可以开发多种形式的起始,下面提供了一些实例。
2.1混合主动对话混合起始对话提供了以问一个问题来认可对多个控制的输入的能力。例如,对问题“您的旅行计划是什么?”的回答可以提供用于初始城市对话框控制、目的城市对话框控制和日程控制的值(“在9月30日从普牙卢普飞到雅基马”)。
编码混合起始对话的固定方法是手写混合起始语法和相关联编陈述,并将它应用于单个控制。
下面的实例显示了用于关于旅行的简单混合起始语音相互作用的单页。第一QA控制指定了混合主动语法和联编以及要求两项的相关提示。第二和第三QA控制不是混合主动,所以用缺省直接联编到它们各自的基本控制(所以不要求联编陈述)。RunSpeech算法将根据属性“SpeechIndex”和它们的基本控制是否保持有效值来选择QA控制。
<pre listing-type="program-listing"><%@Page language=“c#”AutoEventWireup=“false”inherits=“SDN.Page”%>&lt;dp n="d74"/&gt;<body><Form id=″WebForm1″ method=post runat=″server″><ASPLabel id=″Label1″runat=″server″>Departurecity</ASPLabel><ASPTextBox id=″TextBox1″runat=″server″/><br><ASPLabel id=″Label2″runat=″server″>Arrivalcity</ASPLabel><ASPTextBox id=″TextBox2″textchanged=″TextChanged″runat=″server″/><!-speech information--><SpeechQA id=″QAmixed″controlsToSpeechEnable=″TextBox1″speechIndex=″1″ runat=″server″> <Question id=″Q1″Answers=″A1″> <prompt>″Please say the cities you want to flyfrom and to″</prompt> </Question> <Answer id=″A1″> <grammar src=″...″/> <bind targetElement=″TextBox1″value =″/sml/path1″/> <bind targetElement=″TextBox2″value=″/sml/path2″/> </Answer></SpeechQA><SpeechQA id=″QA1″controlsToSpeechEnable=″TextBox1″speechIndex=″2″runat=″server″> <Question id=″Q1″Answers=″A1″> <prompt>″What′s the departure city?″</prompt> </Question> <Answer id=″A1″> <grammar src=″...″/> </Answer></SpeechQA><SpeechQA id=″QA2″controlsToSpeechEnable=″TextBox2″speechIndex=″3″runat=″server″>&lt;dp n="d75"/&gt;<Question id=“Q1”Answer=“A1”><prompt>“What’s the arrival city”</prompt></Question><Answer if=“A1”><grammar src=“...”/&gt;</Answer></SpeechQA></Form></body></html></pre>2.2复杂混合起始应用开发者可以对具有不同主动水平的相同询问控制指定几个回答。指定要在问问题时选择一个问题的条件,这取决于它们要求的起始起始设定。下面提供了一个实例<pre listing-type="program-listing"><SpeechQA id=″QA_Panel2″ ControlsToSpeechEnable=″Panel2″ runat=″server″> <Question answers=″systemInitiative,mixedInitiative″ .../> <Answer id=″systemInitiative″ ClientTest=″systemInitiativeCond″ onClientReco=″SimpleUpdate″> <grammar src=″systemInitiative.gram″/> </Answer> <Answer id=″mixedInitiative″ ClientTest=″mixedInitiativeCond″ onClientReco=″MixedUpdate″> <grammar src=″mixedInitiative.gram″/> </Answer></SpeechQA></pre>应用开发者可以在一个QA控制中指定几个询问控制。一些询问控制可以允许混合起始起始风格的回答,同时恰询问控制更直接。通过在这些询问控制上编写条件应用开发者可以按对话状态在问题之间选择。
在下面的实例中,混合起始问题同时提问两个文本框的值(例如‘您的旅行计划时什么?’)和调入混合起始回答(例如‘从伦敦到西雅图’)。如果失败了,那么就分别提问每个文本框的值(例如‘您从哪出发?’和‘您要去哪?’)但是,根据条件,仍然可以激活混合起始语法,这样,允许用户提供两个值。
<pre listing-type="program-listing"><SpeechQA id=″QA_Panel2″ ControlsToSpeechEnable=″TextBox1,TextBox2″ runat=″server″><Question ClientTest=″AllEmpty()″ answers=″AnsAll″ .../><Question ClientTest=″TextBox1IsEmpty()″ answers=″AnsAll,AnsTextBox1″ .../><Question ClientTest=″TextBox2IsEmpty()″ answers=″AnsAll,AnsTextBox2″ .../> <Answer id=″AnsTextBox1″ onClientReco=″SimpleUpdate″> <grammar src=″AnsTextBox1.gram″ /> </Answer> <Answer id=″AnsTextBox2″ onClientReco=″SimpleUpdate″> <grammar src=″AnsTextBox2.gram″/> </Answer><Answerid=“AnsAll”ClientTest=“IsMixedInitAllwed()”onClientReco=“MixedUpdate”><grammar src=“AnsAll.gram”/></Answer></SpeechQA></pre>2.3用户起始与命令控制类似,标准QA控制可以指定与其语法的激活。类似于命令控制,该QA控制将激活来自相关回答控制的语法,无论何时在该语法中激活另一QA控制。注意,它的询问控制只会被问到QA控制是否自激活。
<pre listing-type="program-listing"><SpeechQAid=“QA_Panel2”ControlsToSpeechEnable=“Panel2”Runat=“server”><Question.../&gt;<Answer id=“AnswerPanel2”scope=“Panel2”onClientReco=“UpdatePanel2()”><grammar src=“src=“Panel2.gram”/&gt;</Answer>&lt;/SpeechQA></pre>这对于对话是有用的,这些对话允许‘服务跳跃’——关于不与即将到来的询问控制直接相关的对话的一些部分的用户响应。
2.4短超时确认应用开发者可以如常编写确认,但是,设定一个短超时。在超时处理程序中,提供代码认可当前值作为准确值。
<pre listing-type="program-listing"><SpeechQAid=“QA_Panel2”ControlsTospeechEnablr=“”Panel2”Runat=“server”><Confirm timeout=“20”onClientTimeout=“AcceptConfirmtion”.../&gt;<Answer id=“CorrectPanel2”onClientReco=“UpdatePanel2()”><grammar src=“Panel2.gram”/&gt;</Answer></SpeechQA></pre>2.5动态提示建立和编辑在选择询问控制之后但在选取和播放提示之前调入promptFunction脚本。它让应用开发者在最后一刻建立或修改提示。在下面的实例中,它被用于根据用户经验水平来改变提示。
<pre listing-type="program-listing"> <script language=javascript> function GetPrompt(){if(experiencedUser==true) Prompt1.Text=″What service do you want?″;else Prompt1.Text=″Please choose between e- mail, calendar and news″;return; } </script> <SpeechQA id=″QA Panel2″ ControlsToSpeechEnable=″Panel2″ runat=″server″> <Question PromptFunction=″GetPrompt″...><Prompt id=″Prompt1″/> </Question><Answer.../&gt;</SpeechQA></pre>2.6利用语义关系识别和语义关系的使用可以通过研究onReco事件处理程序中识别器结果来进行。
&lt;script language=“javascript”&gt;
function Reco(){/*应用开发者可以访问用识别器或识别服务器返回的SML。如果识别了语义关系(象体育新闻),各个元素的信用就可以增加或采取其它适当作用。
<pre listing-type="program-listing">*/}</script><SpeechQAid=“QA-Panel2”&lt;dp n="d79"/&gt;ControlToSpeechEnable=“Panel2”Runat=“server”><Question.../&gt;<Answer onClientReco=“Reco”><grammar src=“Panel2.gram”/&gt;</Answer></SpeechQA></pre>3.RunSpeech的实现和应用需要一个机制来为纯语音客户提供适当反映话音启动页所需的信息。这种机制必须提供对话逻辑的执行和用户提示的维持状态以及应用开发者指定的语法激活对于多模态客户不需要这种机制。在多模态的情况下,客户装置的用户可以看到包含话音启动控制的页。客户装置的用户可以用多模态范例向任何预期命令中的视觉话音启动控制中提供话音输入。
纯语音客户用来反映话音启动页的机制是RunSpeech脚本或算法。RunSpeech脚本依赖于QA控制的SpeechIndex属性和下面要讨论的speechGroup控制。
3.1 SpeechControl在运行期,系统分析控制脚本或具有服务器控制的网页并产生服务器控制的树状结构。通常,树的根是Page控制。如果控制脚本使用该定制或用户控制,该定制或用户控制的子树就被扩展。树的每个节点有一个ID且易于在扩展时在树中有名称冲突。为了解决可能的名称冲突,该系统包括NamingContainer概念。树中的任何节点可以实现NamingContainer,其子位于该名称空间中。
QA控制可以出现在服务器控制树中。为了容易地解决SpeechIndex和管理客户端反映,提供SpeechGroup控制。应用开发者隐瞒了Speechgroup控制。
产生一个Speechgroup控制并逻辑地连接到在其子树中包含QA控制的每个NamingContainer节。QA和SpeechGroup控制被认为时其直接NamingContainer的SpeechGroup的成员。该顶级SpeechGroup控制被连接到页对象。该成员关系逻辑地构成了QA控制和SpeechGroup控制的一个树——逻辑话音树。
对于简单的话音启动页或脚本(即,不包含其它NamingContainer的页),只产生根SpeechGroup控制并在将该页发送到纯语音客户之前把它放在页的服务器控制树中。SpeechGroup控制维护关于在该页上QA控制的数量和反映级(rendering order)的信息。
对于包含一个或多个QA控制和一个或多个NamingContainer的组合的页,产生多个SpeechGroup控制用于页的一个SpeechGroup控制(如上所述)或用于每个NamingContainer的SpeechGroup控制。对于包含多个NamingContainer的页,页水平(page level)的SpeechGroup控制维护如上所述的QA控制信息以及复合控制的数量和反映级。与每个NamingContainer有关的SpeechGroup控制保持每个组合中的QA数量和反映级。
SpeechGroup控制的主要工作是保持QA控制的列表和每页上的SpeechGroup和包含复合控制的QA控制列。当产生客户端标记脚本(例如HTML)时,每个SpeechGroup在客户端写出QACollection对象。QACollection有QA控制和QACollection的列表。它相应于逻辑服务器端话音树。RunSpeech脚本将在纯语音对话处理期间询问用于下一QA控制的页水平QACollection对象以便调用。
位于每页上的页水平的SpeechGroup控制也响应·确定请求客户是纯语音客户;和·产生公用脚本和支持用于每页上的所有QA控制的结构。
当第一SpeechGroup控制反映时,它询问用于浏览器字符串的System.Web.UI.Page.Request.Browser性质。然后,该性质被送到用于页上的每个QA控制的RenderSpeechHTML和RenderSpeechScript方法。然后QA控制反映适当的客户(多模态或纯语音)。
3.2 SpeechGroup控制的产生在服务器端页加载期间,onLoad事件被发送到页上的每个控制。接收onLoad事件的第一QA控制产生页水平的SpeechGroup控制。以下面的方式产生SpeechGroup控制(假设页包含复合控制)每个QA控制从运行时期代码接收onLoad事件。onLoad用于QA■得到QA的NamingContainer N1■在N1的子中搜索SpeechGroup
○如果已经存在,就用该SpeechGroup登记该QA控制。onLoad返回。
○如果没发现■产生新的speechGroup G1,将它插入N1的子中■如果N1不是页,就发现N1的NamingContainer N2■在N2的子中搜索SpeechGroup,如果存在,就说G2,将G1加到G2。如果不存在,就产生新的一个G2,将它插入N2的子中。
■依次递推直到NamingContainer是页(顶级)为止。
在服务器端页反映期间,反映事件被发送到话音启动页。当页水平的SpeechGroup控制接收Render事件时,它产生客户端脚本以包括RunSpeech.js并将它插入页中,该页最后被发送到客户装置。它也调入所有它的直接子以便反映话音相关HTML和脚本。如果子是SpeechGroup,该子就再调入它的子。以这种方式,服务器反映随着服务器端逻辑话音树发生。
当SpeechGroup反映时,它让自己的子(可以时QA或SpeechGroup)以它们的SpeechIndex的顺序反映话音HTML和脚本。但是,SpeechGroup是被隐藏的且本质上没有SpeechIndex。实际上,SpeechContainer会用相同的SpeechIndex作为它的NamingContainer,即它所连接的NamingContainer。NamingContainer经常是UserControl或其它视觉控制,编写者可以对它设定SpeechIndex。
3.3 RunSpeechRunSpeech的目的是许可经在脚本中指定的逻辑或客户机上的逻辑的对话流。在一个实施例中,在外部脚本文件中指定Runspeech,用SpeechGroup控制的服务器端反映产生的单线加载RunSpeech,例如&lt;script language=“javascript”src=“/scripts/RunSpeech.js”/&gt;
RunSpeech.js脚本文件应暴露一种用于在客户机上验证(validating)的方法,这里脚本已经正确加载和有正确的版本id等。由作为内联函数的页等级(pageclass)激活验证脚本,在尝试加载该文件后执行内联函数。
链接到外部脚本在功能上相当于指定它内联,且它还更有效(由于浏览器能隐藏该文件)和清楚(由于页不与类函数混淆)。
3.4事件3.4.1事件连接(event wiring)
tap-and-talk多模态可以通过使语法激活与onMouseDown事件协作来启动。页根据多个控制之间的关系(如QA控制中的ControlsToSpeechEnable性质中指定的那样)产生这样做的连接脚本。
例如,假设aspTextBox和其伴随QA控制添加语法,&lt;input&gt;和&lt;reco&gt;元素被每个控制的反映方法输出。要添加语法激活命令的连接机制被页产生的客户端脚本执行,它在用于激活事件的任何现有处理程序之前改变要添加激活命令的基本控制&lt;!--Control output--&gt;
&lt;input id=″TextBox1″type=″text″ .../&gt;
&lt;reco id=″Reco1″.../&gt;
&lt;grammar src=″...″/&gt;
&lt;/reco&gt;
&lt;!-- Page output --&gt;
&lt;script&gt;
TextBox1.onMouseDown=″Reco1.Start();″+TextBox1.onMouseDown;&lt;/script&gt;
通过缺省,经onmousedown和onmouseup事件接通中心系统,但是,StartEvent和StopEvent都可以由网页编写者来设定。
文本框输出保持独立于该修改,如果存在其它处理程序就如常处理该事件。
3.4.2页等级性质页也包含可以在运行时期用于脚本的下列性质。
SML——用于控制的ID的名/值对,它与识别返回的SML关联。
SpokenText——用于控制的ID的名/值对,它与识别器返回的信用关联。
4.RunSpeech算法RunSpeech算法被用于驱动驱动客户装置上的对话流。它可以包括系统提示和对话管理(通常用于纯语音对话),和/或话音输入的处理(纯语音和多模态对话)。它被指定为来自每个相关话音启动页的URI参考的脚本文件(相当于内联嵌入脚本)。
以下面的方式进行用于纯语音浏览器的页的浏览RunSpeech模块或函数工作如下(响应变为“complete”的document.onreadystate调入RunSpeech)。
(1)以话音索引排序发现第一激活QA控制(确定QA控制是否如下是激活的)。
(2)如果没有激活的QA控制,就发送该页。
(3)否则,运行QA控制。
QA控制被认为是激活的条件是如果且仅如果且仅如果(1)QA控制的ClientTest不存在或返回真,和(2)QA控制包含激活询问控制或陈述控制(以源次序测试),和(3)a.QA控制只包含陈述控制,或b.QA控制的ControlToSpeechEnable所参考的控制中的至少一个有空或缺省值。
询问控制被认为是激活的条件如果且仅如果(1)询问控制的ClientTest不存在或返回真,和(2)询问控制包含激活提示对象。
提示对象被认为是激活的条件是如果且仅如果(1)提示对象的ClientTest不存在或返回真,和(2)提示对象的计数不存在或小于或等于本源询问控制的计数。
QA控制运行如下(1)确定哪个询问控制或陈述控制是激活的并累积其计数。
(2)如果陈述控制是激活的,就播放提示并退出。
(3)如果询问控制是激活的,就播放提示并起动用于每个激活的回答控制和命令控制的多个Reco。
回答控制被认为是激活的条件是如果且仅如果(1)回答控制的ClientTest不存在或返回真,和(2)a.在激活的询问控制的回答字符串中参考回答控制,或b.回答控制在Scope中。
命令控制被认为是激活的条件是如果且仅如果(1)它在Scope中,和(2)在范围树中没有更低的同类型命令控制。
RunSpeech依赖于事件以继续驱动对话——如上所述,它会在运行单个QA控制后停止。事件处理程序因Prompt.onComplete、Reco.onReco、Reco.onSilence、Reco.onMaxTimeout和Reco.onNoReco而被包括在内。依次描述Prompt.onComplete、Reco.onReco、Reco.onSilence、Reco.onMaxTimeout和Reco.onNoReco中的每一个。
RunSpeechOnComplete工作如下(1)如果激活的Prompt对象有指定的onClientComplete函数,就调入它。
(2)如果激活的Prompt对象被包含在陈述控制中、或在没有激活的回答控制的询问控制中,就调入RunSpeech。
RunSpeechOnReco工作如下(1)一些缺省联编发生—SML树被联编到SML属性且文本被联编到ControlsToSpeechEnable中的每个控制的SpokenTest属性。
(2)如果识别结果的信用值低于激活的回答控制的ConfidenceThreshold,就运行Confirmation逻辑。
(3)否则,如果激活的回答控制有指定的onClientReco函数,就调入它,然后调入RunSpeech。
RunSpeechOnReco负责产生和设定ControlsTospeechEnable的SML、spokenText和Confidence性质。然后SML、SpokenText和Confidence性质可在运行时期用于脚本。
RunSpeechOnSilence、RunSpeechOnMaxTimeout和RunSpeechOnNoReco都以相同方式工作(1)调入适当的OnClientXXX函数,如果指定的话。
(2)调入RunSpeech。
最后,Confirmation逻辑工作如下(1)如果激活的回答控制的本源QA控制包含任何确认控制,就发现第一激活确认控制(确认控制的激活以与询问控制的激活完全相同的方式来确定)。
(2)如果没发现激活的确认控制,就调入RunSpeech(3)另外,运行QA控制,用所选择的确认控制作为激活的询问控制。
对于多重模态浏览器,只执行语法加载和事件调度步骤。
权利要求
1.一种具有指令的计算机可读媒体,当在计算机上执行它时产生用于客户机/服务器系统中的客户机的客户端标记,这些指令包括一组控制,用于定义对话,这些控制包括至少一个询问控制,它用于产生关于问题的音频提示的标记;和回答控制,用于产生关于用于识别的语法的标记,每个控制具有指示相关控制是否可用于激活的属性;和模块,当在客户机上执行它时,产生对话作为函数,它的控制被激活。
2.根据权利要求1的计算机可读媒体,其中,询问控制激活回答控制。
3.根据权利要求2的计算机可读媒体,其中,这些控制包括命令控制,用于产生关于语法的标记,用于在标记中阅览,帮助任务,并重复音频提示。
4.根据权利要求3的计算机可读媒体,其中,这些控制包括确认控制,用于产生关于确认所识别的结果正确的标记。
5.根据权利要求4的计算机可读媒体,其中,确认控制被激活作为信用水平或收到的结果的函数。
6.根据权利要求5的计算机可读媒体,其中,回答控制包括关于信用水平的属性。
7.根据权利要求5的计算机可读媒体,其中,确认控制激活认可控制以认可所识别的结果。
8.根据权利要求5的计算机可读媒体,其中,确认控制激活否认控制以否认所识别的结果。
9.根据权利要求5的计算机可读媒体,其中,确认控制激活校正控制以校正所识别的结果。
10.根据权利要求1的计算机可读媒体,其中,询问控制激活回答控制。
11.根据权利要求10的计算机可读媒体,其中,回答控制包括一个使收到的结果与第一组控制中的一个关联的机制。
12.根据权利要求1的计算机可读媒体,还包括第二组控制,用于产生关于在客户机上的视觉反映的标记,其中,上述第一组控制中的每一个都与第二组控制中的至少一个关联。
13.一种具有指令的计算机可读媒体,在计算机上执行它时定义对话,这些指令包括一组控制,用于定义对话,这些控制包括至少一个询问控制,用于产生问题的音频提示;和回答控制,使用用于识别的语法,每个控制都有指示有关控制是否可用于激活的属性;和模块,在计算机上执行它时产生对话作为函数,激活该函数的控制。
14.根据权利要求13的计算机可读媒体,其中,询问控制激活回答控制。
15.根据权利要求14的计算机可读媒体,其中,回答控制包括一个机制,它使收到的结果与第一组控制中的一个关联。
16.根据权利要求15的计算机可读媒体,其中,机制包括联编识别值。
17.根据权利要求16的计算机可读媒体,其中,机制包括发布与联编操作有关的事件。
18.一种计算机可实现的方法,用于在计算机上执行识别和/或音频提示,该方法包括用一组控制定义对话,该组控制包括至少一个询问控制,用于产生问题的音频提示;和回答控制,使用用于识别的语法,每个控制有指示相关控制是否可用于激活的属性;和产生一个对话,作为执行被激活的相关控制的代码的函数。
19.根据权利要求18的计算机可实现方法,其中,产生对话包括经询问控制激活回答控制。
20.根据权利要求19的计算机可实现方法,其中,该组控制包括命令控制,用于产生关于语法的代码,用于在标记中阅览,帮助任务,并重复音频提示。
21.根据权利要求20的计算机可实现方法,其中,该组控制包括确认控制,用于产生关于确认所识别的结果正确的代码。
22.根据权利要求21的计算机可实现方法,其中,产生对话包括激活确认控制作为信用水平或收到的结果的函数。
全文摘要
提供多个控制,用于网络服务器产生客户端标记,这些包括包括识别和/或音频提示。这些控制包括多个对话元素,如询问、回答、确认、命令或陈述。一个模块通过利用在控制中携带的信息形成对话。
文档编号G06F3/01GK1417679SQ0215294
公开日2003年5月14日 申请日期2002年10月21日 优先权日2001年10月21日
发明者F·M·加兰尼斯, H·W·洪, J·D·雅各比, R·T·勒库切, S·F·泊特 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1