孔某人的低维认知 10月26日 23:29
语义索引与千人万索引解析
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了语义索引的概念及其在Agentic Search和RAG等场景中的应用。作者认为,语义索引的核心功能是根据查询快速召回相关内容,而不仅仅是传统的关键字精确匹配。文章介绍了不同类型的索引,如倒排索引、embedding索引和Geo数据的空间索引,并强调了构建针对特定查询类型的快速通路的必要性。作者还提出了“千人万索引”的概念,即根据用户需求构建个性化的语义索引,以满足更复杂的查询需求。

🔍 语义索引的核心功能是根据查询快速召回相关内容,而不仅仅是传统的关键字精确匹配。

🗺️ 索引的本质可以理解为构建快速通路,类似于高速公路,以便更快地到达目标数据。

🌐 不同的索引类型适用于不同的数据结构和查询场景,例如倒排索引、embedding索引和Geo数据的空间索引。

👤 “千人万索引”的概念强调根据用户需求构建个性化的语义索引,以满足更复杂的查询需求。

🤖 LLM可以作为通用的语义提取和处理工具,用于构建针对特定用户需求的定制化语义索引。

原创 孔某人 2025-10-25 15:05 北京

谈什么是语义索引;什么是“千 人 万 索引”。

本文是来填之前挖的一个坑,语义索引。这个东西的使用场景与Agent、RAG召回等强关联,就放在一起谈。

由于一些原因,本文不会做太具体方案的讨论,但我尽量让读者明白我的认知角度。

(根据我的经验,即使说得很清楚,也会有一大帮人觉得这不够具体。基本上是否能看懂我的这个思路,和是否能实际应用的相关度很高。所以中间这部分的工作量我就可以省了)

1、Agentic Search

与2023年的传统RAG不同,目前前沿LLM模型厂的Chatbot已经在逐渐实装Agentic Search的模式,就是OpenAI o3模型web版本开始使用的方案,目前GPT-5 Thinking也是如此。其最主要特点是:Agent会自主进行多轮的召回,每轮召回的query是模型根据已有信息自己进行推理得到的。

2、当我说 索引 的时候我在讲什么

(由于过去搜广推算法和工程的普及,导致在互联网和IT领域中的索引这个词掺杂了太多搜广推本身的特性。所以我有必要介绍一下我所说的索引的概念。)

2.1、一般意义上的索引

广义来说,索引可以指一切符合下列条件的方案:当需要从一个完整的数据集中,根据query召回一部分内容,并且该过程访问的数据量复杂度低于O(N),其中N为数据总数。也就是说,所有对于给定query的召回,不需要全量遍历(或渐进复杂度等同于全量遍历)的方案。

当然这里实际上包括了检索过程、索引数据的表示、索引数据的更新方案等,后两者统称我所说的索引方案,当然一般检索过程也是与具体索引结构进行配合设计的,所以其实也很难完全剥离。

索引的类型其实有很多,除了目前大家熟悉的倒排索引、embedding索引外,现代数据库中其实有很多样的索引结构,针对于不同的数据结构和不同的问题,大家有兴趣可以去学习了解。

这里仅仅举一个例子,我认为它能很好地帮助读者在更一般的索引的层面进行思考,就是目前数据库中的Geo数据的空间索引。Geo数据包括:空间中的点、线、多边形等等,常见的数据是物理世界中的位置,一般以经纬度描述。常见的query类型有:获取一个点周围一定距离范围内的Geo对象,召回与一个Geo对象相交的所有Geo对象,判断两个Geo对象是否有相交等。

Geo数据的索引在各个数据库大致是在2000年前后逐步引入支持的,PostgreSQL一直是通过PostGIS插件进行支持,该插件在2005年达到1.0.0正式版。MySQL是在2004年开始通过扩展支持,在2015年正式在InnoDB引擎上支持。

但实际上到目前为止,大部分工程类岗位的同学对于这类Geo索引的实现方式也知之甚少,有一些是作为用户使用过这类索引。这个大家都不熟悉该索引内部实现的案例,能够更好地帮助这类读者去思考更一般性的索引的需求和使用方案。

