如何提高RAG的检索准确度(数据维度)

主要分为一下6个阶段,具体的数据内容需要根据业务在处理。

一、数据收集

推荐格式(高到低排序):
1、.txt / .md :纯文本格式,语义清晰,没有多余的格式符号,最容易被AI理解和切分。
2、.doc:能够很好地保留标题、段落等结构信息,方便后续提取。
3、.html:天然的DOM层级结构(如<h1>, <p>, <table>)非常适合程序化提取章节和内容。
不推荐格式:
1、.pdf:虽然常见,但极易包含复杂的排版、图片、表格嵌套,直接提取文本容易导致内容错乱。
2、.ppt:内容多为短语和图像,缺乏连贯的上下文,不适合作为主要的知识来源。
3、.jpg/.png:需要通过OCR技术提取文字,准确率和效率依赖于算法,且无法直接获取图像中的结构化信息(如表格)。

二、数据清洗

原始数据中往往包含大量对语义理解无益的“噪音”,必须在向量化前清除。
核心任务
        去除冗余信息: 删除页眉页脚、广告、版权声明、无意义的特殊字符和乱码。
统一术语和格式:将同义词统一(如“番茄”和“西红柿”),规范标点符号,统一为中文或英文标点。
处理特殊内容:
        表格: 将图片格式的表格转换为Markdown或CSV等结构化文本,并保留表头。
        图片: 对包含关键信息的图片,使用OCR提取文字并合并到相邻段落;对于展示类图片,可利用多模态模型生成文字描述。

        pdf转文本、图片内容ocr识别为文本、表格内容转文本等等。

三、数据结构化

        将清洗后的数据组织成AI易于理解的格式。以水果知识库举例,Markdown 是一个不错的选择,因为它能清晰地定义层级和属性。
        采用层级标题: 使用 #, ##, ### 来明确文档结构,如一级标题是水果名称,二级标题是“外形特征”、“营养价值”等。
        属性键值对: 对于“成熟时间”、“种植区域”等固定属性,使用 属性名: 属性值 的格式,清晰明了。
        列表化信息: 将并列的信息(如主要品种、口感特点)用列表形式呈现。

下面以水果知识库举例:

错误案例(纯文本,结构混乱):

存在问题:所有信息混杂在一起,AI难以精准定位和区分不同维度的知识。

苹果是一种常见水果,颜色有红有绿,大小不一,富含维生素C,一般在秋季成熟,山东和陕西是主要产区。苹果的品种很多,比如红富士、嘎啦果。
香蕉是一种常见水果,颜色多为金黄,形状呈弯月形,富含钾元素和膳食纤维,一般全年均可成熟,海南、广东、广西是主要产区。香蕉的品种很多,比如香芽蕉、小米蕉。

正确案例(Markdown,结构清晰):

###苹果
颜色:常见红色、绿色、黄色
大小:直径约69厘米
成熟时间:秋季(8月10月)
主要种植区域:山东、陕西、甘肃
主要品种:红富士、嘎啦果、花牛苹果
营养价值:富含维生素C、膳食纤维和钾。
###香蕉
颜色:未成熟为青色,成熟后呈金黄色
大小:单根长度约1525厘米
成熟时间:全年均可成熟上市
主要种植区域:海南、广东、广西、云南
主要品种:小米蕉、皇帝蕉、巴西蕉
营养价值:富含钾元素、膳食纤维与多种碳水化合物

优点:结构一目了然,每个知识点都独立且带有明确的标签,极大地方便了后续的检索和分块。

四、数据分块

        将结构化的长文本切分成大小合适的块(Chunk),是RAG系统性能的关键。分块的目标是保持每个块的语义完整性。
分块策略:
        1、按结构边界切分:优先在标题、段落等自然边界处切分,而不是简单地按字符数硬切。对于水果知识库,可以按每种水果或每个属性章节进行切分。
        2、设置重叠区:在相邻的两个块之间设置一定的重叠内容(如50-150个字符),可以有效防止关键信息在切分点被截断,保证语义的连续性。
        3、控制块大小:推荐每个块的大小在300-512个Token之间,既能保证信息密度,又不会因过长而稀释语义。
数据分块示例
假设我们有上面“正确示例”中关于苹果的Markdown文本。
错误示例 (固定长度硬切):
        设定每100个字符一切,可能会在“主要种植区域: 山东、”这里切断,导致第一个块信息不全,第二个块开头没有上下文。
