8.2 文档预处理模块(二)

一、从0开始:简易RAG实现

在构建更复杂的 RAG 架构之前,我们先从最基础的版本入手。整个流程可以分为以下几个关键步骤:

1.数据导入:加载并预处理原始文本数据,为后续处理做好准备。

2.文本分块:将长文本分割成较小的段落或句子,以提高检索效率和相关性。

3.创建 Embedding:使用嵌入模型将文本块转换为向量表示,便于进行语义层面的比较与匹配。

4.语义搜索:根据用户输入的查询内容,在已有向量库中检索出最相关的文本块。

5.响应生成:基于检索到的相关内容,结合语言模型生成最终的回答输出。

二、基于语义的文本分块

在 RAG中,文本分块(Text Chunking)是一个至关重要的环节。其核心作用是将一大段连续文本划分为多个具有语义完整性的较小段落,从而提升信息检索的准确性和整体效果。

传统的分块方式通常采用固定长度的切分策略,例如每500个字符或每若干句子进行一次分割。这种方法虽然实现简单,但在实际应用中容易割裂完整的语义单元,导致后续的信息检索与理解受到影响。

相比之下,一种更智能的分块方法是语义分块(Semantic Chunking)。它不再依据字数或句数进行机械划分,而是通过分析句子之间的内容相似性来判断合适的切分位置。当检测到前后句子在语义上出现明显差异时,就在该位置断开,形成一个新的语义段落。

切分点的判定方法

为了找到合适的语义切分点,我们可以借助以下几种常见的统计方法:

1.百分位法(Percentile)找出所有相邻句子之间语义相似度差异的“第 X 百分位数”,并在那些差异值超过该阈值的位置进行切分。

2.标准差法(Standard Deviation)当句子间的语义相似度下降幅度超过平均值减去 X 倍标准差时,在该位置进行切分。

3.四分位距法(IQR, Interquartile Range)利用上下四分位数之差(Q3 - Q1)来识别变化较大的位置,并将其作为潜在的切分点。

三、添加“块标题”(Contextual Chunk Headers,CCH)

RAG 通过在生成回答之前从外部知识库中检索相关信息,从而提升语言模型的事实准确性。然而,在传统的文本分块方法中,往往会丢失重要的上下文信息,导致检索效果不佳,甚至使模型生成脱离上下文的回答。

为了解决这个问题,我们引入了一种改进方法:上下文块标题(Contextual Chunk Headers, 简称 CCH)。 这个方法的核心思想是: 在将文本分成小块(chunk)时,将该段内容所属的高级上下文信息(如文档标题、章节标题等)一并加到每个文本块的开头,然后再进行嵌入和检索。 这样做可以让每个文本块都带有其背景信息,帮助模型更好地理解它属于哪个部分,从而提高检索的相关性,并避免模型基于断章取义的内容生成错误答案。

本方法中的步骤如下:

1.数据导入(Data Ingestion)加载并预处理原始文本数据。

2.带上下文标题的分块(Chunking with Contextual Headers)自动识别文档中的章节标题,并将这些标题加到对应段落的前面,形成带有上下文的文本块。👉 例如:

# 第三章:人工智能的基本技术人工智能的核心方法包括机器学习、深度学习和自然语言处理...

3.创建嵌入向量(Embedding Creation)将这些带有上下文信息的文本块转换成数字形式(即嵌入向量),以便后续进行语义搜索。

4.语义搜索(Semantic Search)当用户提出问题时,系统会基于这些增强后的文本块,找到最相关的内容。

5.生成回答(Response Generation)使用大语言模型(如 Llama、ChatGLM 等)基于检索结果生成自然、准确的回答。

6.评估效果(Evaluation)通过评分系统对 AI 的回答进行评估,检查加入上下文标题后是否提升了回答的准确性和相关性。

四、Query改写

实现了三种查询转换(Query Transformation),以提升检索增强生成(RAG)系统的信息检索效果。

核心目标:

通过修改或扩展用户的原始查询,帮助系统更准确地理解用户意图,并从向量库中找到更相关的信息。

三大查询转换技巧

1. 查询重写(Query Rewriting)

将用户的问题变得更具体、更详细,从而提高检索的精准度。

🔹 示例:

  • 用户原问题:“AI 是什么?”

  • 重写后的问题:“人工智能的定义及其核心技术有哪些?”

✅ 提升点:让搜索更精确,避免过于宽泛的结果。


2. 回退提问(Step-back Prompting)

