语义搜索


徐海蛟 授课交流


概念:

语义搜索,指更加智能的搜索引擎,这是所有搜索引擎的一致目标。它代表支持用户表达复杂的查询需求,精确定位并给出答案。Rudi Studer (RS)认为:We look at semantic search as a process of information access, where one or several activities can be supported by semantic technologies. These activities include preprocessing and extraction of information, the interpretation of user information needs, the actual query processing, the presentation of results, and finally, the processing of user feedback for subsequent queries and to generate improved refinements。即语义搜索可以分为:信息预处理和信息抽取, 用户信息需求的结实,真正的查询处理,结果表示和用户反馈及优化处理.


语义搜索的概念在Semantic Web之前就已经出现。搜索引擎的核心技术是信息检索(Information Retrieval),这最早在digital library中得到应用,并且在早期的搜索中主要使用基于逻辑表示的boolean匹配。在近年中,随着自然语言技术的成熟以及现有syntax-based技术的缺陷,在一些企业搜索应用(如IBM)或者站点搜索(如Wikipedia, Freebase)甚至垂直搜索(如专家搜索,机票搜索等)中,语义技术(不仅仅局限于Semantic Web technology)被越来越多的提到和应用。PowerSet被称为成功的semantic search engine (主要基于自然语言处理的),于2008年5月被微软高价收购。


语义搜索包含很多内容,即使是semantic web search也有很多步骤运用不同的语义技术,因此说语义搜索走不下去未免过于绝对。同时我认为现阶段的semantic search肯定不是基于NLP的,而应该是考虑如何最大限度地利用meta data,那么就涉及到如何exploit或者leverage这些graph-based data,会有新的ranking问题,有新的更scalable的图遍历算法等产生,甚至对search的整体infrastructure进行修改。拿Google作例子,可能会对GFS, Bigtable, Map-reduce等进行必要的修改和扩展。所以我觉得结构发现和匹配是关键。你不可能让用户是指定SPARQL或者指定其中包含的结构,但是不代表semantic search不要利用这些资源或者信息。


类似Google找"~fast food", 返回 Burger King, Taco Bell,... 只要搜索中有语义匹配,都能算语义搜索; 搞语义网的人会说用了ontology来完成语义匹配和查找的是语义搜索; 看过Microsoft Research Asia有几篇论文关于《Object level Vertical Search》就是不以页面为单位而以页面中的元素即object为单位并为这些objects建立relation来完成object级的搜索,他们也说这是语义搜索。


很多基于metadata的语义搜索引擎原型也被提出,其中包括Yahoo的microsearch和searchMonkey等。我觉得Semantic Web的出现使得语义搜索更加流行也更加受到关注(但同时也使得semantic search这个词更加具有歧义了)。最大的问题是如何快速有效地进行推理和检索,毕竟用户最关心的是检索结果,而不关心如何实现。语义搜索引擎天生就比普通搜索引擎多出一个推理模块,自然会降低检索速度。为了做到有效的推理,知识库又需要足够完整。目前已有的几种语义搜索引擎中,有一些落眼就能看到明显的缺陷,足见这个领域仍处于起步阶段。


主流搜索引擎采用某些算法来实现语义分析功能,形成了“使用算法进行检索排序=利用本体进行语义分析”的应用效果格局。关于搜索和推理,其实目标都是一致的,最终得到的结果,都是返回用户所期望的数据。Kaon2上的几个实例是值得实践的。要结合常用的关系数据库进行推理,从技术上讲,也还是可行的,最起码本体的解析过程会提速很多!Kaon2的做法是采用了虚本体的方式,与数据库建立映射关系。另外WSMO的那一帮人搞了一套东西,叫做加载推理(翻译有问题的话,回头再讲),通过把检索语句(面向某个本体,支持合取检索,Datalog,SPARQL)/本体/本体之间的映射关系/本体与本地数据源模式之间的映射关系,共同加载到推理机中,通过逻辑推理(还有一些LP逻辑编程的东西),一次性的完成检索任务,感觉很不错!遗憾的是,没有看到最终可用的系统!


只有具备自主分析推理能力的搜索引擎才是真正的语义搜索引擎,换句话说就是它必须具备类似于知识库和推理引擎这样的用于分析其接触的内容的基础架构。故而可以把语义搜索引擎仅分为广义和狭义语义搜索。


传统算法与本体语义分析在使用效果上基本等同?


目前,所熟知的推理引擎对某一种或几种本体查询语言提供了支持。从其算法思想来看,它们之间的关系类似理论和实践的关系:推理引擎提出了一种语义推理的思想和方法,而操作则需要通过具体的查询语言和本体库作为“工具”。试想一下,不过一个只能空想不能做的“推理引擎”,如何实现?从另外一层面来看:1)不通过推理引擎,SPARQL是否可以执行呢?目前,大多数推理引擎均不支持完整的SPARQL语法,但网上有一些SPARQL在线执行的例子却可以完整的支持。那么是否可以得出结论,检索语言和推理引擎并不需要配套使用。事实上,查询语言是否可以脱离推理引擎而使用的。SQL也同样可以,所以才有了利用数据库漏洞执行SQL进行爆库的攻击方式,而且有专门为SQL开发的执行器;2)通过推理引擎,SPARQL获得了那方面的支持那?换句话说,和不加载推理引擎所完成的检索在结果集上有什么区别那?支持那种查询语言事实上只是出于效能、兼容性以及用户的使用习惯等因素考虑。