正确示例 (按语义切分):
        将每个二级标题(#### 苹果)下的所有内容作为一个完整的块。这样,关于“苹果”的所有属性信息都在同一个语义块内,检索时能一次性获得完整上下文。        

        数据分块的方式,如下图Dify默认的分段标识符是“\n\n”可能不准,我们在文本里可以使用“####”分隔作为分段标识符

为解决长文本表示问题,RAG系统普遍采用分段策略:
1、固定长度分块
        简单按字符/词数分割(如256token一段)
        优点:实现简单;
        缺点:可能切断语义连贯性。
2、基于内容的分段
        按段落、标题等自然边界分割使用文本结构分析算法识别最佳分割点。
3、重叠分块:
        相邻分块保留部分重叠内容(如10%重叠)减少边界信息丢失,提高检索连贯性。
4、层次化分块
        多粒度分块(小节、段落、句子级别)适应不同粒度的查询需求。

五、数据标注

        为每个数据块(Chunk)附加元数据(Metadata),相当于给它贴上标签,可以实现更精准的过滤和检索。
标注建议:
        1、来源信息: 记录数据块的来源文档、页码等,便于溯源。
        2、内容标签: 为数据块打上内容相关的标签,如水果类别、属性类型、营养价值等。
        3、结构化信息: 将关键信息(如问题、标题)作为独立的元数据字段存储。

数据标注示例
在向量化存储时,每个数据块可以是一个包含文本和元数据的对象。
错误示例 (仅有文本):

{
  "text": "苹果...富含维生素C...秋季成熟..."
}

正确示例 (文本 + 元数据):

{
  "text": "- **颜色**: 常见红色、绿色、黄色\n- **大小**: 直径约6-9厘米...",
  "metadata": {
    "source": "水果百科全书.md",
    "fruit_name": "苹果",
    "attribute_type": "外形特征",
    "tags": ["水果", "仁果类", "秋季水果"]
  }
}

优点:当用户提问“哪些秋季水果是红色的?”时,系统可以先通过tags和attribute_type快速过滤,再在少量数据中进行语义匹配,准确率和效率都更高。

六、向量化并验证、维护

        完成嵌入后需要反复测试数据的召回是否正确,并不断调整数据,数据也需要维护,如一些过期的数据需要删除,老旧的回答需要更新等等。

其他资料:

嵌入式模型排行榜(embed model LeaderBoard):

https://huggingface.co/spaces/mteb/leaderboard
维度本地知识库模型微调Agent
核心目标补充实时 / 领域知识适配特定任务或风格自主完成复杂任务
实现方式检索 + 提示工程本地数据集 + 调整模型参数任务规划 + 工具调用
数据依赖需要高质量知识库需要标注 / 领域数据依赖工具 API 和交互环境
更新成本低(直接修改知识库)高(需重新训练模型)中(调整工具链或提示词)
典型场景实时问答、文档查询专业领域生成、风格定制自动化流程、多步骤任务

Embedding模型讲解

Reranker模型讲解

RAG十大误区和提高准确率

RAG温度设置分析和讲解

### RAG检索增强生成提高向量检索准确率的方法 RAG(Retrieval Augmented Generation,检索增强生成)是一种结合大语言模型(LLM)与外部知识源的框架,旨在通过检索相关文档来改进生成任务的质量[^2]。为了提高向量检索的准确率,可以采用以下方法: #### 1. **优化检索器** 检索器是RAG系统的核心组件之一,其性能直接影响向量检索的准确率。可以通过以下方式优化检索器: - 使用适应性增强检索技术(AAR),根据大语言模型的反馈动态调整检索策略,从而更精准地匹配查询需求[^1]。 - 引入REPLUG和UPRISE等方法,进一步完善检索系统的性能,确保检索结果与用户查询高度相关[^1]。 #### 2. **引入外部工具** 在RAG框架中,外部工具可以显著提升信息对齐的效率,进而提高向量检索的准确率: - PRCA(Precision Recall Curve Analysis)能够分析检索结果的精确性和召回率,帮助识别并优化检索中的薄弱环节[^1]。 - RECOMP(Reconstruction and Compression)用于重新打包检索到的信息,确保其以最紧凑且相关的形式呈现给大语言模型[^3]。 - PKG(Pre-trained Knowledge Graphs)可以作为辅助知识源,增强检索器对复杂查询的理解能力。 #### 3. **改进查询表示** 向量检索的准确率很大程度上依赖于查询表示的质量。为此,可以采用以下措施: - 使用“Hybrid with HyDE”方法进行检索,该方法结合了隐式检索和显式检索的优势,能够生成更高质量的查询表示。 - 借助monoT5等重排序模型,对初步检索结果进行重新排序,从而筛选出最相关的文档[^3]。 #### 4. **更新知识库** RAG的一个重要特点是能够利用外部知识源,这些知识源的时效性和准确性直接影响检索效果。因此,定期更新知识库,确保其包含最新的相关信息,是提高向量检索准确率的关键步骤[^4]。 ```python # 示例代码:使用FAISS进行向量检索 import faiss import numpy as np # 构建索引 dimension = 128 # 向量维度 index = faiss.IndexFlatL2(dimension) # 添加向量 vectors = np.random.rand(100, dimension).astype('float32') index.add(vectors) # 查询向量 query_vector = np.random.rand(1, dimension).astype('float32') k = 5 # 返回最近邻的数量 distances, indices = index.search(query_vector, k) print("Indices of nearest neighbors:", indices) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值