具体实施方式
现在参考附图描述本发明,在全部附图中,同样的参考标号指的是同样的元素。在以下描述中,为说明起见,描述了众多具体细节,以提供对本发明的全面理解。然而显然,本发明可以无需这些具体细节而实现。在其它实例中,公知的结构和设备以框图形式示出,以便描述本发明。
如在本申请中所使用的,术语“组件”和“***”等指的是计算机相关的实体,它们或者是硬件、硬件和软件的组合、软件或者是执行中的软件。例如,组件可以是,但不限于,运行在处理器上的进程、处理器、对象、可执行代码、执行的线程、程序和/或计算机。作为说明,运行在服务器上的应用程序和服务器都可以是组件。一个或多个组件可以驻留在进程和/或执行中的线程内,且组件可以位于一台计算机上和/或分布在两台或多台计算机之间。
如此处所使用,术语“推断”和“推论”一般指的是从通过事件和/或数据而捕捉到的一组观察值中推出或推断***、环境和/或用户的状态的过程。推论可以例如被用来标识特定的上下文或动作,或者可以生成状态的概率分布。推论可以是概率性的,即,基于对数据和事件的考虑对所关心的状态的概率分布的计算。推论也可以指的是用于从一组事件和/或数据中组成更高级的事件的技术。这样的推论导致从一组观察到的事件和/或存储的事件数据中构造出新的事件或动作,而不论原先的事件是否在时间上紧密相关,也不论原先的事件和数据是来自一个还是若干个事件和数据源。
最初参考附图,图1示出了根据本发明在运行时推断模式的类型推断***100。本发明的主要方面是在运行时在实际值上使用模式推断,并使用该模式来创建可以被有效且方便地访问的数据的专用表示。
继续以上示例,并假定对类型对象的值的后期绑定访问(例如,在Visual Basic中),可以使用以下伪代码来表示该新颖机制:
XmlDocument b=new XmlDocument();b.Load(...);
Type T=InferSchemaAndGenerateCode(b);
object b=new XmlSerializer(T).Deserialize(...);
object s=b.Title;
实际文档实例d可以被用来生成运行时类型T,该类型T然后用于将文档T反串行化为动态类型T的对象图。因为T不已知为静态的,可以仅以后期绑定方式来针对文档编程(假定它含有静态类型object)。此处,由于进行正常对象处理的能力,将文档(XmlDocument b)加载至对象表示,然后访问该标题要有效得多。代码object b=new XmlSerializer(T).Deserialize(...);以及object s=b.Title;定义了对于对象的后期绑定访问,因为当编写类型b为何的代码时,该对象不已知为静态。然而,仍旧期望访问该对象。
参考背景技术一节的第二个示例,根据本发明,运行之前不需要定义类型Book。
存在若干方式来提高该进程的效率。首先,可以在InferSchemaAndGenerateCode算法中执行各种高速缓存策略。在连续加载若干文档的情况下,例如,可能期望首先针对之前推断出的模式来确认下一文档,如果成功,则不必推断新的模式,且生成新的类型。或者,只要加载了另一文档,就可以随时间精炼最初推断出的模式。更精确的类型提供更有效的访问。以下描述这些优化。
为支持这一方面,提供了包括接收数据流作为输入的推断组件102的***100。推断组件102基于输入数据的实际值在运行时处理输入数据流来推断模式104。模式104然后被用于创建作为该输入流数据的专用表示的推断出的输出数据,然后可以有效且方便地访问该输出数据。
图2示出了根据本发明提供运行时类型推断的方法。尽管为说明的简明性起见,此处例如以流程图形式示出的一个或多个方法被示出或描述为一连串动作,但是可以理解和领会,本发明不受动作顺序的限制,因为根据本发明,某些动作可以按与此处示出和描述的不同的顺序发生和/或与其它动作同时发生。例如,本领域的技术人员可以理解和领会,方法可以替换地被表示为诸如状态图中的一连串互相关联的状态或事件。而且,并非所有示出的动作都是实现根据本发明的方法所必需的。
在200处,***接收输入数据流。该输入数据可以是,仅举几个示例,XML(可扩展标记语言)文档形式、与由上下文无关语法描述的语言兼容的数据、以及由关系模式描述的关系表形式的数据。在202处,推断组件处理输入数据以在运行时从中推断模式。在204处,该模式被用于基于输入数据流的实际值来生成推断出的输出数据。
现在参考图3,示出了根据本发明运行时类型推断的概括方法。接收输入数据流300作为对该运行时进程的输入。在302处,在运行时为该输入数据推断模式。在304处,从推断出的模式生成源代码。在306处,源代码被编译成汇编码,汇编码可以是可执行代码。在308处,针对输入数据300的类型处理汇编码,并且将生成的类加载至存储器中。在310处,类被用于对原始数据输入流300反串行化来生成新创建和加载的类的实例312。然后可以有效并方便地访问实例312。
图4示出了根据本发明处理XML文档402的运行时类型推断的方法400。在XML和对象串行化的情况下,模式可以用于使用例如由微软公司提供的.NET架构中的现有xsd.exe工具来生成源代码,使用C#编译器编译该源代码,将汇编码加载至存储器中,并将原始文档反串行化为刚创建和加载的类的实例。然而,存在众多其它的方式来从推断出的模式中生成类,诸如Reflection.Emit或运行时代码生成的更轻便形式。.NET架构的Reflection名字空间便于在运行时查看汇编元数据以及创建汇编码。Reflection允许代码例如在运行时进行类型发现、查看汇编元数据以及动态地调用汇编码。
从而,提供了使得接收XML文档402作为对运行时进程400的输入数据的方法。在404处,基于XML文档402的实际值在运行时推断模式。在406处,从已推断出的模式中生成源代码。在408处,源代码使用例如C#编译器被编译成汇编码,汇编码可以是可执行代码。在410处,使用汇编码来处理XML文档402的类型以生成被加载至存储器中的类。在412处,类被用于对原始数据输入流的反串行化,来创建新创建和加载的类的实例414。然后,可以有效并方便地访问实例414。
再次参考图1的示例伪代码,注意到,一旦推断出模式,不必使用一般的XML串行化器来将XML文档反串行化成对象图。而是,通过提供ISerializable界面的自定义实现,可以为串行化和反串行化均生成类型专用的代码。
尽管该示例是就XML文档和模式而言的,但是该机制同样能良好地应用于其它领域,诸如由上下文无关语法描述的语言、由关系模式描述的关系表等。另外,代替反串行化成对象,本发明中描述的机制同样良好地应用于使用模式信息生成专用的任何表示(例如,模式专用DOM(文档对象模型)或分析树)。例如,XMLDOM是XML文档的编程接口,并定义了可以访问和操纵XML文档的方式。称为XML分析器的程序可以被用来将XML文档加载至计算机的存储器中。当文档被加载时,可以通过访问DOM来检索和操纵文档信息。DOM表示XML文档的树视图。
图5示出了根据本发明通过使用高速缓存运行时推断进程500的所有或所选的点来优化该进程的方法。该方法包括高速缓存管理器502,它通过将输入数据504和/或中间数据和/或代码高速缓存至高速缓存存储器506中以在运行时进程500期间提供在所有或所选点处的高速缓存。在508处,数据输入流504在作为对该运行时进程的输入接收时,可以被高速缓存来提供更快速的访问,以生成运行时模式。在510处,可以为更快速访问和处理高速缓存模式以生成源代码。在512处,源代码被编译为汇编码,汇编码可以是可执行代码。可以为更快速访问而高速缓存源代码。在514处,可以为更快速访问和针对输入数据类型处理来高速缓存可执行汇编码以生成加载至处理存储器的类。在516处,可以高速缓存类类型,以准备针对原始数据输入流的反串行化进程。在518处,可以高速缓存作为新创建和加载的类的实例520的反串行化的输出。这提供了对实例520的更有效和方便的访问。
现在参考图6,示出了根据本发明在运行时优化相似输入数据的处理的方法。例如,在一行中连续加载若干文档的情况下,可能期望首先针对之前推断出的模式来确认下一文档,如果确认成功,那么不需推断新的模式。例如,在运行时推断出第一模式之后,接收第二数据集,使用针对第二数据集比较模式的成功(或失败)的度量。如果成功低于标准,那么从第二数据集推断出新模式,以此类推。否则,继续对第二数据集应用第一模式。
从而,在600处,标准被确定并被用于对多个相似的数据集应用推断出的模式。在602处,接收第一输入数据集。在604处,在运行时从第一数据集推断出第一模式。在606处,接收第二数据集。在608处,在运行时使用第一推断出的模式针对第二数据集使用确认进程。如果如在610处所检查的确认不成功,流程至612处,在那里从第二数据集中推断出新的模式。在614处,根据第二推断出的模式,并根据之前描述的进程的开发源代码、编译、反串行化等处理第二数据集。或者,在610处,如果确认成功,则如616处所示,对第二数据集应用第一推断出的模式。该进程然后返回至600来处理下一数据集。
该进程不限于两次迭代。例如,如果不使用前两个模式,可以导出第三推断模式,以此类推。然而,应该存在对当使用基本上相似的输入数据时可以推断出的模式的数量或深度的限制;否则,可能影响***性能。
图7示出了根据本发明通过随时间精炼推断出的模式来优化运行时推断进程的方法。只要加载另一文档,就可以随时间精炼所推断出的模式。更精确的类型提供更有效的访问。从而,在700处,设置标准以应用推断出的模式来从输入数据类型中导出类。例如,如果该标准设得相对较高,且针对输入数据处理的推断出的模式产生低于该标准的输出,则可以精炼推断算法,使得输出的推断出的模式最终将达到所期望的标准。在那一点处,将不再进行精炼。
在702处,接收第一输入数据集用于运行时的推断处理。在704处,通过基于输入数据的推断进程导出模式。在706处,进行检查来确定所推断出的模式是否是根据预定标准执行的。如果是,那么过程返回至706处来接收下一数据集。如果该执行不满足所期望的标准,那么流程从708处到710处以在运行时更新或精炼现有模式。流程然后返回至706处来接收下一数据集用于处理。或者,使得推断出的模式不能满足标准的同一输入数据集可以使用经更新的模式来重新处理,以确保在运行时使用最优输出。
图8示出了根据本发明使用便于自动化一个或多个特征的人工智能(AI)组件802的***800。本发明(例如,关于推断)可以使用各种基于AI的模式来执行本发明的各方面。例如,可以通过自动分类器***和进程来促进用于确定何时精炼与更新推断出的模式相关联的预定标准或者该推断出的模式的进程。
分类器是将输入属性向量x=(x1,x2,x3,x4,xn)映射至该输入属于一个类的置信度的函数,即f(x)=confidence(class)。这样的分类可以使用基于概率和/或基于统计的分析(例如,分解为分析效用和成本)来预测或推断用户想要自动执行的动作。
支持矢量机(SVM)是可以使用的分类器的一个示例。SVM通过寻找可能输入的空间中的超曲面来操作,其中超曲面试图从非触发事件中***出触发标准。直观上,这使分类对于接近但不同于训练数据的测试数据是正确的。可以使用其它有向或无向的模型分类方法包括,例如单纯贝叶斯、贝叶斯网络、决策树、神经网络、模糊逻辑模型、以及提供不同的独立模式的概率分类模型。此处所用的分类也包括用于开发优先级模型的统计回归。
可以通过本说明书容易地理解,本发明可以使用显式训练(例如,通过普通训练数据)以及隐式训练(例如,通过观察用户行为、接收外部信息)的分类器。例如,可以通过分类器构造器和特征选择模块内的学习或训练阶段来配置SVM。这样,分类器可以用于自动学习和执行多个功能,包括但不限于,根据预定标准确定何时更新或精炼之前推断出的模式、基于处理数据的类型(例如,财政对于非财政,个人对于非个人...)拉紧推断算法上的标准、以及一天中什么时间实现较严格的标准控制(例如,在较少影响***性能的晚上)。
现在参考图9,示出了用来执行所揭示的体系结构的计算机的框图。为了向本发明的各个方面提供额外的环境,图9及以下讨论旨在提供其中可实现本发明的各方面的合适的计算环境900的简要概括描述。尽管以上在一台或多台计算机上运行的计算机可执行指令的通用语境中描述了本发明,但是本领域的技术人员可以认识到,本发明也可以结合其它程序模块和/或作为软硬件的组合来实现。
一般而言,程序模块包括例程、程序、组件、数据结构等,它们执行特定的任务或实现特定的抽象数据类型。而且,本领域的技术人员可以理解,本发明方法可以使用其它计算机***配置来实现,包括单处理器或多处理器计算机***、小型机、大型机、以及个人计算机、手持式计算设备、基于微处理器的或可编程消费电子产品等,它们中的每一个都可以操作上耦合至一个或多个相关联的设备。
本发明所示方面也可以在分布式计算环境中实现,在分布式计算环境中,某些任务是由通过通信网络链接的远程处理设备来执行的。在分布式计算环境中,程序模块可以位于本地或远程存储器存储设备中。
计算机一般包括各种计算机可读介质。计算机可读介质可以是可由计算机访问的任何可用介质,且包括易失性和非易失性介质、可移动和不可移动介质。作为示例,而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现的用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由计算机访问的任何其它介质。
通信介质通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语“已调制数据信号”指的是这样一种信号,其一个或多个特征以在信号中编码信息的方式被设定或更改。作为示例,而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。上述中任一个的组合也应包括在计算机可读介质的范围之内。
再次参考图9,示出了用于实现本发明各方面的示例性环境900,包括计算机902,计算机902包括处理单元904、***存储器906和***总线908。***总线908将包括但不限于***总线906在内的***组件耦合至处理单元904。处理单元904可以是各种市场上可购买的任何处理器。双微处理器和其它多处理器体系结构也可以作为处理单元904使用。
***总线908可以是若干类型总线结构中的任一种,它可进一步与存储器总线(带有或不带有存储器控制器)、外设总线和使用各种市场上可购买的总线体系结构中任一种的局部总线互连。***存储器906包括只读存储器(ROM)910和随机存取存储器(RAM)912。基本输入/输出***(BIOS)存储在诸如ROM、EPROM、EEPROM等非易失性存储器910中,它包含有助于诸如启动时在计算机902中元件之间传递信息的基本例程。RAM 912还可以包括诸如静态RAM等用于高速缓存数据的高速RAM。
计算机902还包括内部硬盘驱动器(HDD)914(例如EIDE、SATA),其中内部硬盘驱动器914也可被配置为在合适的机箱(未示出)中供外部使用;磁软盘驱动器(FDD)916(例如读写可移动盘918)以及光盘驱动器920(例如读CD-ROM盘922,或者读写诸如DVD等其它高容量光介质)。硬盘驱动器914、磁盘驱动器916和光盘驱动器920可以分别通过硬盘驱动器接口924、磁盘驱动器接口926和光盘驱动器接口928连接到***总线908。用于外部驱动器实现的接口924包括通用串行总线(USB)和IEEE 1394接口技术中的至少一个或两者。
驱动器及其相关联的计算机可读介质提供数据、数据结构、计算机可执行指令等的非易失性存储。对于计算机902,驱动器和介质容纳以合适的数字格式的任何数据的存储。尽管以上计算机可读介质的描述涉及HDD、可移动磁盘和诸如CD或DVD等可移动光介质,但本领域的技术人员应该理解,计算机可读的其它类型的介质,诸如zip驱动器、磁带盒、闪存卡、盒式磁带等,也可以在示例性操作环境中使用,而且,任何这样的介质可以包含用于执行本发明的方法的计算机可执行指令。
多个程序模块可存储在驱动器和RAM 912中,包括操作***930、一个或多个应用程序932、其它程序模块934和程序数据936。操作***、应用程序、模块和/或数据的全部或部分也可以高速缓存在RAM 912中。可以理解,本发明可以使用各种市场上可购买的操作***或操作***的组合来实现。
用户可以通过一个或多个有线/无线输入设备,例如键盘938和诸如鼠标940等定点设备来向计算机902输入命令和信息。其它输入设备(未示出)可包括麦克风、IR遥控器、操纵杆、游戏垫、指示笔、触摸屏等。这些和其它输入设备通常通过耦合至***总线908的输入设备接口942连接到处理单元904,但可以由其它接口连接,诸如并行端口、IEEE 1394串行端口、游戏端口、USB端口、IR接口等。
监示器944或其它类型的显示设备也通过接口,诸如视频适配器946连接至***总线908。除监示器944之外,计算机一般包括其它***输出设备(未示出),诸如扬声器、打印机等。
计算机902可使用通过有线和/或无线通信至一个或多个远程计算机,诸如远程计算机180的逻辑连接在网络化环境中操作。远程计算机948可以是工作站、服务器计算机、路由器、个人计算机、便携式计算机、基于微处理器的娱乐设备、对等设备或其它常见的网络节点,并且一般包括相对于计算机902描述的多个或全部元素,但是为了简明起见,仅示出存储器存储设备950。所示逻辑连接包括至局域网(LAN)952和/或较大网络,例如广域网(WAN)954的有线/无线连接。这样的LAN和WAN网络环境在办公室和公司中是常见的,且促进诸如内联网等企业范围网络,它们全部都可连接至例如因特网的全球通信网络。
当在LAN网络环境中使用时,计算机902通过有线和/或无线通信网络接口或适配器956连接至局域网952。适配器956可促进至LAN 952的有线或无线通信,LAN 925也可包括部署在其上的用于与无线适配器956通信的无线接入点。
当在WAN网络环境中使用时,计算机902可以包括调制解调器958,或者连接至WAN 954上的通信服务器,或者具有用于通过诸如因特网等WAN 954建立通信的其它装置。调制解调器958可以是内置或外置的和有线或无线设备,它通过串行端口接口942连接至***总线908。在网络化环境中,相对于计算机902所述的程序模块或其部分可以存储在远程存储器/存储设备950中。可以理解,所示的网络连接是示例性的,且可使用在计算机之间建立通信链路的其它手段。
计算机902可以用于与操作上部署在无线通信中的任何无线设备或实体通信,例如,打印机、扫描仪、台式和/或便携式计算机、便携式数据助理、通信卫星、与无线可检测标签(例如公共电话亭、报亭、休息室)相关联的任何设备部分或位置、以及电话。这至少包括Wi-Fi和BluetoothTM(蓝牙)无线技术。因此,通信可以是使用常规网络的预定义结构,或仅仅是至少两个设备之间的特别通信。
Wi-Fi或无线保真允许从家里的睡椅、旅馆房间中的床或工作单位的会议室无线地连接至因特网。Wi-Fi是类似于蜂窝电话中使用的技术的无线技术,它使得例如计算机等设备能够在户内外基站范围内的任何地方收发数据。Wi-Fi网络使用称为IEEE 802.11(a、b、g等)的无线电技术来提供安全、可靠、快速的无线连接。Wi-Fi网络可以用于将计算机彼此连接、连接至因特网、以及连接至有线网络(使用IEEE 802.3或以太网)。Wi-Fi网络在非特许的2.4和5GHz无线电波段中例如以11Mbps(802.1a)或54Mbps(802.11b)数据速率运行,或者带有包括两种波段(双波段)的产品,因此网络可以提供类似于在许多办公室中使用的基本10BaseT有线以太网网络的真实性能。
现在参考图10,示出了根据本发明的示例性计算环境1000的示意框图。***1000包括一个或多个客户机1002。客户机1002可以是硬件和/或软件(例如,线程、进程、计算设备)。客户机1002可以例如,通过使用本发明容纳cookie和/或相关联的上下文信息。
***1000也包括一个或多个服务器1004。服务器1004也可以是硬件和/或软件(例如,线程、进程、计算设备)。服务器1004可以例如,通过使用本发明容纳执行变换的线程。客户机1002与服务器1004之间的一种可能的通信可以是以适用于在两个或多个计算机进程之间传输的数据包的形式。数据包可以包括,例如cookie和/或相关联的上下文信息。***1000包括通信架构1006(例如,诸如因特网等全球通信网络),它可以用于促进客户机1002与服务器1004之间的通信。
可以通过有线(包括光纤)和/或无线技术来促进通信。客户机1002操作上连接至可以用于存储对客户机1002本地的信息(例如,cookie和/或相关联的上下文信息)一个或多个客户机数据存储1008。类似地,服务器1004操作上连接至可使用来存储对服务器1004本地的信息的一个或多个服务器数据存储1010。
以上描述包括本发明的示例。当然,不可能为描述本发明而描述每个可想象的组件或方法的组合,但是本领域的普通技术人员可以认识到,还可能有本发明的众多其它组合和排列。从而,本发明旨在包括落入所附权利要求书精神和范围内的所有这样的变更、修改和变化。而且,就或者在详细描述中或者在权利要求书中使用的术语“包括”而言,当被用作权利要求书中的过渡词时,这样的术语旨在是包含性的,类似于解释术语“包含”的方式。