SPARQL是一种针对本体模式的查询语言因此,可以下结论上述所说的所有的推理能力(也就是对RULE的处理能力)他都不具备,看下面的说法 (Pellet supports SPARQL, which will allow you to make ontology queries. However, SPARQL is an RDF-based query language and has no understanding of OWL. It will, however, work with OWL if you have very simple queries. I'm not sure how it will interact with SWRL though. SPARQL can express RDF queries and will work with OWL in some circumstances. However, its lack of understanding of OWL's semantics can make it incredibly difficult to write many OWL queries.)当然,SPARQL和SQL还是有区别的。数据量的大小会影响最终查询结果的质量。但数据量很小时,本体查询和数据库查询的区别就不是那么明显了。这其中设计另外一个很重要的因素,那就是数据之间语义关系的复杂程度。


实现基于RDB的语义查询,途径之一便是可以对RDB上的SQL查询进行扩展,将一个SQL查询转换成多个查询加以执行,称之为OntoQE(Ontology_based Query Expansion)。但这种查询扩展只能利用数据之间同义、上下位等简单关系,并且这种查询扩展在提高了查全率的同时,极有可能降低查准率。


语义搜索若完全依靠本体库进行推理实现语义查询,在目前知识库不是很完备的情况下,反而在一定程度上降低了查全率!譬如假定对于用于输入的查询,如果在知识库中没有找到对应的本体实例,那么查询结果为零,而如果直接利用关键字在文档中搜索反而可能得到查询结果。所以为了平衡因知识库不完备而导致的查全率下降的情况,可以把传统的关键字检索加入进来,作为语义搜索的一个重要补充手段。所以即使设计出来的关系模式很完善,但基于其上的推理能力(不管这种推理是直接实现还是间接实现)还是比较有限,对于OWL中定义的一些复杂语义关系,SQL似乎无能为力,而推理应该是语义查询很重要的一个方面。


自然语言搜索是信息搜索的极致,但这不是一蹴而就的。同时,它还会必然增加我们对“语义搜索引擎”的研究和测度范围。而且事实上这种搜索引擎几乎可以说相当于传统搜索引擎的分词与同义词表加强版,某种角度讲和我们平时所说的“语义搜索引擎”有很大不同。重要的是如果将其划入“语义搜索”范畴,可能要改变我们一直遵从的语义网和语义搜索的认知。部分传统搜索引擎也将因其采用一些有利于自然语言分析的算法和新型检索策略增强用户体验来达到接近语义分析的效果。这种情况下,我们是把它们也算作“语义”搜索还是“非语义”搜索呢?


本体与数据库如SQL SERVER如何实现语义检索


用传统搜索引擎的某些算法好像也能在一定程度上达到语义分析类似的效果。例如,在《Sesame:A Generic Architecture for Storing and Querying RDF and RDFS》一文中,提出了将RDF(S)转换为关系模式存储的策略。设计合理的关系模式存储RDF(S),那么可以基于用户的普通SQL查询,构造出复杂的SQL查询(构造过程中包含了简单的语义推理:如subClassof、subPropertyOf关系等),从而也就可以实现基于关系数据库的语义查询了。不过,为了达到语义检索的效果,还需要加入专门的语义分析及推理模块,这本身就会降低检索效率,使检索结果不能马上返回。而且,高级复杂的推理还需要大量的工作。问题远远不仅仅这些,还会面临海量数据无法迅速分析和操作的问题,以及结果的反馈问题。机器加程序分析真的能够和绝大多数人的想法完全重合吗?这就需要知识表达,既要符合人类的思维,又要便于计算机的表达与推理。数据挖掘的算法也是为了发现关系.而语义网则是显示表示和处理关系.所以数据挖掘的确能达到语义搜索的效果.但精确度肯定是不够的.数据挖掘一般都需要有一个数据模型.所以如果语义网的确定模型应用到数据挖掘中可能会有意想不到的效果。


Oracle数据库,到目前为止,还没有做数据异构和数据挖掘!先前,RDF存储是期望利用关系数据库在语义检索和本体提取这方面的功能的。关系数据库的查询优化到底在语义查询中可以做点什么呢?


本体库存储到关系数据库之后是无法直接用SQL查询的,只能通过本体库编辑工具。本体持久化,通俗地说就是将本体数据用数据库保存,以增强检索效能。为大量本体文件提供高效检索和管理渠道。因此,设计合理的关系模式存储RDF(S),那么可以基于用户的普通SQL查询,构造出复杂的SQL查询(构造过程中包含了简单的语义推理:如subClassof、subPropertyOf关系等),从而也就可以实现基于关系数据库的语义查询了!


如何提取有效的URL,即信息提取器的选择,普通的信息提取器恐怕难以胜任针对语义网络的信息抽取,只能使用特别用于语义网的。这里面还包括如何使信息提取器提供有效的URL以方便信息抽取。


这里的“信息提取器”是这类工具的统称,也可以称作“爬虫”、“蜘蛛”或“机器人”,例如,知识工程研究室隶属清华大学计算机科学与技术系软件所开发的《中文新闻关键词抽取系统》,就是这样一种工具。语义搜索技术无非是对海量的信息用计算机进行高等级的序化,如果没有这种工具,只能由人工添加记录,就会变成传统的网络目录了。


其实,语义化的知识要进行语义化的查询还是有路子可循的。目前针对于此的研究重点有:一是如何抽取语义信息;二是在于如何将查询语义化,例如将自然语言查询转换为SPARQL查询。自然语言查询转化,与此同时,搜索内容的处理也同样不能忽视。否则搜索什么东西呢?对搜索内容也要进行统一整理,进行语义化的。三是将语义查询结果生成自然语言文本。


你可能感兴趣的:(大数据,智能搜索,徐海蛟博士,徐海蛟)