知识图谱入门(八):语义搜索
AIAI Summary (BLUF)
本文是知识图谱入门系列第八篇,深入讲解语义搜索的核心概念与实现技术。文章首先区分了语义搜索与传统关键词搜索的差异,介绍了语义数据搜索的三大挑战及最佳实践(基于IR、基于DB和原生存储),随后详细分析了索引、排序、结构分区和多数据源搜索等技术方案,最后介绍了结合文本、结构与语义数据的混合语义搜索系统。适合对知识图谱和智能搜索感兴趣的开发者阅读。
核心洞察
如果你只关心一件事:语义搜索基于语义理解而非关键词匹配的搜索技术,能理解查询意图和内容含义。的技术路线,这篇入门文章早就画清楚了。最让我意外的是 Semplore 拿信息检索的倒排索引一种索引结构,记录每个词项到包含它的文档的映射,支持快速的全文检索。去存 RDF 的做法,后来不少项目都借鉴了这个思路。作者断言数据搜索和文档搜索会合流,现在看基本说中了。
核心结论
语义搜索分为重量级和轻量级两类:重量级采用 RDF、OWL 等显式形式化语义模型做语义数据检索;轻量级基于分类体系、辞典等简单模型做语义文档检索。
语义数据搜索的三大难点是扩展性、异构性和不确定性;围绕三元组存储一种基于RDF三元组(主语-谓语-宾语)的图数据存储方式,用于支持语义数据的高效查询。主要有三条技术路线:信息检索路线(Sindice、FalconS)、数据库路线(Oracle RDF、DB2 SOR)和原生存储路线(Dataplore、YARS、RDF-3x)。
Semplore 复用信息检索的倒排索引来管理 RDF 数据,核心做法是把 RDF 转成带字段和词语的虚拟文档;增量索引需要在更新速度、搜索效率和索引大小三者之间做取舍。
Dataplore、YARS、RDF-3x 等原生存储方案在单台机器上可亚秒级查询 TB 级数据,同时支持高动态操作,但代价是不支持事务和恢复。
下一代混合语义搜索结合向量相似度搜索和全文搜索的技术,提高检索的准确性和智能性。系统由信息检索的排序方法、数据库的索引与查询处理、推理技术组合而成,典型架构 CE2 可对文本、结构化数据和语义数据统一处理,并把文档和数据作为整体返回检索结果。
语义搜索简介
语义搜索是什么?万维网之父 Tim Berners-Lee 的解释是:用数学把当今搜索里的猜测和近似抹掉,对词语的含义,以及词语和你搜索框里要找的东西之间的关联,建立起清晰的理解方式。
不同搜索模式之间的技术差异,集中在三块:用户需求怎么表示、底层数据怎么表示、匹配方法怎么设计。
以前的搜索主要是文档检索。信息检索用轻量级的语法模型来表示用户的查询和资源内容,比如用与、或这样的逻辑词拼条件,典型就是词袋模型将文本表示为词语集合的模型,忽略语序和语法,常用于传统信息检索中的文档表示。。这种模式做主题搜索很有效,但碰上更复杂的信息需求就撑不住了。
数据库和知识库专家系统走的是另一条路,能给出精确答案。它们用表达能力更强的模型来刻画用户需求,利用数据内部的结构和语义关联,允许复杂查询,返回精确命中的结果。
语义搜索大体分两类。一类是重量级的,数据库和知识库系统属于这类,语义建模显式又形式化,比如实体关系图,或者 RDF、OWL 里的知识模型,做的是语义数据检索。
另一类是轻量级的,基于语义的信息检索系统,用分类体系、辞典这类简单模型,把 RDF 嵌进文档或者挂到文档边上,做的是语义文档检索。
结构化和语义数据越来越多,面向数据的搜索和面向文档的搜索也在互相靠拢。数据这边的搜索,把信息检索里扩展性好的方法拿过来,处理数据质量问题,也处理那些带长文本描述的数据元素。文档那边的搜索,把数据库和语义搜索技术引入信息检索系统,在搜索时用上越来越多的高度结构化数据。
语义搜索的整体流程见下图。
(图:语义搜索流程)
语义数据搜索
语义数据搜索有三大难点。扩展性:链接数据要真正用起来,基础设施得撑住规模持续膨胀的数据。异构性:数据源各有各的结构,多数据源查询和结果合并都不好办。不确定性:用户的需求经常表达得不完整。
围绕三元组存储,业界摸索出了几类语义数据搜索的做法。
Sindice、FalconS 走信息检索路线。它们用单一的数据结构和查询算法,针对文本数据做排序优化。数据高度可压缩、随时可访问,排序是天然的一部分。缺点是简单的查询、连接操作处理不了。
Oracle 的 RDF 扩展、DB2 的 SOR 走数据库路线。它们用各种索引和查询算法,支撑结构化数据的复杂查询,能完成复杂的查询和连接,也扛得住大量插入删除这类高动态场景。缺点直接摆在明面上:B+ 树空间开销大,访问方式受限,叶子节点出来的结果没有排序集成。
原生存储的代表是 Dataplore、YARS、RDF-3x。它们既有信息检索的高压缩、高可访问,又具备数据库的查询和连接能力,单台机器亚秒级查完 TB 级数据,高动态操作也能应付。代价是没做事务和恢复。
存储和索引(Semplore,Dataplore 的前身)
Semplore 复用信息检索的索引来管理语义数据,核心做法是把 RDF 转成带字段和词语的虚拟文档。信息检索索引建立在几个概念上:文档、字段、词语、倒排表和位置表。字段就是标题、摘要、正文、作者这类。
用个例子把这几个术语串一遍,见下图。
(图:Semplore 索引示例)
有新元素插入时,不可能把索引推倒重建,只能做增量索引。早期的增量索引要遍历整个倒排表,慢得离谱。后来把倒排表分块,块一多,定位块又要更多随机访问,空间开销也跟着涨。索引更新速度、搜索效率和索引大小,三者得做个取舍。
排序和索引
索引建好也存好了,检索先要支持四种基本操作。
基础检索:给定字段和词语,取出对应的倒排表。
归并运算:对两个结果集合做交、并这类操作。
概念表达式计算:把概念和关键词放在一起算,比如「美国电影」这个类型和「战争」这个关键词取交集。
关系扩展:给定一个关系,从一个集合出发,把所有关联对象找出来。四种操作里,关系扩展最难做干净。
复杂查询怎么跑?看下面的例子。
(图:复杂查询示例)
大致流程是:从起始节点出发,经关系跳到下一个节点,把结果传回起始节点,再带着这份结果查下一个节点,最后回到起点汇总。遍历方式是深度优先。
查询结果要排序,排序有两条原则。质量传播:一个元素的分数是它质量的度量,更新分数时要把相邻元素的质量也带进去。数量聚合:除了质量,邻居的数量也参与打分,邻居越多,排名越高。
排序怎么和四种基本操作揉在一起?做法是引入按升序排列的整数流。基础检索从倒排索引取出倒排表,输出成整数流。归并运算对两条整数流求交集。关系扩展则按给定关系找关联对象,结果同样以整数流返回。
基于结构的分区和查询
基于结构的索引和分区,要把结构相似的节点聚合到一起,在硬盘上连续存储。结构感知的查询处理分两阶段匹配:第一阶段只检索结构上匹配查询的数据,第二阶段通过剪枝减少连接和读写开销。
一个数据图建索引和查询的例子,见下图。
(图:数据图索引与查询示例一)
(图:数据图索引与查询示例二)
先用结构索引对数据图的结构信息进行摘要和压缩的索引,用于加速结构匹配查询并减少I/O开销。在答案空间里检索和连接,产出一组结构索引,它们包含的数据元素在结构上匹配查询。再根据匹配的结构索引计算最终答案,剪枝只处理不包含非标识变量的树形查询部分。最后回到资源空间做检索和连接,验证答案空间里匹配的元素是否也匹配具体的查询实体,也就是常量和标识变量。
用结构索引做结构匹配,好处是省读写开销,连接操作的次数也变少了。
多数据源搜索:以 Hermes 为例
(图:Hermes 架构)
Hermes 的架构分三大块:融合数据源、理解用户需求、搜索和精炼。
知识融合部分的流程如下。
(图:Hermes 知识融合流程)
混合语义搜索
下一代语义搜索系统是拼出来的。信息检索提供基于统计的排序方法,数据库提供高效的索引和查询处理,再加上推理技术。一个混合语义搜索系统要做到三件事:把文本、结构化数据和语义数据放在一起处理,以统一方式管理不同类型的资源,检索结果要把文档和数据作为信息单元整体返回。
CE2 是这类系统的典型架构。
(图:CE2 架构)
图里的发生概率表分线上和线下两步。线下步骤,数据图存在数据库,实体索引存的是个体、关键词、文本组成的三元组,文档图存在文档索引,注释存在注释索引。线上步骤把混合查询拆成一组原子查询,用数据库引擎和信息检索引擎分别执行,再按查询树合并部分结果,最后给答案排序。
原文来自 Pelhans 的知识图谱入门系列博客。
常见问题(FAQ)
语义搜索和传统关键词搜索有什么不同?
语义搜索用数学方式理解词语含义和关联,能处理复杂信息需求,而关键词搜索基于词袋模型,适合主题搜索但难处理复杂查询。语义搜索分为重量级和轻量级两类。
语义数据搜索的三大难点是什么?
扩展性:数据规模膨胀基础设施难撑;异构性:数据源结构多样,查询和结果合并难;不确定性:用户需求表达不完整。围绕三元组存储,有信息检索、数据库和原生存储三类做法。
什么是混合语义搜索?
混合语义搜索结合信息检索的排序、数据库的索引查询和推理技术,统一处理文本、结构化和语义数据,管理不同类型资源,返回文档和数据整体。CE2是典型架构,分线下索引和线上查询执行。
版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。



