RAG篇「数据集构建」保姆级教程来了!

 Datawhale干货 

作者:吴锦凤,Datawhale优秀学习者

冬灵,Datawhale成员

首篇:零基础入门:DeepSeek微调教程来了!

前篇:微调篇「数据集构建」保姆级教程来了!

这次是「数据集构建」保姆级教程第二篇,会持续更新。

一、构建属于自己的知识库

检索增强生成(Retrieval Augmented Generation),简称 RAG。在构建RAG(Retrieval-Augmented Generation)的向量知识库时,数据的处理方式直接影响系统的性能和可靠性。不能随意塞入未经处理的数据,否则可能导致检索效果差、生成结果不准确甚至安全隐患。

二、构建向量知识库数据集强调事项

构建向量知识库数据集的基本步骤与微调数据集(见前篇)基本一致,但有以下注意强调事项。

数据质量直接影响结果(向量知识库数据集严禁噪声与微调不一样!!!)

  • 问题:噪声、重复、低质数据会污染知识库,导致检索到无关内容。
  • 解决方案
    • 清洗数据:去除HTML标签、特殊符号、乱码等噪声。
    • 去重:合并相似内容,避免冗余数据干扰检索。
    • 标准化:统一文本格式(如日期、单位)、大小写、标点符号。
    • 质量筛选:优先保留权威来源、高可信度的内容。

数据与场景的匹配性

  • 问题:知识库与应用场景偏离会导致检索失效。
  • 解决方案
    • 场景过滤:仅保留与目标任务相关的数据(例如医疗场景需剔除无关行业内容)。
    • 动态更新:定期增量更新数据,避免时效性内容过期。
    • 冷启动优化:初期可引入人工标注的高质量种子数据。

安全与合规风险

  • 问题:随意导入数据可能泄露敏感信息或引入偏见。
  • 解决方案
    • 敏感信息过滤:使用NER识别并脱敏(如身份证号、电话号码)。
    • 偏见检测:通过公平性评估工具(如Fairness Indicators)筛查歧视性内容。
    • 权限控制:对知识库分级访问,限制敏感数据检索权限。
🌏

如果你不是使用Dify开源框架构建向量数据库,而是使用类似faiss向量数据库构建向量数据库还有以下注意事项:

1.文本分块(Chunking)需策略化

  • 问题:随意分块可能导致语义不完整,影响向量表示。
  • 解决方案
    • 按语义切分:使用句子边界检测、段落分割或基于语义相似度的算法(如BERT句间相似度)。
    • 动态调整块大小:根据数据特性调整(例如技术文档适合较长的块,对话数据适合短块)。
    • 重叠分块:相邻块保留部分重叠文本,避免关键信息被切分到边缘。

2.向量化模型的适配性

  • 问题:直接使用通用模型可能无法捕捉领域语义。
  • 解决方案
    • 领域微调:在领域数据上微调模型(如BERT、RoBERTa)以提升向量表征能力。
    • 多模态支持:若包含图表、代码等,需选择支持多模态的模型(如CLIP、CodeBERT)。
    • 轻量化部署:权衡精度与效率,可选择蒸馏后的模型(如MiniLM)。

3.索引结构与检索效率

  • 问题:海量数据未经优化会导致检索延迟。
  • 解决方案
    • 分层索引:对高频数据使用HNSW,长尾数据用IVF-PQ(Faiss或Milvus)。
    • 元数据过滤:为数据添加标签(如时间、类别),加速粗筛过程。
    • 分布式部署:按数据热度分片,结合缓存机制(如Redis)提升响应速度。

补充说明:向量知识库数据集也要是问答对?

将数据整理成问答对(QA Pair)形式是一种优化策略,而非必要步骤。但这种方式在特定场景下能显著提升检索和生成的效果。以下是其核心原因和适用场景的分析:

  1. 1. 为什么问答对形式能优化RAG?

(1)精准对齐用户查询意图

  • 问题:用户输入通常是自然语言问题(如“如何重置密码?”),而知识库若存储的是纯文本段落(如技术文档),检索时可能因语义差异导致匹配失败。
  • 问答对的优势
    • 直接以“问题-答案”形式存储知识,检索时相似度计算更聚焦于“问题与问题”的匹配(Question-Question Similarity),而非“问题与段落”的匹配。
    • 例如,若知识库中存有QA对 Q: 如何重置密码? → A: 进入设置页面,点击“忘记密码”…,当用户提问“密码忘了怎么办?”时,即使表述不同,向量模型也能捕捉到语义相似性。

