当前位置: 首页 > article >正文

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

从大型数据集中检索信息是具有挑战性的尤其是当共享的概念跨越多个来源而没有明确的链接的时候。假设有一堆想要查询的文档并且需要可靠的的软件来从这些文档中检索相关数据。然而随着所拥有的文档数量大大增加以至于我们不知道如何引导大模型找到那些包含答案的文档。更糟糕的是跨文档的相关概念在回答的问题时可以提供相当多的信息例如 假设在你的文件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

相关文章:

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

从大型数据集中检索信息是具有挑战性的,尤其是当共享的概念跨越多个来源而没有明确的链接的时候。假设有一堆想要查询的文档,并且需要可靠的的软件来从这些文档中检索相关数据。然而,随着所拥有的文档数量大大增加,以至于我们不知…...

Meta烧Token成KPI,OpenClaw引发AI成本结构重塑:不拼算力拼效率

Meta内部烧Token成风近日,据The Information报道,Meta公司内部出现了名为“Claudeonomics”(源自Anthropic旗舰产品Claude)的AI token消费排行榜,由员工自愿在公司内网创建,追踪超8.5万名员工的token使用情…...

《每个女孩都是生活家》

去年接触到生活家这个词,百度汉语“生活家是生活中有很多经验以及灵机一动的智慧的人”,很生动。这本书读起来很轻松,没有什么大道理,都是些生活小心思。大概花了两个小时读完,原来生活里值得好好端详、认真写下来的事…...

Anthropic新品频发“斩杀”传统软件公司,AI与SaaS是取代还是融合?

Anthropic新品发布,传统软件公司遭殃又一家明星公司,被Anthropic无情“斩杀”。4月18日,Anthropic发布新产品Claude Design。用户通过对话就能创建网页或App设计方案,包括交互式原型、产品功能图等,还能制作演示PPT、线…...

RMBG-1.4与Anaconda集成:Python数据科学工作流

RMBG-1.4与Anaconda集成:Python数据科学工作流 1. 引言 在日常的数据科学工作中,我们经常需要处理大量的图像数据。无论是电商平台的产品图片处理,还是社交媒体内容的批量编辑,背景去除都是一个常见但耗时的任务。传统的手动抠图…...

ARM地址转换与分支记录缓冲区(BRB)机制详解

1. ARM地址转换机制深度解析在ARMv8/ARMv9架构中,地址转换是内存管理单元(MMU)的核心功能,它通过多级页表将虚拟地址(VA)转换为物理地址(PA)。这种转换机制不仅实现了内存隔离和保护,还为虚拟化提供了硬件支持。我们先从最基础的地址转换指令…...

Elasticsearch:从入门到生产落地

一、什么是 Elasticsearch?为什么我们需要它?Elasticsearch(简称 ES)是一个开源的、分布式的、RESTful 风格的搜索引擎和数据分析引擎。它基于 Lucene 库构建,提供了简单易用的 API,隐藏了 Lucene 的复杂性…...

Claude Code每日更新速览(v2.1.114)-2026/04/20

本文前言:ClaudeCode最新版本v2.1.113/114带来多项重要更新:1.安全方面强化沙箱控制,新增域名黑名单功能,修复高危漏洞如Bash命令绕过问题;2.交互体验优化终端URL显示、多行编辑快捷键,改进全屏模式操作&am…...

0011.盛水最多的容器

题目链接 11. 盛最多水的容器 - 力扣(LeetCode) 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多…...

3分钟永久激活Windows和Office:KMS_VL_ALL_AIO智能脚本终极指南

3分钟永久激活Windows和Office:KMS_VL_ALL_AIO智能脚本终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗烦恼?Office突然变成只读模式让你束…...

YOLOFuse功能体验:多种融合策略,满足不同精度需求

YOLOFuse功能体验:多种融合策略,满足不同精度需求 1. 多模态目标检测的价值与挑战 在智能安防和自动驾驶领域,单一传感器已经难以满足全天候、全场景的检测需求。传统RGB摄像头在低光照、烟雾、雨雪等复杂环境下表现不佳,而红外…...

jQuery 遍历 - 祖先

jQuery 遍历 - 祖先元素 (Ancestors) 在 jQuery 中,祖先遍历用于从当前选中的元素向上查找其父级、祖父级等所有祖先元素。这对于动态定位、样式修改或数据获取非常有用。 一、核心方法 1. parent() - 获取直接父元素 只返回一级父元素。 // 语法 $(selector).paren…...

前端交互性能优化实例

前端交互性能优化实例解析 在当今快节奏的互联网时代,用户体验直接影响产品的成败。前端交互性能优化是提升用户体验的关键,尤其在移动端和复杂Web应用中更为重要。本文将通过几个实际案例,介绍如何通过优化前端交互性能,减少卡顿…...

jQuery 遍历 - 后代

jQuery 遍历 - 后代元素 (Descendants) 在 jQuery 中,后代遍历用于从当前选中的元素向下查找其子元素、孙元素等所有后代节点。这是 DOM 操作中最常用的功能之一。 一、核心方法 1. children() - 获取直接子元素 只返回一级子元素(直接后代)&…...

Linux服务器新手入门:不懂命令行也能管理服务器的完整指南

