利用层次聚类来提升知识检索的性能

news2026/4/28 15:33:18
从大型数据集中检索信息是具有挑战性的尤其是当共享的概念跨越多个来源而没有明确的链接的时候。假设有一堆想要查询的文档并且需要可靠的的软件来从这些文档中检索相关数据。然而随着所拥有的文档数量大大增加以至于我们不知道如何引导大模型找到那些包含答案的文档。更糟糕的是跨文档的相关概念在回答的问题时可以提供相当多的信息例如 假设在你的文件1中说A是B的老板而在文件23 中说在A的公司里有 2 个雇员。在文档108 中提到张三和李四有同一个老板。你问软件 “列出A的所有员工”我们的软件怎么知道查看文档108 和23 以及文档1而A的名字甚至没有在前 2 个文档中提到过1. 一般的解决方案在典型的检索增强生成RAG流程中系统首先将文档内容分割为多个文本块chunks然后通过嵌入模型将这些文本块转换为向量表示并存储在一个称为“索引”的结构中。当用户提出问题时系统也会将问题转化为向量并计算其与索引中所有向量的相似性从而检索出最相关的内容作为上下文最终输入给大语言模型用于生成答案。然而在面对复杂查询场景时这种标准的 RAG 方法可能会遇到一些挑战。例如当我们有五个不同来源、不同类型的信息文档而用户的问题需要从中综合提取信息时就会面临一个关键问题是否应将所有文档统一向量化并构建一个单一索引如果这样做虽然实现简单但检索过程会把所有文档视为一个整体缺乏结构化的语义区分导致难以从每个文档中精准获取相关信息。结果往往是只能检索到部分相关内容而遗漏了其他必要的信息源。另一种思路是为每个文档单独建立索引并分别进行检索之后将结果汇总传递给 LLM。这种方法确实在一定程度上提高了检索的准确性尤其是在文档间语义差异较大的情况下。然而它也带来了明显的可扩展性问题——当文档数量增加到数百甚至上千时逐一检索不仅效率低下而且增加了系统的复杂性和资源消耗。因此真正的问题核心在于我们如何让检索器智能地定位到与当前问题最相关的文本块子集换句话说我们需要一种更高级的检索策略能够根据问题的内容动态路由到正确的知识片段集合。这可能涉及引入元数据标签、主题分类、混合检索策略如关键词 向量联合检索、或使用专门的路由模型来识别哪些文档或块最有可能包含所需信息。2. 当前的解决方案解决上述问题的关键在于提升检索阶段的“语义理解”能力使其不仅仅依赖于向量相似性的匹配而是具备一定的逻辑判断和上下文感知能力从而实现更高效、准确的知识提取与整合。近年来一种日益流行的解决方案是构建一个独立的概念嵌入图embedding graph。这种图结构专门用于建模文本中实体和概念之间的关系不再仅仅将文档切分为文本块进行独立索引而是通过图的形式捕捉不同文档内部及彼此之间提及的实体之间的关联。这样一来检索的目标不再是孤立的文本片段而是蕴含丰富语义关系的图结构中的一部分。然而即使是对仅有五个文档构建的单一图索引在实际应用中也面临可扩展性挑战。随着图中节点和边数量的增长遍历整个图以收集相关上下文并进行跨文档推理的计算开销会迅速上升。当图中包含成千上万的节点和边时这种查询方式将变得效率低下难以满足实时或准实时检索的需求。为应对这一挑战我们需要在正式开始检索之前有效地缩小搜索空间。换句话说我们希望对相关的文本块即图中的节点进行合理的聚类或分组使得后续的检索算法能够聚焦于图中高度相关的区域而非在整个图中盲目搜索。这种方法不仅能显著提升检索效率还能增强结果的相关性和语义连贯性。因此未来的检索系统不仅要关注如何表示信息更要思考如何组织和索引这些信息使其既保留语义结构又具备高效的访问路径。这将是推动 RAG 系统迈向更高智能水平的重要一步。3. 进一步的解决方案正如人类大脑通过强化神经通路来优化记忆检索一样一种有效的策略是通过实现层次聚类来简化信息检索过程。这种方法不仅能够提高检索效率还能增强结果的相关性和语义一致性。此方法分为两个主要步骤社区检测第一级聚类首先进行的是社区检测即第一级聚类。在这个阶段系统使用类似于 K 近邻K-Nearest Neighbors, KNN的算法基于主题或上下文的紧密度对文本块进行初步分组。这些初步形成的簇被称为“社区”每个社区内的节点通常共享相似的主题或内容特征。例如在一个包含多个文档的知识库中所有讨论特定技术的文章段落可能会被归入同一个社区。超级社区检测第二级聚类接下来是超级社区检测即第二级聚类。在此步骤中系统会分析第一级社区的核心节点或中心点并根据更高层次的主题相似性将这些社区进一步聚合为更大的群组——“超级社区”。这种高级别的聚类有助于识别出跨多个社区的共同主题或概念使得检索时可以快速定位到最相关的知识区域而不是在细粒度的单个社区内逐一搜索。通过这种方式层次聚类不仅能够有效地减少检索空间提升查询速度还能够在保持高精度的同时提供更加连贯和全面的答案。这种方法模仿了人类认知过程中从具体细节到抽象概念的理解路径使得机器学习模型能够更智能地理解和处理复杂的信息结构。最终这种策略为构建高效、可扩展的知识检索系统提供了坚实的基础。3.1 社区探测的实现方法为了有效缩小图检索的搜索空间我们可以结合使用kNNk-最近邻算法和Leiden 社区发现算法分别实现文本块的相似性连接和社区结构划分。以下是具体实现步骤首先借助Tavily等工具我们可以获取多个文档并将其分割为大小适中的文本块以便后续处理。接下来使用sentence-transformer模型如all-MiniLM-L6-v2将每个文本块嵌入到一个高维向量空间中从而将其语义信息转化为可计算的数值表示。在这一过程中每一个文本块都会被表示为图中的一个节点并标记为Chunk类型。随后应用k-Nearest Neighbors (k-NN) 算法根据向量之间的余弦相似度为每个文本块找到最相近的 4 个邻居并在它们之间建立连接。这些连接以图中的边表示并统一标记为SIMILAR用于表达块与块之间的语义相关性。通过上述步骤构建出的图结构不仅保留了文本内容的局部相似性还为后续使用 Leiden 算法进行更高级别的社区划分打下了基础。这种分层组织方式有助于显著缩小检索范围使系统能够更高效地定位与查询最相关的知识区域。# Pseudo-visual of the first-level community detection nbrs NearestNeighbors(n_neighbors4, metriccosine) nbrs.fit(X) # X is the array of embeddings distances, indices nbrs.kneighbors(X) # Build edges based on similarity edges [] for i in range(len(X)): for j_idx, dist in zip(indices[i], distances[i]): if i ! j_idx: similarity max(0, 1 - dist) edges.append((i, j_idx, similarity))使用 igraph 库脚本应用 Leiden 算法在所有 Chunk 节点中查找第一级社区。在 Neo4j 中为每个节点分配一个社区标签。# Run Leiden g igraph.Graph(nlen(X), edges[(i, j) for i, j, _ in edges], directedFalse) g.es[weight] [w for _, _, w in edges] partition leidenalg.find_partition( g, leidenalg.RBConfigurationVertexPartition, weightsg.es[weight], resolution_parameter1.0 ) community_labels partition.membership在完成文本块的图结构构建后下一步是赋予每个节点和社区更具语义可读性的标签以便后续检索时能够更直观、高效地定位信息。具体而言大语言模型会为每一个文本块节点生成一个简短而具有描述性的名称。这个名称概括了该块的核心内容使图中的节点不再只是抽象的标识符而是具备实际意义的语义单元。在一级社区First-level Community形成之后LLM 会进一步综合该社区内所有文本块的内容生成一个更高层次的主题性命名。例如“足球偶像”、“摇滚乐队”等名称就是通过对社区内部共性主题的归纳得出的摘要式标签。这些名称不仅有助于人类理解社区内容也为后续的自动化处理提供了结构化的语义基础。当一级社区被成功识别并命名后我们往往会发现某些社区之间存在明显的主题相似性。比如“足球偶像” 和 “世界杯历史” 都属于体育领域。这自然引发了一个问题我们是否可以将这些相关的一级社区进一步聚类形成更高层级的组织结构答案是肯定的——这就是“超级社区Super-Community”的概念。超级社区作为多个相关一级社区的上层聚合起到了一种“分类伞”的作用能够将语义相近的社区归为一类如“体育世界”或“音乐文化”。引入超级社区机制后整个图结构就形成了一个多层次、等级化的知识组织体系。这种结构极大地优化了检索效率——系统在进行查询时首先会在超级社区或一级社区层级进行剪枝快速锁定最相关的区域再深入到具体的文本块中提取信息。这样一来即使是跨文档、跨社区的信息整合也变得更加高效。通过层级化过滤检索器能够在保证准确性的前提下显著减少搜索范围从而提升整体响应速度与推理质量。这种分层检索策略正是实现大规模 RAG 系统智能化、可扩展化的关键一步。3.2 方案特点通过将嵌入向量聚类为社区Community和超级社区Super-Community我们能够显著缩小检索器在处理查询时需要考察的节点范围从而大幅提升查询解析的速度与系统的整体可扩展性。这种分层聚类机制不仅优化了检索效率还为构建更智能、更结构化的知识图谱奠定了基础。为了增强图结构的可解释性和可用性我们可以利用大语言模型LLM为每一个文本块Chunk、每个社区以及超级社区生成简洁而富有语义的名称。例如“足球偶像”、“世界杯历史”或“摇滚乐队”等标签使得用户即使面对大规模的知识网络也能轻松理解其内容结构并进行高效导航。这种“人性化”的命名方式不仅提升了用户体验也为后续构建基于语义的代理路由器Agent Router提供了可能。该路由器可以建立在检索器之上根据查询的主题自动定位到相关的社区或超级社区从而进一步压缩搜索空间。无论用户的查询是局限于单个社区内部还是涉及多个超级社区之间的信息整合整个检索流程都能保持高度精简有效节省运行时间和计算资源。构建一阶一级社区和二阶超级社区的图结构本质上是对知识空间的一种语义化组织方式。它不仅大幅减少了潜在的检索范围更为实现快速响应、高并发、可扩展的 RAG 系统打下了坚实基础。更重要的是这种基于主题相似性的分层聚合机制显著提高了从海量数据中获取正确上下文以回答问题的可能性。换句话说系统不仅能更快地找到答案还能更准确地找到那个答案。因此这一方法不仅是性能优化的关键更是迈向智能化、语义驱动的检索系统的重要一步。4. 小结结合一级社区发现和二级超级社区形成的两步解决方案为限制搜索空间特别是多文档和多领域环境下的搜索空间提供了一种稳健的方法。查询不是在一个单一的整体索引中搜索所有嵌入或所有关系而是从基于主题统一性创建的图和超级社区中获取。这种方法平衡了性能和语义深度确保了速度和准确性PS: 如果你正在写一本书如果你也认可“大家帮助大家”我们欢迎你的加入。如果你想读一本好书 我相信这里作译者们推广的图书中应该会有你喜欢的那一本。作译者互助群活动——【参考资料与关联阅读】https://github.com/DenizAskinIBM/Knowledge-Graph大模型应用的10种架构模式7B13B175B解读大模型的参数万字揭秘生成式AI浪潮中的架构模式抽象的进化AgentOps拆解OpenAI最大对手的杀手锏为什么会是MCP智能体间协作的巴别塔困境如何破解解读Agent通信4大协议MCP/ACP/A2A/ANP大模型应用系列从Ranking到Reranking大模型应用系列Query 变换的示例浅析从零构建大模型之Transformer公式解读如何选择Embedding Model关于嵌入模型的10个思考解读文本嵌入语义表达的练习解读知识图谱的自动构建“提示工程”的技术分类大模型系列提示词管理提示工程中的10个设计模式解读基于图的大模型提示技术大模型微调RHLF与DPO浅析Chunking基于大模型RAG系统中的文档分块大模型应用框架LangChain与LlamaIndex的对比选择解读大模型应用的可观测性大模型系列之解读MoE在大模型RAG系统中应用知识图谱面向知识图谱的大模型应用让知识图谱成为大模型的伴侣如何构建基于大模型的AppQcon2023: 大模型时代的技术人成长简论文学习笔记增强学习应用于OS调度《深入浅出Embedding》随笔LLM的工程实践思考大模型应用设计的10个思考基于大模型LLM的Agent 应用开发解读大模型的微调解读向量数据库解读向量索引解读ChatGPT中的RLHF解读大模型LLM的token解读提示词工程Prompt Engineering解读Toolformer解读TaskMatrix.AI解读LangChain解读LoRA解读RAG大模型应用框架之Semantic Kernel浅析多模态机器学习大模型应用于数字人深度学习架构的对比分析老码农眼中的大模型LLM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2538561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…