(2)降低生成模型的负担

  • 问题:若检索到的是长文本段落,生成模型(如GPT)需要从段落中提取关键信息并重组答案,可能导致信息冗余或遗漏。
  • 问答对的优势
    • 答案部分已是对问题的直接回应,生成模型只需“改写”或“补充”答案,而非从头生成,降低幻觉风险。
    • 例如,QA对中的答案已结构化(如步骤列表),生成结果更规范。

(3)提升检索效率与召回率

  • 问题:传统分块检索可能因文本块过长或过短导致关键信息丢失(如答案分散在多个段落)。
  • 问答对的优势
    • 每个QA对是自包含的语义单元,检索时直接返回完整答案,减少上下文碎片化问题。
    • 可针对高频问题设计专用QA对,提高热门问题的响应速度和准确性。

  1. 2. 哪些场景适合问答对形式?

(1)任务型对话系统

  • 适用场景:客服机器人、技术支持、医疗咨询等垂直领域。
  • 原因:用户需求明确,答案通常简短且结构化(如操作步骤、诊断建议)。
  • 案例
    • 用户问:“如何退订会员?” → 直接匹配QA对中的答案:“登录账号→进入订阅管理→点击取消”。

(2)FAQ(常见问题解答)库

  • 适用场景:产品帮助文档、政策解读等。
  • 原因:FAQ天然适合QA形式,直接覆盖高频问题。
  • 案例
    • 知识库存储 Q: 保修期多久? → A: 本产品保修期为2年

(3)知识密集型生成任务

  • 适用场景:需要精确引用事实的场景(如法律咨询、学术问答)。
  • 原因:QA对中的答案可作为“事实锚点”,减少生成模型的自由发挥。
  • 案例
    • 用户问:“《民法典》规定离婚冷静期多久?” → 返回QA对中的法条原文。
🌏

问答对构建的注意事项

并非所有数据都适合QA形式

  • 避免强制转换
    • 叙述性文本(如小说、新闻)或开放域知识(如百科条目)更适合以段落或实体为中心存储。
    • 强行拆分为QA可能导致信息割裂(例如将“量子力学发展史”拆解为多个不连贯的问答)。

三、具体步骤示例(大学生求职不踩坑指南数据集——基于Dify向量知识库构建)

1、明确目标

确定你要解决的问题或任务,然后就可以寻找优质的数据集以及构建自己的数据集了~

2、数据收集

原始文档格式转换

可以是pdf转word,也可以是ppt转word,pdf转tx,

经过测试,大模型对TXT格式文档的识别度较高,尤其是在中文语言编码的情况下。因此,建议使用第三方工具将原始文档转换为TXT格式,以提高大模型的识别效果。 以下是笔者用过的一些方式:

  1. 1. 懒人办公(免费)

https://www.lanren.work/pdf/pdf-to-txt.html

  1. 2. 电脑自带的word

这个每个人的电脑都有,但是要看转换效果,感觉方法一可能效果会更好,要根据实际情况决定


  1. 3. wps(要会员)

这个方法适用于有wps的小伙伴,


3、数据标注和数据清洗

1、导入文件到大模型对话助手,进行初步格式调整

GPT可以进行转换,但不是所有ai助手的都可以进行格式转换

提示词模板:

🌏

帮我去除掉文档中所有空格,删除掉所有页码,同时删除掉“xx”相关字样,记住无需保留空行。


2、格式重新调整

把问题以QA形式罗列,格式如下,记住每个问答之间空格一行:

Q:问题

A:答案

原文本中问题格式为:

xxxxxxxxx

答案为下一个问题之前的所有文本

到这只需要人工再进行一些抽验~没问题的话,数据集就创建完成了!效果如下~

如果还有问题的话,可以再让GPT进行调整

3、导入Dify进行数据集训练

测试一下~构建一个agent

引用知识库~

这样数据集就构建好啦~

四、完结感言

首先,非常感谢合作小伙伴冬灵和我一起共创数据集构建系列二。

其次,非常感谢Deepseek官网满血版以及kimi在本章的代码修改、资料收集以及文章润色方面提供的宝贵帮助!

这是本系列的第二篇,中间还有很多需要完善的地方,我们非常期待各位小伙伴的宝贵建议和指正,让我们共同进步,一起在AI学习的道路上探索更多乐趣!

一起“”三连

(文:Datawhale)

欢迎分享

发表评论