生成一个更广泛、更高层次的问题,用于获取更多背景信息,帮助系统更好地理解上下文。

🔹 示例:

  • 用户原问题:“深度学习在医疗领域有哪些应用?”

  • 回退问题:“人工智能在医疗行业的应用有哪些?”

✅ 提升点:有助于找到与问题相关但不直接匹配的重要背景知识。


3. 子查询拆解(Sub-query Decomposition)

将一个复杂的问题拆分成多个更简单的小问题,分别进行检索,最后综合所有结果,提供更全面的回答。

🔹 示例:

  • 用户原问题:“比较机器学习和深度学习的优缺点及应用场景。”

  • 拆解为:

  • “什么是机器学习?”

  • “什么是深度学习?”

  • “机器学习有哪些优缺点?”

  • “深度学习有哪些优缺点?”

  • “它们各自适用于哪些场景?”

✅ 提升点:确保覆盖问题的所有方面,避免遗漏关键信息。

ref :RAG技巧与底层代码剖析

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

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

相关文章

【系统与工具】Linux——Linux简介、安装、简单使用

计算机概论与Linux简介 计算机概论Linux介绍与版本 Linux的规划与安装 Linux与硬件平台密切相关规划硬件与Linux安装 主机规划与磁盘分区安装CentOS、多重引导 简单使用 帮助手册文本编辑器关机 0. Linux介绍与版本 操作系统(Linux):高效…

从视频数据到数字孪生:如何构建虚拟与现实的桥梁?

概述 视频数据与三维场景融合渲染技术通过将动态视频与静态三维模型结合,利用GPU加速、WebGL渲染、数字孪生等技术,实现虚拟与现实的交互式融合。该技术广泛应用于智慧城市、工业监控、虚拟现实、游戏特效等领域,能够提升场景的直观性和用户沉…

【笔记】开源 AI Agent 项目 V1 版本 [新版] 部署 日志

kortix-ai/suna at v1 一、最新版本号 V1 二、部署截图 本地开发环境仍然依赖于 Poetry 环境&#xff1a; &#xff08;Python>3.11,<3.13&#xff09; 创建本地 Poetry 虚拟环境 Python 多版本环境治理理念驱动的系统架构设计&#xff1a;三维治理、四级隔离、五项自…

NumPy-梯度与导数计算详解

NumPy-梯度与导数计算详解一、梯度与导数的基本概念1. 导数的定义2. 梯度的定义二、NumPy中的梯度计算函数&#xff1a;np.gradient()1. 函数语法2. 一维数组的梯度计算3. 多维数组的梯度计算三、基于梯度的导数近似方法1. 前向差分2. 中心差分四、实际应用场景1. 函数优化2. 数…

Redis架构安全

先学习&#xff1a;Redis架构简介-CSDN博客 Redis压测 Redis一般应用于高并发的场景&#xff0c;所以一定要对Redis的性能做压测。 Redis提供了压测脚本redis-benchmark&#xff0c;可以对Redis进行快速的基准测试。 # 20个线程&#xff0c;100W个请求&#xff0c;测试redi…

自动化Trae Apollo参数解释的批量获取

自动化Trae Apollo参数解释的批量获取一、背景介绍二、设计思路三、操作步骤1. 环境准备2. 获取界面坐标3. 定位关键元素4. 执行自动化查询5. 获取结果四、完整代码五、扩展应用一、背景介绍 在自动驾驶开发中&#xff0c;百度Apollo平台提供了大量参数用于调整系统行为。Trae…

数学模型:十大距离

十大距离 文章目录十大距离定义1. 欧氏距离&#xff08;Euclidean Distance&#xff09;2. 曼哈顿距离&#xff08;Manhattan Distance&#xff09;3. 切比雪夫距离&#xff08;Chebyshev Distance&#xff09;4. 闵可夫斯基距离&#xff08;Minkowski Distance&#xff09;5. …

流水线(Jenkins)打包拉取依赖的时候提示无法拉取,需要登录私仓的解决办法

在日常工作中&#xff0c;遇到了Jenkins拉取部门内部组件库失败的情况&#xff0c;原因是组件库后面放到了阿里云私仓&#xff0c;并且是没有公开的&#xff0c;所以就会有如下提示的&#xff0c;一开始我实在.npmrc文件写死阿里云提供的接入token&#xff0c;后面发现可能是因…

操作系统王道考研习题

