本发明基于物流管理软件平台,借鉴了现有的自然语言分析技术,自主开发了应用于物流管理软件的一系列语言分析和指令分析的算法和流程,能够对用户输入的自然语言类型的命令进行解析,并一定程度上支持用户输入自然语言的模糊性和多义性,构建了可以直接操作物流管理软件的智能指令式机器人。用户可以通过输入语言直接操作物流管理软件。本发明依靠的技术平台是一款综合性的物流管理软件,针对大型管理软件界面复杂、操作繁琐、用户上手困难的通病,利用本发明创建的智能指令式机器人,用户能够通过简单、更接近于日常语言的指令来直接操作系统,人机交互更加人性化,上手更快,并有利于提高操作效率。
在本发明所设计的智能机器人里面,操作人员可以直接输入自然语言类型的命令:比如:“创建运单发货方为百事可乐,货物为500公斤可乐”或者“创建财务凭证,对象为张老大,应收5000快”或者“搜索最近一个月成都站点的出库单”等等。通过智能机器人的语义分析引擎和指令分析引擎自动把用户输入的语言,解析成系统能够理解、可以执行的一条或者多条命令,并且每条命令对应有描述性的说明文字,在输入界面里面反馈给客户,客户可以根据实际需要选择命令,点击执行,操作界面如附图图11所示。
本发明一方面,借鉴了自然语言分析技术和算法,并基于自身的使用范围:物流管理软件,自主开发了一套智能语义分析算法,通过基于物理管理软件平台提供的指令资源库,将用户的输入语句分析出需要执行的指令资源,包括执行指令的命令、目标和参数等资源,并能够一定程度上支持自然语言的模糊性和多义性。另一方面,系统能够根据用户输入的需求,根据系统自身的资源,分析出一系列可供客户选择的可执行方案,包括可以执行的指令的描述信息和执行指令链接。
背景技术:
:
本发明基于的背景技术主要有两个方向:一是大型物流管理软件平台,二是现有的自然语言分析技术。
本发明所基于的大型物流管理软件,是针对物流运输行业的综合性管理软件,涵盖了运输管理,仓储管理、客户关系、财务管理、办公自动化等物流企业运作流程的多个方面,一方面具有功能强大的优势,但也具有大型管理软件的“通病”:流程复杂:使用者上手比较困难,资源搜索效率低下的问题。该软件的技术平台,基于J2EE平台开发,后台核心代码资源主要由JAVA代码构成,该软件平台实现了B/S(浏览器/服务器)架构,用户不需要专门安装客户端,而是在浏览器里面直接操作系统。
另一方面:现有自然语义分析技术已经逐渐成熟,出现了不少基于语义分析技术的智能语义分析机器人,比如图灵机器人等。能够基于自然语言处理,并实现了自我学习和自定义知识库的扩展,截止到目前,图灵机器人平台已经积累近亿条语料库和GB级别的基础数据,经过权威的机构测定,识别正确率已经达到85%。但目前市场上基于语义分析技术的应用,以及基于语义分析机器人的扩展应用,还集中于语言处理本身,比如翻译机器人、聊天工具、知识问答工具方面的应用,语言智能分析的作用没有能够真正发挥出来。
本发明将自然语言分析技术和物流管理软件结合起来,构建了更加高效、更加人性化的操作界面:即可以直接操作物流管理软件的语义分析智能指令机器人,整套系统的结构流程如图1所示。该智能指令机器人提供了类似于普通聊天软件一样的简单界面,如附图图11所示,用户不需要在复杂的系统界面里面操作,只需要在聊天工具一样简单的界面里,输入语言类型的指令,如“创建运单XXX,查询客户信息XXX”等等。智能机器人根据用户输入和系统的实际资源情况,分析后用户可能的操作意图,并在同一个输入界面里,将各种可行的可执行方案反馈给客户。每一套可执行方案带有完整的描述信息,同时带有可以执行指令的链接,并带有一系列参数。用户根据系统反馈的信息,选择自己需要的操作方案进行执 行。
操作人员利用智能指令机器人操作物流管理软件的人机接口,是一个类似于聊天软件的简单界面,如附图图11所示。在这样的界面里,用户像日常聊天一样像系统提出命令,得到系统的反馈和执行命令。本发明将原来流程复杂、操作繁琐的管理软件界面,精简为一个简单的聊天界面,用户的操作也由传统机械式的操作方式,变成了更贴近于人类语言的操作语言,使得人机交互更加简单、更人性化。
智能机器人的操作流程如下:如附图图11所示:用户点击打开操作界面,输入命令:比如:“创建运单发货方为百事可乐,货物为500公斤可乐”。机器人根据用户输入的指令,根据系统的实际资源情况,判断用户可能需要执行的语句,并反馈给用户,在聊天工具的界面上显示多条可执行方案:比如:“1.创建运单,发货方为企业客户:【百事可乐成都分公司】,货物名称为:【可乐】,重量为【500】kg”和“2.创建运单,发货方为企业客户:【百事可乐犀浦工厂】,货物名称为:【可乐】,重量为【500】kg”等等,并且后面附有点击操作的链接。
用户根据实际需要,选中某一条指令,点击后,直接进入运单创建页面,并且页面已经按照用户指令包含的信息设置好了参数,比如发货方设置为“百事可乐成都分公司”,货物名称为“可乐”,重量500kg,如附图图12所示。
由此可见:物流管理软件的语义分析机器人,对用户指令进行了语义解析和指令解析,使得用户语言类型的指令能够直接操作系统,使得物流软件的使用更加人性化,更加贴近人的日常使用习惯,更容易上手。本发明最适合的使用场景:一是对系统功能和资源分布不熟悉的用户,可以帮助他们对系统的更快地入门,还可以更有效地找到需要的资源,二是操作比较繁琐的功能,比如运单创建,需要设置发货方、收货方、货物名称、重量等信息,需要在几个页面来回地切换才能完成,通过智能机器人可以一次性地将所需要的资源配置好,提高了执行的效率。
系统的技术实现的基本原理、过程和难点:
用户输入自然语言性质的命令操作方式,和在传统界面里面操作方式相比,难度增加了很多:
第一个难点表现在输入指令的模糊性和不准确性上:这种模糊性一是由用户语言本身的性质决定的,日常使用语言本身不是100%精确的,用户语言输入的语言不可能和系统中能够运行的指令资源100%匹配,即使用户在对系统资源很熟悉的情况下,保证输入的语言指令指向性明确,语言和系统可以执行的指令也有一定偏差,更别说在普通的情形下,用户完全按照日常说话的习惯对系统发起命令,模糊度更大。正如前面的章节介绍,在实际操作过程中,我们会根据用户语言指令的输入,按照一定的模糊匹配度,反馈给用户多种可以执行的方案,用户安装自己的意愿输入的指令,系统往往会反馈出许多条可以执行的指令方案,供用户选择执行。
其次是语义机器人操作带来的不准确性,在传统的系统操作界面里面,提交命令时,第一,命令本身带有精确的参数,而在智能机器人的界面中,用户语言输入的指令不可能带有100%完全精确的参数;比如传统界面中,选中某条运单进行编辑或者查看时,页面向后台提交的隐藏参数里面包含了该运单的UUID,通常为16位或者32位的唯一性编码,能够唯一确定运单等单据。而在智能机器人的界面中,用户只可能输入接近日常语言习惯的模糊的、不准确的参数,不可能输入类似于UUID一样精确的参数。
第二,传统操作界面操作时,不同的页面代表着不同的业务场景,页面自身也隐藏有的上下文信息,比如运单的页面里面,所有的操作都是针对运单进行的,因此在运单页面里面进行操作,系统会自动映射到系统后台“运单”这个操作目标资源中。
再进一步说:传统界面里面每一个操作的按钮或者动作,也是和后台某条命令完全一一对应的,比如对某一条运单进行编辑,执行的是后台的“编辑”命令、点击“运单新建”的按钮,执行的是后台的“新建”命令。而在通用的智能指令机器人的界面里面,这些由传统页面和按钮等UI元素带来的上下文信息都没有了,唯一的信息来源是对用户语言的分析。
对不准确的用户指令的处理:一是现有的语义分析引擎内置了支持模糊度的算法,可以按照每个资源节点上设置的匹配度,比如匹配度80%,进行关键字匹配,且语义分析引擎中也预先设置了一些模糊性、多义性的参数,最终会匹配到多个准确的系统指令资源中。二是系统后面的指令分析引擎(可以参考图1:系统结构流程),针对模糊性的指令进行了相关的处理:指令资源库中设置了模糊性的指令资源,这些资源 包括模糊的执行目标、命令和参数资源,模糊性的指令资源不是最终可以执行的资源,需要按照一定的算法,进一步匹配到精确的、可以最终执行的资料资源上。比如:“发货方”是系统里面一个模糊性的指令参数资源,当用户输入“发货方”信息时,最终会按照一定的算法,匹配到真正执行的指令参数“个人发货方”和“企业发货方”上面。
第二个难点是如何通过用户输入的自然语言性质的命令、构建出最终的系统可以执行的指令和准确的描述信息。
用户输入自然语言性质的指令,而最终需要反馈给用户多条可行的执行方案,包括带有可点击执行指令的页面链接,和详细的说明信息,构建可以执行的指令包括构建可以执行的命令和相关参数,以及每条执行方案的准确描述信息。
本发明基于的物流管理软件是B/S(浏览器/服务器)架构,最终的命令执行是通过向后台提交AJAX格式的指令来实现,AJAX指令提交的内容包括命令执行地址和命令参数。
AJAX指令资源地址的组成:前面部分为服务器和工程的通用地址,其余部分可以由指令目标和命令两个部分构建而成,比如运单创建时,需要提交的命令地址为:http://127.0.0.1:8080/torstein/bookingNote/create.html。其中,http://127.0.0.1:8080/torstein部分为服务器和工程项目的公共地址,系统所有的资源共享的部分。“bookingNote”为指令目标的资源地址,表示当前指令执行的目标是“运单(bookingNote)”;“create”为指令命令语句的资源地址,表示执行的命令是“创建(create)”。由上面的分析得到,指令执行提交的地址可以通过执行目标和执行命令的资源地址组合而成。
同时,指令的执行还需要一定的参数信息,包括参数名字和参数值。如前面运单创建的实例中,在系统中通过AJAX命令创建运单时,如果指定发货方为系统已有的企业客户【百事可乐成都分公司】,执行时需要提交的参数信息是:senderCorporate:“百事可乐成都分公司”,即参数名字为“senderCorporate”,对应的参数值为“百事可乐成都分公司”。
上面的分析可以看出,构建出系统可以执行的命令和参数,必须通过用户的语言分析,得到三个必要的因素:1.操作目标、2.操作命令、3命令参数。系统的指令资源库,将这三个因素,作为指令资源,按照树形结构进行存储和管理,系统指令资源库里面存储的指令资源,被称为“次级响应指令资源”,该类资源由基于物理管理软件的指令分析引擎控制,在指令分析的过程中,进行资源的匹配和再次映射。“次级响应指令资源”的结构示意图请参考图2。树形结构的根目录是操作目标资源,叶子节点是可执行命令的参数,而每一级指令资源都保存了该级资源对应的地址元素。指令分析引擎在找到最终匹配的“次级响应指令资源”后,按照从根节点(操作目标)到叶子节点(命令参数)的顺序,根据地址元素构建出整个可以操作的命令的地址资源。而可执行指令的描述信息,构建的过程和命令构建的过程比较类似,也是由操作目标、命令、指令参数依次构成,“次级响应指令资源”不仅包含了可执行命令的地址因素,也包含了描述信息,指令分析引擎完成指令资源的匹配后,按照从根节点(操作目标)到叶子节点(命令参数)的顺序,构建可以执行指令的描述信息。
第三个难点是自然语言的语义分析技术:即如何从用户输入自然语言中提取出基本的操作目标、命令和参数等关键信息。根据上面的描述,指令分析引擎需要从用户语言中,提取出目标、命令和参数信息,分别作为输入信号,然后才能在指令分析引擎中和系统资源进行匹配和再次分析。
本课题在研究的过程中,特别在自然语言分析技术如何实现,经历了较多的困难,研究的过程中,问题主要集中在语义分析技术实现的方向上:一是基于现有的智能语义分析机器人,比如图灵机器人实现语言分析技术;二是自主开发语言分析算法,专门针对本物流管理软件使用。
最终我们分析了两种方向的优点缺点、结合自身的应用场景,借鉴了现有的语义分析技术,自行开发了基于指令资源库的语义分析引擎,且专用于本物流管理软件。
这样选择,具体的原因如下:
1.本发明涉及的语义分析使用范围和词汇量有限:仅仅局限于物流管理软件使用,做能够操作系统的指令分析,而不是普通的聊天软件,语义分析的词汇库比较有限,可以通过人工进行维护,不需要利用现有智能语义分析机器人的海量词汇库。
2.处理的语境比较简单,且一次性需要分析的句子长度有限:分析语言的长度限定为一个句子,只需要分析有限的动词和名词,不需要分析助词、形容词等等,不需要考虑前后的语境,因此,不会有复杂的语言环境需要处理,不需要使用复杂的语义分析算法来处理自然语言中复杂的多义性和歧义性,而可以通过自行设计语义分析引擎和后端的指令分析引擎来实现语言的多义性和模糊性的处理。如果遇到词汇库不能解析的词语,直接可以作为无效指令处理。
3.现有的语义分析机器人,目前提供的接口功能单一:如前期曾经考察过的图灵机器人接口,不能提供变量的支持,导致无法实现物流管理软件场景里面指令参数的传递,无法实现支持后面的指令分析流程。
技术实现要素:
:
本发明中,对用户命令处理的全过程,实际上就是通过用户输入的自然语言指令,经过的一系列分析处理后,产生可以执行的方案的过程。
本物流管理系统里面,可执行方案由AJAX格式的命令、参数(可以执行的AJAX指令链接),以及描述性的语言组成。
用户命令处理整个流程如图1所示,可以分为三个阶段:语义分析、指令分析、以及指令资源组合。其中语义分析阶段是由语义分析引擎执行,将用户的自然语言,根据系统指令资源,解析成最基本的目标、命令、参数信息等带有结构信息的“初级响应指令”。指令分析是由指令分析引擎执行。将“初级响应指令”,进一步分析和转化成真正可以执行的AJAX命令的地址和参数集合。
语义分析阶段流程:分析用户输入的自然语言类命令,提取出三个方面的关键信息:指令的目标、指令的命令动作和参数信息。
语义分析引擎执行语义分析的过程如下:
第一步:首先引擎载入指令资源库,指令资源库的数据结构如图2所示:数据结构呈现出树形结构,且划分成了“初级响应资源部分”和“次级响应资源”部分。其中“次级响应资源”部分是资源的主体,包含了从根节点“指令目标”、“命令”、到叶子节点“参数”等有上下级结构关系的节点,这些在“次级响应资源部分”的节点,被称为“资源节点”。
每一级“资源节点”上,都挂有“初级响应节点”,用来在语义分析的过程中,按照设置的匹配度和匹配内容,和用户的输入语言进行匹配。从图2中可以看到,所有“资源节点”,都会包含有的“初级响应节点”,“初级响应节点”在指令资源库,被统称为“初级响应资源部分”。
第二步:实施关键字匹配:根据各级“初级响应资源”节点设置的匹配内容(content),以及匹配度(matchDegree),按照引擎提供的字符串正向匹配算法,依次对用户输入的语句进行匹配,当某个关键字匹配成功时,将成功的“初级响应资源”加入到返回参数中,最终返回参数会由一系列“初级响应资源”的节点实例组成的列表,称为“初级响应指令”,并输入到后面的指令分析引擎中。
语义匹配的顺序按照目标资源、命令资源和参数资源的先后顺序来匹配:首先尝试匹配目标资源,在匹配目标资源成功以后,按照响应资源的树状结构,尝试对目标资源下面的命令资源的子节点进行匹配,如图3中步骤1、步骤2所示。合法的“初级响应指令”,必须要成功地从用户的语言中匹配出指令目标信息和命令信息。如果在用户的输入语句中,无法成功地匹配出目标资源和命令资源,则匹配失败,认为用户输入的是非法的命令语句。
目标资源和命令资源的匹配流程:这两种资源的匹配流程相对比较简单:我们通过对用户输入语句的观察、统计后发现,目标资源和命令一般都是单一的结构,而且在用户指令中都是明文显示出来。
指令资源库里面,挂在指令目标资源节点和命令资源节点下面的“初级响应资源”节点,在语义分析的过程中,直接按照匹配内容(content),匹配度(matchDegree),利用引擎提供的字符串正向匹配算法,对用户输入的语句进行匹配,一旦发现和关键字匹配成功,就把对应的这两个“初级响应资源”节点添加到返回参数“初级响应指令”中。
图3给出了一个对目标资源和命令资源的匹配流程。当用户输入语句为:“创建运单发货方为百事可乐,货物为500公斤可乐”时,匹配流程如下:
步骤1:首先匹配目标资源。根据指令资源库中,目标资源:“运单BookingNote”下面挂的“初级响应资源”节点的匹配内容包含有“运单”的关键字,则目标资源匹配成功,加入到返回参数:“初级响应指令”中。同理,步骤2,在目标资源目标资源:“运单BookingNote”下面的命令资源中“新建Create”所辖的“初级响应资源”节点的匹配内容包含有“创建”的关键字,则命令资源匹配成功,加入到返回参数:“初级响应指令”中。
对目标资源、命令资源语义匹配多义性的处理:如果按照系统设置的匹配度和匹配内容,当有多条目标资源和命令资源能够实现匹配时,最终将生成多条可执行方案,供用户选择。
参数资源的匹配流程:
参数资源,本身的结构比较复杂,导致匹配逻辑和匹配过程比较复杂。参数资源的数据结构,不仅包括参数名称,还包含参数值,有的参数呈现复合型结构:除了参数值本身,还带有单位和运算符号(比如大于、小于等等)。用户输入的语言指令中,目标资源和命令资源只有一个(目前系统只支持单一的命令语句,且只能执行单一的操作和单一的目标),且在语句中明文显示,可以通过直接的关键字匹配实现。而用户的输入语句中,输入的参数可以是多个,每个参数不一定带有明显的关键字能够匹配,且每个参数或者带有复杂的参数值、单位、以及运算符号信息,不同的参数之间还会有相关的联系。
在这种情况下,语义分析引擎对参数的提取方式分为几种情况:第一种情况:单一结构的参数,可以通过关键字直接匹配的方式将参数值匹配出来,比如“发货方:百事可乐”这样类型的参数,采用类似指令目标和命令的方式,采用关键字匹配、直接提取,能够准确地得到:参数名字:“发货方”,参数值:“百事可乐”。
第二种情况,参数包含了复合型结构:我们通过统计发现:带有复合型结构的参数,主要是带有单位和运算符这两种附加结构。对于单一结构的参数,比如“发货方”“收货方”这样的参数。在资源数据结构中,参数资源节点本身是叶子节点,再下面没有子节点了。对于带有单位和运算符的参数资源,指令资源库中,参数节点下面还有两个子节点:“参数单位节点”和“参数运算符节点”。如图4所示,这两个附件节点上面也分别挂有“初级响应节点”,用于语义分析匹配。
比如:“货物重量”:这个带有参数单位的参数资源,在资源库中的数据结构如图5所示。参数资源节点,名称为“货物重量”,下面挂有多个相关的参数单位节点,比如:“公斤”,“克”,“顿”。每个参数单位节点都包含有“初级响应节点”,比如“公斤”这个单位节点挂的“初级响应节点”,包含有匹配内容“公斤,KG,kg,千克”,当用户输入的语言中包含这样的关键字,就可以匹配到“公斤”这个重量单位节点上。
第三种情况,参数本身不仅自身包含了复杂结构,还包含了其它的细分参数,这样的“参数”实质上是由若干个相关的参数构成的统称。比如,前面的例子中:“货物:500公斤可乐”,“货物”这个参数,实际上是一系列和货物信息相关的子参数构成的集合,它实际上包含了“货物重量”、“货物体积”、“货物名称”等更细分的隐藏参数。如果按照直接匹配方法得到的参数-货物:“500公斤可乐”,是不能够直接匹配到“货物名称”上的,也不能匹配到“货物重量”上。需要经过二次匹配,按照一定逻辑,把第一次匹配出的参数值,进一步分词,进一步匹配,得到真正发挥作用的细分的参数:“货物名称:可乐,货物重量:500公斤”。
如何实现这种细分、二次匹配参数的逻辑:“初级响应资源”节点上,通过设置字段:nextMappingProxyClass(二次匹配代理类),实现二次匹配的逻辑,得到下一步真正发挥作用的“初级响应资源”节点。当节点上,该类设置为空时,则不需要二次匹配,匹配成功后,直接将该节点的实例作为匹配成功的“初级响应资源”节点返回;如果该类设置不为空,在该节点匹配成功后,语义分析引擎需要实例化该nextMappingProxyClass(二次匹配代理类)的实例,并且用该类提供的方法mapToNextCommand,实现二次匹配的逻辑,返回新的返回值:即有若干“初级响应资源”节点组成的列表实例。
前面“货物重量”的例子,也是通过这种“二次匹配”的过程实现。当用户输入“货物:500公斤可乐”时,用户的输入语句中没有提到“货物重量”或者“重量”的关键字,按照图5所示的“货物重量”参数资源结构,“货物重量”这个参数节点本身,没法实现匹配,而需要根据下面的参数单位节点“公斤” 提供的关键字实现匹配,即将用户输入的文字“公斤”,匹配到参数单位节点上,然后再启动该单位节点的“二次匹配代理类”,如图6的实例代码所示,根据该代理类提供的逻辑,把“500”这个关键字反向匹配到“货物重量”这个参数节点上,500作为“货物重量”这个参数的参数值。
图6给出了这个二次匹配代理类的实例,该类定义在“公斤”节点上,即“货物重量”参数节点,下面的重量单位“公斤”节点上,核心逻辑由红框中的代码所示:一旦当该节点匹配成功后,即在用户输入语句中发现了能够和重量单位“公斤”的节点匹配的内容,则该二次匹配代理类会被语义分析引擎启动,进入该方法:mapToNextCommand。
该方法的核心逻辑:首先,利用语义分析引擎框架提供的产品货物模板类LanDefProductTemplateProxy,返回货物重量的单位,并且写入到返回值“初级响应资源”:List<LanuageFirstCommand>result里面。另外,根据前面节点“货物cargoWeightValue”提取出来的语句subRawSentence,如果能够从产品货物模板类中按照预先设置的提取模式,提取出货物重量的关键字cargoName和货物名字的关键值cargoName,并且依赖于lanuageResourceNodeContext指令资源库暴露出的上下文接口,从货物重量“公斤”节点,分别提取出对于的货物重量的节点和货物名字的节点,并且把相关的值赋予给他们的“初级响应节点”并加入到返回值result中。
对输入指令中,无用、无意义字符的匹配和处理方法:
在前面语义分析的实例中,我们可以看到一些起连接作用的词,比如“货物为可乐”中的“为”,还有所有的空格、标点符号等等,这些对指令操作没有任何实际作用的词汇,需要在语义分析中过滤掉,同时这次词汇也是重要的分词标识,表示某些关键字,如参数、命令等关键字匹配结束的标志。本系统中对这些无意义,无用词汇的识别一样采用了“初级响应节点”进行匹配,按照定义在这些“初级响应节点”上的匹配内容和匹配度进行关键字匹配。但不同的是:无意义词汇的“初级响应节点”没有绑定到某个“资源节点”上,而是呈现“游离的状态”,语义分析引擎在处理的过程中,一旦文字匹配到“游离的状态”的“初级响应节点”时,便认为该节点对应的语句为无意义词汇,需要过滤掉。
综上所述,语义分析引擎,通过分析指令资源库的资源,主要是基于“初级响应资源”节点进行匹配,最后得到一系列成功匹配的“初级响应资源”节点实例组成的列表,称为“初级响应指令”,送给后面的指令分析引擎,进入下一步的指令分析。
指令分析引擎,将列表结构的“初级响应指令”进一步解析成复合结构的次级响应指令,次级响应指令所包含的信息,一方面要满足AJAX执行格式,同时又要满足反馈足够的、易读的信息给用户,进行筛选。
采用了复合模型结构的次级响应指令包含了更加丰富的信息,如附图图2所示,次级响应指令资源呈现出以“目标(target)资源”为根节点的树形结构,目标节点下面是命令(command)的子节点,表示了一个目标资源下面,可能包含的所有的可执行命令,而这里的指令和目标是复合型结构,都包含了资源编号id,显示文本label和指令链接linkURL。
指令分析过程:
指令资源库的数据结构如图2所示,通过树形结构,定义了系统里面所有可以执行的指令资源,模型的根节点为“目标资源”。指令分析引擎所基于的物流管理系统,底层平台所采用的每一个商务模型,就是一个的目标资源。比如新建运单,搜索运单,或者新建财务账目。这里的商业模型:“运单”或者“财务账目”,是物流管理系统的商务模型,也是指令的目标资源。“命令资源”是“目标资源”下面的子节点,一个目标资源可以包含多个命令资源,比如“运单”下面就包含了多个命令资源:如新建、编辑、审核等等。
指令解析引擎执行指令解析的过程,包含了两次映射过程:第一次是映射“次级响应指令”的目标和命令资源,又可以称为“命令映射”。根据初级响应指令中的指令目标节点和命令节点,按照在指令资源库的结构,直接返回对应的次级响应指令节点。
第二次映射,即“参数映射”,它的过程相对第一次映射更加复杂,映射的流程由参数资源上的控制字段:“映射决策类”决定,该类表示了每一个输入参数的映射逻辑,如果该参数在映射过程中需要相关的逻辑定向到其他的参数上时,需要定义该映射决策类。
当“映射决策类”设置为空时,则采用“直接映射”的方式,即直接把当前获得的参数资源作为下一阶段指令资源组合的输入参数;如果“映射决策类”设置不为空,则需要根据决策类的定义,映射到新的一个甚至是多个参数上,如果当前参数需要映射到多个参数上时,会形成多个次级指令响应,最终经过后面的指令资源组合后,会返回给客户多条可以执行的指令。如果“映射决策类”为空时,采用了“直接匹配”的映射方式,即直接按初次响应指令中参数的名称和第一次匹配得到的命令资源下面的所有参数进行匹配,匹配成功后,直接送达第三阶段进行指令资源的组合,图8描述了指令分析过程中,指令响应资源两次映射的控制流程。
在实际运行过程中,指令分析引擎根据参数资源设置的“映射决策类”,进行动态实例化,并进行映射逻辑控制。
举例说明“映射决策类”控制映射的流程:假设在执行“运单创建”的命令时,初级响应指令得到用户输入的参数为:发货方(sender)为“百事可乐”:而在后台系统中,发货方对应的实际资源为“个人客户”和“企业客户”两种类型的客户资源,当用户输入的命令无法判断具体的客户资源类型时,第一次匹配出次级响应资源为:通用类型的“发货方(sender)”,而这个通用“发货方(sender)”并不是最终的可以直接执行的参数,需要按照一定的逻辑映射到真正的可以执行的“个人客户”和“企业客户”上去。
该“发货方”的参数资源在指令资源库中设置了“映射决策类”,代码示例如图7所示。该决策类中的逻辑大致为:首先根据该参数:“发货方”的输入值,例如该例子中的“百事可乐”,分别去“个人客户”和“企业客户”的数据库表中进行查询,如果在客户资源表中,查询到了有匹配的数据记录,则将基于该类型的客户数据,作为发货方来创建运单,如果没有查询到匹配的数据记录,则基于该参数的“发货方”输入值,作为零时性客户,并作为发货方,来实施创建运单,并且在运单创建的过程中,同时需要创建出零时客户。
假设在实际系统运行中,当用户输入发货方信息为“百事可乐”时,有以下几种场景:
场景1:“映射决策类”经过逻辑判断,发现后台“企业客户”数据库表中已经有了名叫“百事可乐”的企业级客户资源,则参数资源需要从通用的发货方参数“发货方(sender)”重定向到标准企业发货方的参数资源“senderCorporate”,且设置该参数的值为“百事可乐”,则可以实现基于现有企业资源“百事可乐”,作为发货方,实施运单创建。
场景2:假设在实际运行中,发现后台“个人客户”数据库表中已经有了名叫“百事可乐”的资源,则需要定义到个人客户的参数资源“senderIndividual”,且设置该参数的值为“百事可乐”。
场景3:假设实际运行中,同时在“个人客户”和“企业客户”资源中都匹配到了资源,则需要重定向到两个参数资源“企业客户发货方senderCorporate”和“个人客户发货方senderIndividual”上,并且生成两条次级响应指令。最终反馈到用户的界面上,会出现两条可执行指令:一条是基于系统已有的企业客户“百事可乐”,作为发货方,建立运单,一条是基于系统已有个人客户“百事可乐”为发货方,建立的运单。客户可以按照自己的意愿进行选择。
场景4:假设时间运行中,同时在“个人客户”和“企业客户”资源中都无法找到资源,和“百事可乐”的输入值实现匹配,按照“映射决策类”的逻辑,需要同时重定向到下面两个参数“建立企业客户发货方tmpSenderCorporate”和“建立个人客户发货方tmpSenderCorporate”两个参数上,即在创建运单的同时,同时创建零时企业发货方“百事可乐”的客户信息,或者创建运单的同时,同时创建零时个人发货方“百事可乐”的客户信息,用户可以根据自己的意愿,选择需要执行的语句。
由此可见:定义在参数资源上的“映射决策类”,提供了对用户输入和后台逻辑、后台资源,进行交互的机会。分析引擎会根据用户的输入和系统资源的实际情况,进一步判断和模拟用户的意图,并且反馈给真正可执行方案给客户进行选择,可以使得客户的执行更加准确。另一方面,定义在像“发货方”、“收货方”这样有一定模糊性、多义性,非直接执行资源节点上的“映射决策类”,实现了对用户输入模糊性、多义性参数的支持。
指令资源组合的过程:
根据前面的分析过程的描述,经过指令分析后,系统经过指令分析得到的资源是以“次级响应指令”这样复合结构的数据存在的,没法直接反馈给用户,也没法直接执行。所以需要一个组合的过程。
一方面,当前的系统框架采用的AJAX格式指令的方式统一执行用户的指令,指令的最终执行结果会 统一重定位到客户需要执行的页面上。比如前面章节举的“创建运单”的例子中,反馈给用户的指令最终的结果是重定位到运单创建的页面里面,且页面里面,按照用户的输入设置好了参数,比如前面的例子里面,运单的发货方被设置成了“百事可乐”。指令执行的格式是统一AJAX格式,可以直接执行指令,需要两个基本因素:执行指令的地址和指令的参数。
执行地址的构成:可以由“次级响应指令”中“目标”和“命令”资源包含的链接资源(linkURL)来组合生成,而参数由指令解析后的最终的参数资源来生成。基于JAVA平台的物流管理系统中,AJAX格式的命令,执行链接生成格式为:<工程链接地址>/<目标链接地址>/<命令链接地址>.html。比如前面创建运单的实例中,整个地址可以是:【localhost:8080/projectName/bookingNote/create.html】。而AJAX指令的参数,可以直接由所有最终可以执行的命令参数的名字和值,组成的键-值对来形成。
另一方面:系统还需要把指令按照准确、易读的语言描述出来并反馈给客户,已提供给客户作出做进一步的判断、选择:同样在指令资源库中,各个节点资源:命令资源、目标资源以及参数资源,都有对应的字段“label(显示文本)”用来标示该资源的说明信息,指令分析引擎会按照一定的规则对各个资源的显示文本进行组合,显示在用户界面上。
比如前面的运单创建的实例中,目标资源对应的显示文本为“运单”,命令资源对应的显示文本为“创建”,发货方“百事可乐”同时为映射到“企业客户发货方senderCorporate”和“个人客户发货方senderIndividual”两个参数时,它们对应的显示文本分别为【发货方为企业客户“%S”】和【发货方为个人客户“%S”】,其中“%S”是占位符,运行时由参数值填充,最终用户界面上会同时显示两条可以执行的命令,且文本为:
1.创建运单,发货方为企业客户“百事可乐”。
2.创建运单,发货方为个人客户“百事可乐”。
如果发货方“百事可乐”在系统里面没有找到客户资源匹配,因素到了下一级的两个参数“建立企业客户发货方tmpSenderCorporate”和“建立个人客户发货方tmpSenderCorporate”时,它们对应的显示文本分别为【创建零时发货方:企业客户“%S”】和【创建零时发货方:个人客户“%S”】。用户界面显示的文本变成:
1.创建运单,创建零时发货方:企业客户“百事可乐”。
2.创建运单,创建零时发货方:个人客户“百事可乐”。
附图说明:
图1展示了智能语义分析指令机器人工作的整个流程。
图2展示了指令资源库的数据模型结构。
图3通过实例展示了语义分析过程中,目标资源和命令资源的匹配简单流程。
图4展示了复合型参数指令资源的数据模型结构。
图5以“货物重量”为实例,展示了复合型参数结构的数据模型结构。
图6展示了语义分析过程中,针对货物重量单位“公斤”的“二次匹配代理类”的实现代码。
图7展示了指令分析过程中,用于控制运单“发货方”这个模糊性参数的“控制决策类”的实现代码。
图8展示了指令分析过程中,指令响应资源映射的控制流程。
图9展示了物流管理系统中,用于设置指令资源库指令资源的界面。
图10展示了物流管理系统中,用于设置指令资源库“初级响应资源”的界面。
图11展示了物流管理系统中,操作智能指令机器人的界面。
图12展示了物流管理系统中,操作智能指令机器人,并点击可执行命令后的结果。
具体实施方式:
系统的具体实施过程包括几个方面的内容:开发人员在指令分析引擎的框架下如何扩展指令资源库; 包括如何扩展指令资源库的初级响应指令资源,以实现对用户输入自然语言的命令进行语义分析,第二是如何扩展指令资源库的次级响应指令资源,以实现指令的映射和组合最终反馈给客户的只执行AJAX命令和说明文本。最后介绍在应用层面,操作人员在系统里面如何操作智能指令机器人和操作效果。
如何扩展扩展指令资料库:
当系统有了新的功能,且需要智能指令机器人实施控制该新功能,开发人员需要将新功能,作为系统指令资源,注册到指令分析引擎下的指令资料库里面。
注册过程为:操作人员首先登陆系统指令资源管理界面,通过导航栏【系统管理】-【指令资源管理】,进入系统指令目标资源搜索页面。用户可以列举和搜索系统全部指令目标资源。指令资源库的数据结构如如图2所示,按照“目标”-“命令”-“参数”这样的树形结构来管理,目标资源是根目录,参数资源是从属于命令资源,而命令资源又是从属于目标资源。因此要想对参数资源或者命令资源做操作,必须要从相关的上一级资源进入。
对目标资源的编辑操作:如果需要新增目标资源,在目标资源搜索页面里面点击“新增”,进入指令资源的编辑界面,如果需要编辑现有的目标资源,在列表中选中需要编辑的目标资源,进入资源的编辑界面。在目标资源编辑界面里面,用户需要指定目标资源的编号ID、链接,以及显示文本,在资源的组合过程中需要这一项信息。
比如系统的“运单”目标资源,资源编号ID为“BookingNote”,链接为“bookingNote”,显示文本为“运单”。同时目标资源的编辑界面,下面同时显示了该目标资源所属的所有命令资源,比如“运单”的资源编辑页面下面,包括了“新建”,“编辑”,“搜索”,“查看”等基本指令资源。
对命令资源的编辑操作:如果用户需要新增命令资源,或者编辑现有的命令资源,需要首先确认上一级的指令目标资源,在目标资源下面的命令列表上,点击“新增”按钮或者。同理,如果需要设置某个命令下的参数,需要首先进入改命令资源的编辑页面,然后在下面的参数设置部分中,新增或者编辑参数资源。
如果该参数带有运输符号或者单位,需要在编辑界面里面,点击新增“参数单位”按钮和“参数运算符”按钮来实现新增单位和参数运算符资源。
如果该参数可以直接作为执行命令时提交的参数,只需要设置参数的名字和显示文本,不需要设置映射决策类,如果该参数存在进一步映射的逻辑,在解析过程中需要进一步映射到下一级直接操作的参数中时,需要定义映射规则类,实现映射规则,并且把映射决策类的全称设置到参数资源的字段:映射决策类上面。
映射规则类的代码实现流程:需要实现“指令映射决策类”标准接口:【ILanuageComParaMappingDesicion】,并实现核心方法:【executeMapping】。映射决策类的实例请参考图7。该实例对参数“发货方(sender)”的映射决策类的实现代码,该类的核心方法是:将初级响应指令包含的发货方参数值,和系统中的企业客户、个人客户资源的匹配,根据不同的情况,分为4种场景,依次将当前的参数映射到下一级的参数:个人发货方、企业发货方,个人发货方和企业发货方,以及创建个人发货方和创建企业发货方等不同的下一级参数上,以进行参数和命令等资源的组合,形成最终能够执行的参数。
如何扩展指令资源库的初级响应资源部分:
指令资源库的数据结构如如图2所示,核心部分,即次级响应资源部分,按照“目标”-“命令”-“参数”这样的树形结构来管理,每一级“资源节点”都包含一个“初级响应资源”节点,用于语义分析引擎进行语义分析和匹配。当前的系统框架中,一个“资源节点”都包含一个“初级响应资源”节点,以后会考虑到扩展到多个“初级响应资源”节点。
对“初级响应资源”节点的编辑操作:不需要新增操作,进入每一级指令目标资源编辑界面后,会自动出现“初级响应资源”节点部分,直接选择后,点击编辑按钮,进入编辑界面。
其中,字段“匹配内容”:用来编辑语义分析引擎匹配的关键字,如果有多个关键字时,用逗号分开,操作界面如图9所示,货物重量单位“公斤”里面包含了4个匹配关键字:“公斤,千克,kg,KG”当用户输入语句中包含这四个关键字时,认为成功匹配到货物重量单位“公斤”的节点上。
字段“匹配度”用来表示关键字匹配时的匹配百分比,默认的匹配度为80%:即当匹配的关键字有10 个字时,能够联系匹配成功8个字则认为匹配成功。
如果需要定义“二次匹配逻辑”,比如从货物重量单位“公斤”经过二次匹配,匹配到货物重量和货物名称上面,则需要开发人员自定义“二次匹配代理类nextMappingProxyClass”,并设置在该“初级响应资源”节点上,如图9所示。代码实现“二次匹配代理类nextMappingProxyClass”时,首先需要继承标准接口【ILanuageNextCommandMappingProxy】,并且在核心方法mapToNextCommand里面实现二次匹配的逻辑。
用户在系统操作语义机器人的过程:
首先登录系统,在通过导航栏【用户中心】可以进入用户工作中心页面。通过点击按钮,启动语义分析机器人,弹出对话框界面,如图11所示为物流管理系统的智能机器人启动页面。用户可以在该页面中输入语言类型的指令,并且可以加上参数。如图所示,当用户输入:“创建运单,发货方:“百事可乐”,货物为500公斤可乐”时,系统分析后,根据系统的实际数据情况,反馈用户两条可执行方案,分别是“创建运单,发货方为企业客户【百事可乐成都分公司】,货物名称为【可乐】,重量为【500】kg”和“创建运单,发货方为企业客户【百事可乐成都犀浦工厂】,货物名称为【可乐】,重量为【500】kg”。当用户选择第一条执行方案,并且点击执行链接后,系统的页面跳转到运单创建页面,并且自动将企业发货方信息,货物的信息,包括货物名称和货物重量等填入到运单里面,节约了操作人员的时间,并且有利于对系统不熟悉的操作人员更快熟悉系统的功能。