当然有兴趣的读者也可以去研究一下这类索引的实现方式,每种数据-查询场景的索引实现方式其实都有所不同,能够开阔读者的视野。

2.2、索引的数学意义

但以上讨论都过于纠结于底层实现,不好理解索引的本质目标。所以本节试图给一个我心中的类似“几何解释”、“有物理图像”的解释。

索引的本质功能是对于特定的query不必遍历所有数据。那么一种思路就是在数据中构建一些快速通路,在各种算法中一般被称为(图上的)shortcut。

大家可以想象成是北京的市内高速路。你沿着高速路可以快速从一个位置触达到大部分区域,然后在目标区域再降低到低等级道路,向着目标去趋近。这个层级体系之所以有用,是因为实际的成本是通行时间而不只是距离。

在算法的角度上,我们为了能够更快地触达对应的目标,也需要一种成本更低的快速shortcut,而成本一般是跳转的次数(和缓存的未命中率),这里的跳转可以理解为是抽象意义上的指针解引用。所以我们就需要对于特定类型的query,有一种shortcut体系,能够降低从query起点到目标对象的跳转的次数。也就是我们构建了一个在该类型query下,相似内容距离更近的shortcut体系,能够更快地从query出发触达目标对象。

与实际道路不同的是,我们不能只依赖一种shortcut体系。因为实际的query可能关注的方面/维度是各种各样的,而一种shortcut体系(的实例)经常只能覆盖少数类型的请求。所以为了满足各种各样的query类型/角度,我们也需要针对于各种各样目标的索引实例,甚至是多种完全不同类型的索引。

3、语义索引

我选择对索引这个词冠一个【语义】的前缀,就是为了表明它不是传统的keyword类精确匹配的检索,措辞/token表示不同,但意思相似的内容也要被召回。

(目前的embedding类模型可以作为一种简单而较为通用的语义索引方式。但它太过于简单,以至于会给新方案设计者以强烈的误导说语义索引只能这样。)

反思我们平时遇到的一些需求,我们能够发现其中并不是对于整个文本段的语义相似度计算,而是对于其中某些信息维度有极大的侧重。例如说:项目管理类场景更关注区分和检索具体的项目,医疗场景更关注科室、病人、疾病等维度,教育场景更关注学科、学生等。我们可以使用这些通用的embedding方案直接作为索引/召回方案,但它们的效果并不够好。

传统To B RAG场景下已经演化出了应对的方式,对于重要的维度、keyword等构建专门的独立索引来帮助召回。对于直接keyword召回不合适的场景,还可以定义和挖掘内容中的各种entity来构建独立索引。这其实就是前面不同索引关注不同角度的具体案例。

但基于keyword、entity等的方式仍然相对狭窄,它们无法满足以下类型的query:

在Agent时代和语义内容处理时代,其实有各种各样的需求,它们无法靠传统方案进行满足,但对于LLM-native index来说,它们并非不能实现。

甚至说其实我们可以实现对单个用户需求所特化的索引,该索引该角度只服务该用户一人。例如说给一个HR岗位的用户,构建一个哪些会议出现了争吵的索引。LLM是一个通用的语义提取和处理工具,为单个用户特化的语义索引的构建成本其实没有很高,至少在用户愿意承担索引构建时所使用的LLM推理成本的情况下,该类功能其实不难实现。

甚至在不远的将来,我认为该类对于text字段的定制语义索引会直接集成在数据库中。

结语

希望本文能够拆掉读者认知中的一些不必要的墙。

(本文没有引用任何已有的论文或者不够主流的方案,因为这不是必要的。本文的思路是针对于某个场景根据第一性原理推导的。对特定问题的最优解、较优解就在那里,不需要任何其他的背书。)

交流与合作

如果希望和我交流讨论,或参与相关的讨论群,或者建立合作,请加微信,联系方式请点击 -> 专栏简介 及 联系方式 2024

本文于2025.10.25 首发于微信公众号。

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

语义索引 千人万索引 Agentic Search RAG LLM 检索
相关文章