Linux服务器新手入门:不懂命令行也能管理服务器的完整指南 快速安装小皮面板(一键脚本) if [ -f /usr/bin/curl ];then curl -O https://dl.xp.cn/dl/xp/install.sh;else wget -O install.sh https://dl.xp.cn/dl/xp/install.sh;fi;bash in…...

一篇吃透:Python 数据清洗与预处理企业级实战

📝 本章学习目标:本章聚焦企业数据智能处理,帮助读者掌握Python AI 协同的数据清洗与预处理全流程。通过本章学习,你将能独立完成从脏数据诊断、智能清洗、特征预处理到企业级落地的完整工作,适配数据分析、机器学习、…...

RAG检索增强生成:让大模型拥有最新知识

什么是RAG RAG(Retrieval-Augmented Generation) 即检索增强生成技术,是一种将信息检索系统与大规模语言模型相结合的技术框架。其核心思想是在生成回答之前,先从外部知识库中检索相关信息,然后将这些信息作为上下文提…...

终极Degrees of Lewdity中文汉化配置指南:3步快速解决游戏语言障碍

终极Degrees of Lewdity中文汉化配置指南:3步快速解决游戏语言障碍 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Local…...

ESP32-S3 SPI屏幕性能优化实战:如何将LVGL帧率从卡顿提升到23FPS

ESP32-S3 SPI屏幕性能优化实战:如何将LVGL帧率从卡顿提升到23FPS 当你在ESP32-S3上成功移植LVGL并看到第一个界面时,那种成就感无与伦比。但很快,现实会给你当头一棒——动画卡顿、界面迟滞,用户体验直线下降。这不是LVGL的问题&a…...

魔兽争霸III优化终极指南:免费开源插件WarcraftHelper完全配置教程

魔兽争霸III优化终极指南:免费开源插件WarcraftHelper完全配置教程 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争霸III…...

因漏洞数量激增,NIST 已停止对低优先级漏洞的评分

聚焦源代码安全,网罗国内外最新资讯!编译:代码卫士由于漏洞提交量不断增加导致工作量日益增长,美国国家标准与技术研究院 (NIST) 上周宣布从2026年4月15日起,停止为优先级较低的安全漏洞分配严重性评分。自4月15日起&a…...

3、IoT物理极限架构最佳实践:一文讲透端边双主(可分可合,非传统高可用)

核心概念:端边双主、非对称双主、物理极限、物理约束IoT物理极限架构思想前提是:物理极限,物理约束,而最佳实践准则是:非对称端边双主,轻量云赋能,个体自治(端、边、云),降级服务&am…...

解锁BilibiliDown的5大隐藏功能:从基础下载到批量管理的完整探索指南

解锁BilibiliDown的5大隐藏功能:从基础下载到批量管理的完整探索指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.co…...

Spring Cloud Eureka停更后,我们团队是如何平滑迁移到Nacos的(附完整配置对比)

Spring Cloud Eureka停更后,我们团队是如何平滑迁移到Nacos的(附完整配置对比) 当Netflix宣布Eureka进入维护模式时,我们团队正在使用Spring Cloud Netflix构建的微服务架构已经稳定运行了两年多。面对这个突如其来的变化&#x…...

西门子S7-1500暖通空调冷水机组PLC程序案例, 硬件采用西门子1500CPU+ET200...

西门子S7-1500暖通空调冷水机组PLC程序案例, 硬件采用西门子1500CPUET200SP接口IO模块,HMI采用西门子触摸屏 程序采用SCL控制程序编程,系统水泵采用一用一备,通过程序实现了加减机控制,根据压差控制开启的水泵台数以及…...

Vite现代化的前端构建工具详解

文章目录Vite 是什么?Vite 与 Node 的关系Vite 的核心特性1. 极快的冷启动2. 按需编译3. 预构建依赖4. 热模块替换(HMR)5. 生产打包使用 RollupVite 的工作原理开发环境生产构建Vite 的典型使用场景与 Webpack 等传统工具的对比如何在 Node 中…...

QQ空间说说备份神器:GetQzonehistory完整使用指南

QQ空间说说备份神器:GetQzonehistory完整使用指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,我们的记忆常常散落在各种社交平台中,Q…...

适合放在简历上的开源项目与练手项目Idea清单

在竞争激烈的求职市场中,一份亮眼的简历往往能让你脱颖而出。而开源项目和练手项目正是展示你技术实力和实践经验的重要砝码。无论是参与知名开源项目,还是自主开发练手项目,都能体现你的编程能力、解决问题的思维以及对技术的热情。本文将为…...

从Date到LocalDateTime:一次搞懂Java 8日期API的升级逻辑与实战迁移

从Date到LocalDateTime:Java 8日期API的全面迁移指南 当你在一个遗留的Java项目中看到java.util.Date的身影时,是否曾为它的时区问题头疼不已?或是被它的可变性设计坑过多次?Java 8引入的全新日期时间API正是为了解决这些历史包袱…...

保姆级教程:用STM32和飞特STS3215舵机做个机械臂关节(附完整代码与协议解析)

从零构建STM32机械臂关节:飞特STS3215舵机深度开发指南 在机器人开发领域,舵机控制是构建可动关节的核心技术。飞特STS3215作为一款支持360连续旋转的高性能数字舵机,其精确的位置控制和丰富的参数配置功能,使其成为DIY机械臂项目…...