查询技术以及对结果进行排名以供基于知识的匹配的制作方法

文档序号:13261276阅读:139来源:国知局
技术领域本说明书一般涉及生成经修改的查询以供基于知识的文档搜索和匹配。背景软件应用的消费者通常会碰到与软件的推出相关联的问题。这些问题从配置错误到系统崩溃。当消费者碰到这些类型的问题时,他们一般首先尝试通过咨询搜索引擎来找出问题的解决方案。搜索引擎旨在从通过爬行web文档、讨论区、电子邮件对话、软件手册以及其它可公开获得的文档而创建的索引中找出相关文档。如果搜索引擎不提供足够的结果,则消费者通常会呼叫客户支持服务。在与客户支持人员沟通时,客户支持代表或工程师尝试将所汇报的问题与知识库数据库中包含的信息相匹配,例如通过搜索数据库或使用分类方案。这种方法允许客户支持人员为用户提供解决客户的问题的专家编写的事实和规则。然而,对于企业来说,提供使用人工的客户支持服务是极其昂贵的。其次,这种方法的风险是当大量客户同时或在一较短时间窗口内呼叫呼叫中心时导致大量的等待时间。例如,这种情况常常发生在一个新的特征被发布时或者在存在问题的软件补丁导致在客户的机器上产生新的问题时。第三,这种故障诊断方法依赖于数据库中的专家定义的规则,这样的风险是不完整或者随着软件进化而变得过时。最后,这种方法仅仅解决了由客户汇报或提交给客户支持人员的问题,但是不能发现其它潜在的相关问题,诸如应用某个安全补丁的需要。诸如Google和Bing之类的搜索引擎已被优化以输出针对给定查询的高度相关的结果。然而,它们的技术关注于与查询项或其扩展(诸如拼写纠正或改变项的顺序以实现相关文档的匹配)的基于文本的匹配。这种方法使得基于知识库中的文章(例如,技术解决方案)中包含的信息来正确地发现和分析配置错误变得困难。这是因为文章是用自然语言文本写的,它们是高度地因领域而异的,并且它们常常使用技术单词的缩写和同义词并且还可能在特定文档中描述对于配置参数和值的条件约束,这些条件约束指示有关什么情况下文档是相关的以及什么情况下是不相关的的配置。因此,客户汇报/提交的问题或错误可能在基于知识的文章中不容易搜索。概述下面呈现了本发明的简要概述,以便向读者提供基本理解。本概述不是本发明的详尽概览,并且不标识本发明的关键/重要元素,也不描述本发明的范围。其唯一的目的是以简化形式呈现此处所公开的一些概念,作为稍后呈现的更详细的描述的序言。本示例提供了用于搜索包含在因领域而异的知识库中的文档的系统和方法。该系统取得查询(例如,来自顾客机器的软件的配置快照)作为输入并且通过将查询传递通过查询处理器中的一个或多个过滤器来根据该查询生成查询的经修改的版本。查询处理器添加、移除或修改查询中的项。查询处理器提供各种各样的功能。例如,它能够添加或识别看上去是分开的单词、实际上标识特定软件实体的两个单词,或者它能够确定查询中出现的数字不仅仅是一个数字值,而是表示与特定配置问题相关的特定版本或数字。通过结合附图参考以下详细描述,可易于领会并更好地理解许多附带特征。附图简述根据附图阅读以下具体实施方式,将更好地理解本发明,在附图中:图1是例示出根据一个说明性实施例的查询处理系统的各组件的框图。图2A是例示出根据一个说明性实施例的使用多个过滤器来生成经修改的查询的查询分析组件的框图。图2B是例示出根据一个说明性实施例的根据过滤器的基本功能对图2A的过滤器进行组织的框图。图3是例示出根据一个说明性实施例的使用经修改的查询来搜索文档的过程的流程图。图4是例示出根据一个说明性实施例的由匹配引擎执行的过程的流程图。图5是例示出根据一个实施例的能实现查询系统的计算设备的框图。在各个附图中使用相同的附图标记来指代相同的部件。详细描述下面结合附图提供的详细描述旨在作为本发明示例的描述,并不旨在表示可以构建或使用本发明示例的唯一形式。本描述阐述了本发明示例的功能,以及用于构建和操作本发明示例的步骤的序列。然而,可以通过不同的示例来实现相同或等效功能和序列。本公开涉及针对文章、文档或其它信息类型(诸如博客、论坛、配置快照、以及社交媒体)的知识库的查询处理。应当注意,虽然在本文中执行的类型的查询处理和诸如Bing、Google等通用搜索引擎之间存在相似性,但是它们处理查询的方式本身以及查询处理中存在本质区别。具体来说,本讨论包括因领域而异的用于分析配置和软件错误的逻辑和处理,这些配置和软件错误通常不被通用搜索引擎所涵盖。例如,本公开模糊了查询中的属性/项以找到对于特定值的最接近的匹配、拆散字符串中的输入词元以便区分其中包含的值和名称而不是将整个输入取作一个长的字符串、并且考虑查询和文档或文章两者中的预测陈述(例如,事实陈述)而不是简单地忽视或以不同方式分析其中的那些概念。当元素被称为被“相连接”或“相耦合”时,这些元素可被直接连接或耦合在一起,或者也可存在一个或多个中间元素。相反,当元素被称为被“直接连接”或“直接耦合”时,不存在中间元素。本主题可被体现为设备、系统、方法、和/或计算机程序产品。因此,本主题的部分或全部可以用硬件和/或软件(包括固件、常驻软件、微码、状态机、门阵列等)来具体化。此外,本主题可以采用计算机可使用或计算机可读存储介质上的计算机程序产品的形式,介质中收录了供指令执行系统使用或结合指令执行系统一起使用的计算机可使用或计算机可读的程序代码。在本文档的上下文中,计算机可使用或计算机可读介质可以是可包含、储存、通信、传播、或传输程序以供指令执行系统、装置或设备使用或结合指令执行系统、装置或设备一起使用的任何介质。计算机可使用或计算机可读介质可以是,例如,但不限于,电、磁、光、电磁、红外、或半导体系统、装置、设备或传播介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备、或可用于储存所需信息且可由指令执行系统访问的任何其他介质。注意,计算机可使用或计算机可读介质可以是其上打印有程序的纸张或其他合适的介质,因为程序可经由例如对纸张或其他合适的介质的光学扫描来被电子地捕获,随后如有必要被编译、解释,或以其他合适的方式处理,并且随后被储存在计算机存储器中。通信介质通常以诸如载波或其他传输机制之类的已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并且包括任何信息传送介质。术语“已调制数据信号”可被定义为其一个或多个特性以对信号中的信息编码的方式被设置或改变的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上述的任何组合也应包含在计算机可读介质的范围内。当本主题在计算机可执行指令的一般上下文中具体化时,该实施例可包括由一个或多个系统、计算机、或其他设备执行的程序模块。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。通常,程序模块的功能可在各个实施例中按需进行组合或分布。本领域技术人员会认识到,用于存储程序指令的存储设备可分布在网络上。例如,远程计算机可以存储被描述为软件的进程的示例。本地或终端计算机可以访问远程计算机并下载软件的一部分或全部以运行程序。替代地,本地计算机可以根据需要下载软件片段,或通过在本地终端上执行一些软件指令而在远程计算机(或计算机网络)上执行另一些软件指令来分布式处理。本领域的技术人员还将认识到,通过利用本领域的技术人员已知的传统技术,软件指令的全部,或一部分可以通过诸如DSP、可编程逻辑阵列等等之类的专用电路来实现。图1是例示出根据一个说明性实施例的查询处理系统100的框图。查询处理系统100包括查询处理器110、匹配引擎120、排名引擎130以及知识库数据库140。应当注意,在一些实施例中,查询处理系统100的各组件可驻于单个计算设备上,而在其它实施例中,组件中的一些或全部可驻于彼此连接的多个不同计算设备上,使得它们可彼此协作工作。在分布式环境中,图1的组件中的任意一个可以与其它组件中的任意一个分散布署。此外,在分布式环境中,各组件可存在于不同服务器或虚拟机上,其中每一个不同的服务器或虚拟机可执行各组件的功能中的一个或多个。查询处理器110被配置成接收输入查询101并且将接收到的查询转换成允许该查询与知识库数据库140中的增强索引或其它类型的索引中存储的文档相匹配的格式。查询101通常是由用户通过例如在搜索框中键入问题来直接输入到系统100中的查询。然而,查询101可包括系统数据和操作数据,诸如软件配置数据,通常表现为键的列表、值对、设置、警告、事件、诊断日志、错误代码、性能数据、配置快照或可向计算系统外部汇报的任何其它数据。为了确保知识库140中的文档的准确匹配,在一个说明性实施例中,查询处理器110包括三个组件:查询分析模块112、查询模糊模块114以及查询分发器模块116。在一些实施例中,查询处理器110包括高速缓存111,高速缓存111在高速缓存中保存之前接收的查询和可在查询匹配之前的查询的情况下被返回的结果。查询分析模块112被配置成准备查询的抽象表示。它通过改写查询并且将其找到的任何值类型(例如,如7或七之类的数字、如真或假之类的布尔词)替换为通用型(例如,分别为数字型(NUMERIC)和布尔型(BOOLEAN))来这样做,并且另外存储该值以供匹配引擎120进行约束评估。图2示出处理输入查询的各个过滤器。取决于文档在知识库140中是如何被索引的,输入查询可不经过扩展阶段,因为作为替代,同义词可能已在索引构建阶段被添加到索引中。应当注意,本公开的各实施例可能具有不同过滤器存在并且不是所有的过滤器都是必需的。开发者拥有选取和挑选图2A中示出的过滤器中的哪些是查询处理系统100适用或可用的能力。因此,可存在任意数量的过滤器或任意组合。查询分析模块112将查询101通过多个过滤器以便生成将被用于查询知识库数据库的项。图2A是例示出可存在于查询分析模块112中的用于标识用于经修改的查询中的项的各个过滤器的框图。应当注意,本公开的各实施例可能具有不同过滤器存在并且不时所有的过滤器都是必需的。开发者拥有选取和挑选图2A中示出的过滤器中的哪些是索引系统适用或可用的能力。因此,可存在任意数量的过滤器或任意组合。图2A是例示出可存在于查询分析模块112中的并且可在生成文章的词元索引的过程中由系统使用的各个过滤器的框图。查询分析模块112可包括分词器210、驼峰式大小写过滤器220、值型过滤器230、命名实体过滤器240、停用词过滤器250、小写字母过滤器260、同义词过滤器270、第二同义词过滤器280、以及词干过滤器290。图2B是例示出根据一个说明性实施例的根据对于应用过滤器的辅助方法对过滤器210-290进行组织的框图。在第一级201处,使用分词器210对查询进行分词。在下一级202处是对查询进行规范化。在级202处,过滤器220、230和240被归为一组。然而,应当注意,提供规范化的其它类型的过滤器也可存在于这一级。在级203处是对查询的截断。级203包括停用词过滤器250。然而,通过移除或组合查询中的词元导致对查询的总大小的缩减的任何其它过滤器可被应用于这一级。在级204处是扩展级。这一级包括针对命名实体的过滤器240、第一同义词过滤器270以及第二同义词过滤器280。然而,通过基于查询中的信息包括附加信息来扩展查询项的其它过滤器也可存在于这一级。最后一级205是标准化级。在这一级,词干过滤器290被放置。然而,能够标准化查询中的项的任何其它过滤器也可存在于这一级。讨论现在返回到图2A以讨论查询分析模块112中的各个过滤器的特征。再次,应当注意,任意数量的这些过滤器可按任何逻辑顺序存在于查询分析模块112中。分词器210受取查询并且将纯文本转换成更小的原子单位,这些原子单位将被进一步处理以生成查询101的经修改的版本以在知识库数据库中找到的匹配文档。分词过程通常发生在查询的单词一级处。然而,对于系统而言,知晓单词实际上是什么常常是困难的。因此,在一些实施例中,分词器210采用试探法来标识要被分词的查询中的单词。试探法可包括在每一个遇到的字符间的空格处分词以及考虑查询中所有遇到的标点。驼峰式大小写过滤器220被配置成标识分词器210所生成的各词元内的各个“驼峰式大小写词”。驼峰式大小写过滤器220将驼峰式大小写词扩展成它们的各个构成单词。驼峰式大小写词是出现在技术文档中的常常将两个或三个单词组合成单个单词的单词。在本公开的一个实施例中,驼峰式大小写过滤器220考虑并标识驼峰式大小写词的以下五种常见情况:(1)标准情况“CamelCase”常常被用于源代码中的类型名称和引用或者配置实体,例如GetMethodName;(2)内部情况“camelCase”常常被用于标识符名称,例如methodName;(3)末尾大写字母“CamelCASE”,例如GetBIT;(4)全部大写字母“CAMELCASE”通常用于缩写或布尔位,例如ENABLED;以及(5)驼峰式大小写词和大写字母的混合通常用于在单词内部包括缩写,例如WeakRSAKeys。给定一个输入驼峰式大小写词,这一过滤器210输出原始的词元以及其各构成单词。例如,“IsSecurityLogOverwrite”将被转换成[IsSecurityLogOverwrite,Is,Security,Log,Overwrite]以支持搜寻驼峰式大小写表示或其各构成单词的查询。然而,驼峰式大小写词的其它实例可由驼峰式大小写过滤器标识和处理。值型过滤器230被配置成从词元中标识与词元相关联的值型以提供与遇到的数字有关的进一步提示。这通常发生在讨论某些软件版本或特定系统设置的文章中。例如,文章可写道“InSQL,ifthenumberoflogicalprocessorsislessthanorequalto8,settheInMemorybittotrue….(在SQL中,如果逻辑处理器的数目小于或等于8,则将InMemory位设为真……)”。值型过滤器230将词元串中与所标识的值词元相同的位置处的数字型或布尔型的词元添加到查询101。因此,值型过滤器230检测数字、真/假以及版本号。诸如枚举之类的其它值也可被值型过滤器230检测和标识。因此,在该示例中,值型过滤器230将输出“InSQL,ifthenumberoflogicalprocessorsislessthanorequalto8NUMERIC,settheInMemorybittotrueBOOLEAN….(在SQL中,如果逻辑处理器的数目小于或等于8NUMERIC,则将InMemory位设为真BOOLEAN)”。小写字母过滤器260是一种简单地输出所标识的词元的小写字母版本的过滤器。因此,在该示例中,“SQL”被转换成第二词元“sql”,其随后被添加到该文章的词元列表中。应当注意,当小写字母过滤器与驼峰式大小写过滤器220一起存在时,驼峰式大小写过滤器220应当在小写字母过滤器260之前被应用。这使得能够保留与将会丢失的驼峰式大小写词相关联的信息而最多是扩展驼峰式大小写词变得困难。停用词过滤器250被应用于查询101以从查询中移除自然语言中频繁出现的常用词。在一个实施例中,停用词过滤器250使用被用来索引文档的语言中的最频繁出现的词的列表。例如,在英语中,诸如“a”、“an”、“and”、“the”、“is”、“are”、“my”、“our”等之类的单词将从查询中移除。另外,某些在知识库的主题中常见的词也可被移除。这一词列表可由开发者或组织提供给系统,该列表有助于标识通常不会被移除的、但是由于该主题的缘故可能与向搜索该信息的人提供值相比产生更多噪声的词。命名实体过滤器240是一种被配置成标识查询中的命名实体的过滤器。例如,如果文档写道“InstallSQLServeronyourmachine”(在你的机器上安装SQL服务器)。该过滤器变得有助于标识和识别“SQL服务器”是一个命名实体而不是两个分开的不相关的词。命名实体过滤器240修改查询的词元顺序信息,使得词“SQLServer(SQL服务器)”被标识为单个词元而不是两个分开的词元。命名实体过滤器240从领域专家处获得命名实体列表,其中命名实体已被映射到本体模型以标识对于命名实体而言常见的其它特征。例如,“SQL服务器”和“逻辑处理器”可在本体模型中被标记为“SoftwareEntity(软件实体)”。这一命名实体列表也可自动创建或与领域专家共同地自动创建。给定命名实体列表,在一个实施例中,作为一个预处理步骤,命名实体过滤器240构造一个图以实现快速查找。在这个图中,节点表示单词,如果单词一起出现在命名实体列表中的一个短语中,则边连接这些单词。例如,给定单词[sql,sqlserver,sqlserverdatabase,sqlserver2005],最终的图将包含四个节点(sql,server,database,2005)、从sql→server、server→database、以及server→2005的边。(以下的)表1示出命名实体如何在查询时被识别并且被实现为命名实体过滤器的一部分。对于每一个输入词元,其位置被记录在TokenPosition(词元位置)中(L4)。L5上的ExistsAsEntity(作为实体存在)函数被用于检查词元是否作为实体存在,即图是否由具有TOKEN作为其值的节点组成。如果是这样,则(使用L11中的ExistsAsNeigbor(作为邻居存在)函数)进行检查以查看下一词元(L10)是否作为图中的TOKEN的邻居存在。如果是这样,则其与前一词元串联并且被推送到栈上。这一算法将持续执行,只要下一词元作为前一词元的邻居存在。一旦这一条件被打破,则栈被取出,并且串联的串将被赋予L4中的TokenPosition的词元位置。表1查询时命名实体识别需要:单词自动装置的经预处理的数据库、词元流输出:被识别为命名实体的各组词元1:Initially:2:TOKEN←Currenttoken3:STACK←InitializeStack()4:TokenPosition=GetTokenPosition()5:whileExistsAsEntity(TOKEN)do6:CurrentTerm=TOKEN7:ifIsEmpty(STACK)==1then8:STACK.Push(CurrentTerm)9:endif10:NextTerm=IncrementToken()11:ifExistsAsNeigbor(CurrentTerm,NextTerm)==1then12:CurrentTerm=STACK.Pop()13:STACK.Push(CurrentTerm+NextTerm)14:否则15:NextTermBuffer=NextTerm16:endif17:endwhile18:STACK.Pop()19:TOKEN.SetPosition(TokenPosition同义词过滤器270是一种被应用于词元流以标识查询中的单词或者在因领域而异的等级上可能与单词有关的同义词的过滤器。当其找到相关的单词时,过滤器270扩展词元流。这一过滤器270被用于已知没有编制过索引的情形或者索引很可能没有使用同义词来编制的情形。这允许将本公开用于起初不是为这类搜索而设计的系统。同义词过滤器270以类似于命名实体过滤器240工作的方式工作,同义词过滤器在以下的表2中例示出。然而,替代使用命名实体过滤器240的图,同义词过滤器使用两个散列表。第一个散列表包含作为键的单词以及作为值的它们的相关联的同义词分组标识符。第二个散列表包含作为键的同义词分组标识符以及作为值的该分组中的所有的同义词集合。当同义词过滤器270标识查询串中的词元时,其将该分组中所有同义词注入来作为值。然而,在其它实施例中,可使用其它逻辑来滤除与文档不相关的那些同义词。同义词随后被插入到词元流中的所标识的词元的位置值处。表2查询时同义词扩展需要:同义词分组、词元流输出:注入了相关联的同义词的词元流1:Initially:2:TOKEN←Currenttoken3:STACK←InitializeStack()4:ifHasSynonyms(TOKEN)==1then5:STACK.Push(GetSynonyms(TOKEN))6:TokenPosition=GetTokenPosition()7:endif8:whileSTACKisnotemptydo9:InjectNewToken(STACK.Pop(),TokenPosition)10:endwhile第二同义词过滤器280是一种被配置成取得词元流并且将词元流中的单词的常见同义词添加到串中的过滤器。在一个实施例中,第二同义词过滤器利用了WordNet(G.A.Miller的Wordnet:一个用于英语的词汇数据库,ACM通讯,38(11):39–41,1995)来标识要被添加到串中作为同义词的附加单词。然而,讨论中的语言的任何同义词列表可被用于这一项扩展。这些经标识的同义词随后被添加到查询串中它们对应的词元的位置处。再次,这一过滤器280被用于已生成了索引或者被认为已在未将同义词纳入索引的情况下生成了索引的情形。词干过滤器290是一种被配置成移除单词或将单词转换成其基本形式的过滤器。因此,词干过滤器290被用于将单词返回成其基本形式。例如,描述“upgradingyoursoftware(升级你的软件)”的文章和关于“upgradationofasoftwaremodule(软件模块的升级)”的文章很可能都表示相同的概念,即“upgrade(升级)”。在一个实施例中,词干过滤器使用Porter词干提取算法。Porter词干提取算法是一种用于移除更为常见的形态和词尾变化的结尾单词的过程。然而,可使用任何用于标识单词和对单词进行词干提取的方法。最终查询101被输出给查询模糊模块114。返回到图1,查询模糊模块114被配置成构造输入查询101中的项的有效集合,该集合有助于近似搜索,使得仅包含输入查询中的项的一个子集而不是完整的输入查询的文档可被匹配。对于许多查询,使用准确关键词可能不返回结果。例如,对于输入查询“LSACrashOnAuditFailFlag”的原始查询将仅返回包含该输入查询中的所有项的文档,但是不会返回其中例如缺少单词“flag”的文档。因此,查询模糊模块114从原始查询101中构造近似查询。对于诸如“ErrorID823”之类的输入查询,准确搜索或者甚至是近似搜索可能不会返回包含文本“theerrorIdwasloggedtobe823”的文档,因为在输入查询中的项之间存在其它单词。在这类场景中,进行允许其它项出现在输入查询项之间的放宽的查询是有用的。查询分发器模块116通过对匹配逻辑模块化解决了这一问题。在一个说明性实施例中,查询分发器模块116被配置成执行对匹配引擎120中的不同匹配器(例如,准确匹配、接近度匹配)的并行调用并且最后聚合各结果。为了执行自动检索,产生了一个问题是当查询基于配置快照时如何在快照内部的各个配置参数和知识库文章之间建立关系。具体来说,给定具有约束的键-值对,期望的是检索满足真值条件的所有知识库文章。例如,给定键值对“NumOfLogicalProcessors,7”,期望的是检索其中用户将逻辑处理器的数目设置为7的所有知识库文章。然而,存在与这一检索相关联的若干个困难。首先,知识库文章是以自然文本撰写的,因此应当作出从umOfLogicalProcessors到诸如“ensurethatthelogicalprocessorsaresetto7(确保逻辑处理器被设置为7)”之类的候选自然语言文本的映射。其次,被搜索的值可能甚至在知识库文章中不存在,例如“thenumberoflogicalprocessorsislessthan8”(逻辑处理器的数目小于8)没有7但是仍然满足该约束。为了实现这一结果,在一个实施例中,匹配引擎120被配置成实施两种类型的匹配器,准确匹配器121和接近度匹配器123。然而,其它类型的匹配器也可存在于匹配引擎120中。这些匹配器可执行不同类型的文档匹配或者可简单地使用现有匹配器的不同指导方针来调用执行。在一些实施例中,匹配引擎120可将各个匹配器跨多个不同机器分布。当匹配引擎实施准确匹配时,其实施原始搜索机制,该机制在知识库数据库140中查找包含准确形式的键值对的文档。当匹配引擎120实施接近度匹配时,其与约束评估模块一起实施基于接近度的近似匹配,该近似匹配作为一种找出满足约束(如果有的话)的彼此在给定接近度内的两个词元的机制。根据一个实施例,接近度匹配以两个阶段来执行。第一阶段是检索阶段。对于输入查询101,匹配引擎120不仅检索相关文档,还追踪根据索引匹配的每一个项出现的位置。附加的修剪阶段移除在指定距离之外的所有匹配。例如,给定诸如“logical,processors,Distance(距离)=1”之类的约束,只有包含彼此相邻的“logical”和“processors”的文档被检索。随后,从索引中获得在匹配的位置偏移之间的所有单词。第二阶段是约束评估阶段。一旦检索到相关文档以及输入查询项的匹配位置之间的单词集,匹配引擎120就即时执行真值条件评估。首先,每一个匹配被传递通过词元提取器模块122,其提取自然文本中的任何比较表达式(例如,小于或等于、设为、大于)以及任何附近的值(例如,数字、布尔、浮点等)。其次,提取出的词元和附近的值被传递通过抽象语法树构造器124。抽象语法树构造器构造要评估的各个表达式的抽象语法树(AST)。回忆查询分析阶段,输入查询中找到的任何值由值型过滤器抽象出并用通用型来替换。因此,抽象语法树将采用运算符作为根节点并且运算对象(从查询中提取的值以及检索到的文档中的值)作为叶节点来构造。第三,抽象语法树在存储器中编译并且被评估以通过约束评估器126的用户获得真值条件。仅有满足指定条件(例如,真值条件)的匹配被返回以供排名引擎130随后进行排名。排名引擎130被配置成对已由匹配引擎120检索到的候选知识库文章得分和排名。知识库文章的得分取决于检索到该知识库文章的匹配器。由于可能存在多个匹配器,因此排名发生在多个阶段:在一个实施例中,排名引擎130使用标准tf-idf(项频率-逆文档频率)的轻微修改的变体来对准确匹配的检索结果评分。在tf-idf中,文档中的每一个项与其在该文档中出现的次数相关联。项随后被根据它们在整个语料库中有多常见来被赋予权重,直觉是稀少的项比经常出现的项更接近于文档的含义。查询q的文档d的得分S(q,d)被计算为:Sexact(q,d)=c(q,d)F(q)Σt∈qtf(d)idf(t2)]]>等式(1)其中c(q,d)是在文档d中找到的q中的查询项的数目和查询q中的项的总数的归一化比值。因此,在给定文档中的所有查询项的存在将增加这一比值,反之亦然。由于结果中的一些是基于模糊查询的,因此来自“模糊”查询的命中通常与原始查询中的那些相比收到较低的得分。因此,在一个实施例中,排名引擎130采用模糊因子F(q)来将这一点纳入考虑。F(q)被定义为模糊查询q′和原始查询q之间的距离的逆,其中距离被定义为需要被添加到q′以得到q的项的数目。为了避免分母中的零,在一个实施例中,排名引擎130通过对分母加1来应用拉普拉斯校正。tf(d)是项t在文档d中的频率。因此,具有更多词给定项的出现的文档接收到更高的得分。最后,idf(t)或逆文档频率是项在所有文档中是常见还是稀少的度量,并且可通过采取文档D的总数和包含该项的文档的数量的比率来获得:idf(t)=1+log(|D|d∈D:t∈d)]]>等式(2)排名引擎130通过考虑各项之间的最大可允许位置距离来对来自接近度匹配的结果评分。直观上,得分应当与项之间的位置距离成反比,即匹配的项之间的距离越大,分配的得分越小。在一个实施例中,排名引擎130将接近度匹配的得分计算为:Sprox(q,d)=c(q,d)·F(q)·1Σt∈qidf(t)2Σt∈qidf(t)Lavg(d)L(d)]]>等式(3)其中c(q,d)是在文档d中找到的q中的查询项的数目和查询q中的项的总数的归一化比值。Lavg是文档的平均长度,而L(d)是文档d的长度。F(q)是之前计算为的模糊因子,其中D1是查询q′与原始查询q的距离,而D2是查询q′中为了重构q所需的位置移动的数量。例如,考虑q=q′=“CrashOnAudit”时的情况。由于q=q′,所以没有模糊并且因此D1=0。如果匹配的文档是“Auditflaghadthecrashbit”,则D2=5,因为它花费4次位置移动来将“crash”移动到“Audit”的位置,并且随后1次位置移动来将“Audit”移动到下一位置,从而给出最终的模糊因子为1/5。对匹配引擎120返回的来自多个匹配器的结果的聚合随后由排名引擎130执行。排名引擎130通过聚合来自各个匹配器的结果来构建最终结果集。在一个实施例中,使用采用加权排名的简单线性聚合并且可通过以下等式来表示。S(q,d)=∑x∈nwxMX等式(4)其中wx是分配给匹配器Mx的权重,而n是实施的匹配器的总数,在这一实施例中,n=2。由于准确匹配器应被赋予较高得分,因此排名引擎130分配wexact=1.0并且wproximity=0.25。这一聚合的结果被输出给用户,使得用户能够访问所标识的知识库文章。在一个实施例中,知识库140是存储文章或文档以及任何相关联的元数据或与指定知识库有关的索引的数据库或其它数据存储库。例如,知识库140可包含多篇与特定计算机软件产品(诸如SQL服务器或MicrosoftWord)、计算机系统总体、或者可产生或消费基于知识的文章和文档的任何其它主题有关的文章。在一些实施例中,知识库140可保存针对多个不同主题或与许多不同产品有关的基于知识的文章。保存在知识库140中的文档以使得允许文档能够被匹配引擎120快速访问的方式来索引。图3是例示出根据一个说明性实施例的由查询处理系统100执行的各步骤的流程图。在步骤310,在查询处理系统处接收查询101。查询101可以是用户已提供给系统的任何查询,诸如用户注意到的配置或软件错误、用户具有的问题的某些描述等等。在一些实施例中,查询101可以是系统拍摄的配置快照,该配置快照或者被自动提供给查询处理系统100或者由用户手动提供。查询处理系统随后取得接收的查询101并且通过查询处理器110处理该查询。这被例示于步骤320。在一个实施例中,查询处理器将查询转换成词元并将查询的词元流传递通过查询分析模块,查询分析模块通过改写查询并且替换其找到的任何值型来扩展查询项。查询处理器110可随后模糊该查询。此外,查询处理器110可调用致使不同匹配过程稍后被匹配引擎调用的逻辑。经修改的查询被提供给匹配引擎120。在一些实施例中,步骤320的查询处理可首先查找包括之前查询及其具有经高速缓存格式的结果的高速缓存层。如果所提供的查询的命中在高速缓存111中被找到,则对应的结果被检索而无需任何进一步的处理并且过程前进至步骤350。如果在高速缓存中不存在匹配的查询,则过程继续到步骤330。匹配引擎120取得经修改的查询并且继续以标识知识库140中匹配该经修改的查询中的项的文档。这被例示于步骤330。匹配引擎120可调用各个匹配器中的一个或多个。图4是例示出根据一个说明性实施例的由匹配引擎120执行的过程的流程图。在步骤410,查询处理已将查询的经修改的版本返回给匹配引擎120。在这一示例中,查询已从NumLogicalProcessors7被转换成numlogicalprocessorsNUMERICValue7。在步骤420,匹配引擎中的匹配器使用查询的经修改的版本以标识知识库140中匹配该经修改的查询的文档。在这一示例中,DocIDs3、67和124被发现匹配输入项,而不考虑与查询中的数字值相关联的实际值。在步骤430,针对匹配的文档抓取每个项在文档中的位置。导致文档被返回的文本的部分随后被传递给词元提取器模块122。在步骤440,词元提取器122标识文档中为导致匹配发生的数字值赋予意义的词元。词元提取器122进一步捕捉与文档的索引中的数字指示相关联的实际值。词元提取器122可使用逻辑来将文档中的文本转换成可帮助确定文档是否是真匹配或者是否真的与输入的查询相关的数学表达式或理解。在这一示例中,词元提取器122已确定了“小于或等于”、“大于”以及“设置”的含意。在步骤450,词元提取器122获得的词元和值被传递给抽象语法树构造器。在这一阶段,抽象语法树构造器124为每一个匹配的文档构建抽象语法树。在这一示例中,构建的树示出找到的与提取出的赋予词含义的词元有关系的值。在步骤460,约束评估器126取得抽象语法树并且解析每一个树以确定该树是真还是假。如果树为真,则在步骤470,结果被从匹配引擎120输出。如果树为假,则结果不被匹配引擎输出。排名引擎130从匹配引擎120接收在知识库中找到的文档并以相关性为次序对文档进行排名。这被例示于步骤340。排名引擎可采用不同排名或评分方程来确定如何对检索到的文档进行排名。排名引擎130可给予不同匹配方法较高或较低的得分。在步骤350,评分的结果被输出给用户。在一些实施例中,具有低于阈值数的计算出的得分的文档可从所显示的结果中排除。在其它实施例中,x(例如,前3个)数量个文档将被返回给用户,无论曾被返回的文档数是多少。在一些实施例中,可提供可选反馈步骤360。反馈是向系统提交查询的用户或人可在其中向系统提供回关于曾被提供的结果的信息。这一反馈可包括查询中应当已被视为命名实体的项的标识或者与回答该查询的其它文章相比更为相关的文章的标识。这一信息被馈送回查询分析器110、匹配引擎120以及排名引擎130,使得它们相应的逻辑可用这一信息来更新。分析器110、匹配引擎120以及排名引擎130使用任何已知的用于将反馈纳入其逻辑的方法来更新它们自身。图5例示出根据一个实施例的计算设备的组件图。计算设备500可被用于实现本文所述的一个或多个计算设备、计算机过程、或软件模块。在一个示例中,计算设备500可用于处理计算、执行指令,接收并发送数字信号。在另一示例中,如本发明实施例的系统所要求的那样,计算设备500可被用于处理计算,执行指令,接收并发送数字信号,接收并发送搜索查询以及超文本,编译计算机代码。此外,计算设备500可以是分布式计算设备,其中计算设备500的组件位于通过网络或其他形式的连接而彼此连接的不同计算设备上。此外,计算设备500可以是基于云的计算设备。计算设备500可以是现在已知或将变得已知的能够执行本文所述的步骤和/或执行本文所述的功能(采用软件、硬件、固件或其组合的形式)的任何通用或专用计算机。在其最基本的配置中,计算设备500通常包括至少一个中央处理单元(CPU)或处理器502和存储器504。取决于计算设备的确切配置和类型,存储器504可以是易失性的(如RAM)、非易失性的(如ROM、闪存等)或是两者的某种组合。另外,计算设备500还可具有附加的特征/功能。例如,计算设备500可包括多个CPU。所述方法可由计算设备500中的任何处理单元以任何方式来执行。例如,所描述的过程可由多个CPU并行地执行。计算设备500还可包括另外的存储(可移动和/或不可移动),其包括但不限于磁盘、光盘或磁带。这些另外的存储在图5中由存储506示出。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术来实现的易失性和非易失性、可移动和不可移动介质。存储器504和存储506是计算机存储介质的全部示例。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光存储、磁带盒、磁带、磁盘存储或其它磁存储设备,或者可用于存储所需信息并且可由计算设备500访问的任何其它介质。任何这样的计算机存储介质都可以是计算设备500的一部分。计算设备500还可包含允许该设备与其它设备通信的(一个或多个)通信设备512。(一个或多个)通信设备512是通信介质的示例。通信介质通常以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任意信息传送介质。术语“已调制数据信号”是指使得以在信号中编码信息的方式来设置或改变其一个或多个特性的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。如此处所使用的术语计算机可读介质包括存储介质和通信介质两者。所描述的方法可用诸如数据、计算机可执行指令等之类的任何形式被编码在任何计算机可读介质中。计算设备500还可具有诸如键盘、鼠标、笔、话音输入设备、触摸输入设备等输入设备510。还可包括诸如显示器、扬声器、打印机等输出设备508。所有这些设备在本领域是众知的并且不必详细讨论。本领域技术人员会认识到,用于存储程序指令的存储设备可分布在网络上。例如,远程计算机可以存储被描述为软件的进程的示例。本地或终端计算机可以访问远程计算机并下载软件的一部分或全部以运行程序。替代地,本地计算机可以根据需要下载软件片段,或通过在本地终端上执行一些软件指令而在远程计算机(或计算机网络)上执行另一些软件指令来分布式处理。本领域的技术人员还将认识到,通过利用本领域的技术人员已知的传统技术,软件指令的全部,或一部分可以通过诸如DSP、可编程逻辑阵列等等之类的专用电路来实现。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1