1.1.4本节习题精选 一、单项选择题 01&#xff0e;操作系统是对(&#xff09;进行管理的软件。 A.软件 B.硬件 C.计算机资源 D.应用程序 01.c 操作系统管理计算机的硬件和软件资源&#xff0c;这些资源统称为计算机资源。注意&#xff0c;操作系统不仅管理处理机、存储器等硬件…

C语言extern的用法(非常详细,通俗易懂)

以往我们都是将所有的代码写到一个源文件里面&#xff0c;对于小程序&#xff0c;代码不过几百行&#xff0c;这或许无可厚非&#xff0c;但当程序膨胀代码到几千行甚至上万行后&#xff0c;就应该考虑将代码分散到多个文件中&#xff0c;否则代码的阅读和维护将成为一件痛苦的…

Git【开源分布式版本控制工具】安装-配置-常用指令-Git远程仓库-IDEA使用Git

参考博客&#xff1a;Git&#xff08;分布式版本控制工具&#xff09;_为什么哔哩哔哩有些视频没有字幕-CSDN博客 Git就是一个类似于百度云盘的仓库&#xff1b;重点是要掌握使用idea操作Git&#xff0c;企业用的最多&#xff0c;一般不会去使用命令 Git通过不断阶段保存文件…

JavaScript数组键值去重方法

使用 filter 和 Map 根据键值去重我来详细解释方法2&#xff0c;这是一种高效且简洁的数组去重方法&#xff0c;特别适合根据对象中的某个键值进行去重操作。完整代码function uniqueByKey(arr, key) {return [...new Map(arr.map(item > [item[key], item])).values()]; }分…

【机器学习笔记Ⅰ】9 特征缩放

特征缩放&#xff08;Feature Scaling&#xff09;详解 特征缩放是机器学习数据预处理的关键步骤&#xff0c;旨在将不同特征的数值范围统一到相近的尺度&#xff0c;从而加速模型训练、提升性能并避免某些特征主导模型。1. 为什么需要特征缩放&#xff1f; (1) 问题背景 量纲不…

10.9 大模型训练数据优化实战:3步让准确率从68%飙升至79%

大模型训练过程分析与数据优化 一、训练过程关键指标分析 (插入mermaid流程图:训练过程监控与优化闭环) #mermaid-svg-Gni031LkHA93fQYM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Gni031LkHA93fQYM .erro…

深度学习模型在C++平台的部署

一、概述深度学习模型能够在各种生产场景中发挥重要的作用&#xff0c;而深度学习模型往往在Python环境下完成训练&#xff0c;因而训练好的模型如何在生产环境下实现稳定可靠的部署&#xff0c;便是一个重要内容。C开发平台广泛存在于各种复杂的生产环境&#xff0c;随着业务效…

若以部署在linux,nginx反向代理,登录404,刷新404问题

history模式在router下面的index.js文件的最下面history: createWebHistory(import.meta.env.VITE_APP_CONTEXT_PATH),这两个配置文件都加上然后nginx里面的配置是这个位置按照实际情况&#xff0c;我的是用docker挂载的&#xff0c;所以在/usr/share/nginx/html/lw-clothing为…

SQL Server通过存储过程实现HTML页面生成

引言在现代企业应用中&#xff0c;数据可视化是提升决策效率的关键。SQL Server作为核心数据库管理系统&#xff0c;不仅处理数据存储和查询&#xff0c;还具备强大的扩展能力。通过存储过程直接生成HTML页面&#xff0c;企业能减少对中间层&#xff08;如Web服务器或应用程序&…

qt绘制饼状图并实现点击即放大点击部分

做得比较low #ifndef TEST_POWER_H #define TEST_POWER_H#include <QWidget> #include <QtMath> #include <QPainter> #include <QPushButton> #include <QVector> #include <cmath>namespace Ui { class test_power; } struct PieData {Q…

HashMap的put、get方法详解(附源码)

put方法 HashMap 只提供了 put 用于添加元素&#xff0c;putVal 方法只是给 put 方法调用的一个方法&#xff0c;并没有提供给用户使用。 对 putVal 方法添加元素的分析如下&#xff1a;如果定位到的数组位置没有元素 就直接插入。如果定位到的数组位置有元素就和要插入的 key …

双立柱式带锯床cad【1张总图】+设计说明书+绛重

双立柱式带锯床 摘 要 随着机械制造技术的进步&#xff0c;制造业对于切割设备的精度、效率和稳定性要求越来越高。双立柱式带锯床作为一种重要的切割设备&#xff0c;必须能够满足工业生产对于高精度、高效率的需求。 双立柱式带锯床是一种重要的工业切割设备&#xff0c;其结…