大家好!我是程序员寒山。
通过这么多期的讲解,很多粉丝已经对RAG知识库有了了解,但是对如何提高准确率还是感觉无从下手,我们今天就给大家分享一下数据结构化清洗的详细讲解,通过这个清洗和结构化工作,可以让知识库的准确率提升一个大的台阶。
引言:为什么RAG需要结构化数据?
当然这里的结构化是和数据内容本身有关系的,应该说是有限的结构化清洗。
RAG(Retrieval-Augmented Generation)是一种增强检索与生成能力的AI技术,通过从知识库中检索相关内容辅助生成更准确的答案。
然而,知识库的数据质量直接决定RAG的效果。非结构化数据(如杂乱文本)会导致检索噪声大、语义理解偏差等问题,而结构化数据则能显著提升检索精度。
就像我们的图书馆一样,里面很多书都是按门类整齐摆放的,如果所有的书都堆在一起,那就只能称为废品站了,因为没有人去看书,压根就找不到,再牛的图书管理员,也只能自叹:“臣妾真的做不到啊”。
本文以菜谱和Dify为例(其它工具需要根据其自身特点处理),解析数据结构化的方法及实操演示结构化和清洗的详细过程,结构化后的数据如何导入,并演示结构化前和结构化后的实际效果。
一、数据结构化的核心目的
1.1 解决杂乱数据知识库回答不准的痛点
- 关键词依赖性强:非结构化文本依赖关键词匹配,容易遗漏语义关联,如图中的关键词提取,从这段内容中提取了这么多,然后对这些词进行向量化,如果遗漏就会丢失一些特征。
- 冗余信息干扰:菜谱中的图片、图表、无关描述会干扰检索结果。
我们目前只处理文本,所以无关的信息要删除,比如上面菜谱的图片,也包括“图片”文字等,这就是冗余信息的清理。
- 上下文割裂:步骤、食材、技巧混杂,导致模型难以精准定位信息。
一道菜的信息被分成了多段,每段都进行独立向量化,最后检索的时候想把一个菜的分开的几段都找齐是很难的。
比如:就像把两个完全不同的拼图,打散后混在了一起,再拼起来那就相当困难了。
1.2 结构化数据的优势
- 精准语义理解:通过标签化、分类字段,模型能理解数据的深层含义。
- 高效检索:支持多维度过滤(如食材、烹饪时间),提升召回率。
- 可控生成:结构化的知识单元完整,同类同组数据不分割(如一个菜的完整数据)。
可以看出每个菜都是完整的一个分段,在Dify里面父分段是完整检索输出的。也可以使用通用分段,区别不是特别大。
二、结构化方法
这里结构化就像前面提到的,是有限的结构化,需要和使用的工具结合使用,如果工具不支持,那么做了也没有作用,这里以工具Dify为例,文件以PDF菜谱为例,结构化流程可分为三步:
2.1 PDF文件清洗
由于PDF文件中有表格和图片,第一步进行识别,把表格转化为文本,图片去除(因为是菜品,上面没有文字信息,如果有的话进行OCR处理)。
2.2 打标签
给上一步转化后的数据,增加菜系,冷热菜,菜名等标签。
让每一个菜的属性更全面,这样它的向量信息就更准确,检索的准确度自然就高了。
所有的菜处理完后就是这样的一个效果:
2.3 分块
目标:文本拆分时,尽量不要把同一个主题,同一个完整内容拆开,比如一道菜不能拆成几块。
我们这里结合Dify的分块功能,进行对文档进行处理。
Dify提供了自定义分段标识符的功能,我们要好好的利用这一点,我们使用“####”进行分割菜谱。
同时分块的最大长度是4000tokens,我们就按字简单估计就行了。拆分后检查一下,看看是否每个菜谱都是完整的。
三、结构化前后数据对比
- 非结构化示例:
PDF菜谱中一个一个菜品的图表和图片介绍:
- 结构化示例:
结构化后的数据,是清洗、打标签、分段后的数据。
四、实战案例:菜谱库结构化提升60%准确率
4.1 菜谱设计
- 数据集:30种菜品,川菜、鲁菜、粤菜个10种,冷热菜都有的非结构化菜谱PDF文件。
- 工具链:Dify + Python脚本 + LLM。
- 评估指标:检索准确率。
4.2 结果对比
场景 | 检索准确率 | 用户满意度 |
非结构化数据 | 38% | 低(答案冗余) |
结构化数据 | 95% | 高(答案精准) |
4.3 典型问答示例
- 提问:“推荐一道川菜中的凉菜?”
- 结构化前:
这是思考的过程,思考了一大堆。
我们看看回答的结果是什么:
可以看到找到2个,推荐一个都不正确,关键推荐的是个鲁菜,准确率相当地,有30%不错了。
- 结构化后:
同样的问题,我们使用结构化之后的数据,返回的结果如下:
基本上每次都是正确的,95%以上,这就是数据的有限结构化给RAG带来的改变。
五、结论:结构化是RAG技术的重要前提和基石
数据结构化是优化RAG系统的基石。通过入库前将非结构化文本转化为结构化数据,可显著提升检索准确率与生成质量。
对于垂直领域(如菜谱、医疗、法律),结构化不仅能改善问答效果,还能支持复杂查询,释放数据的深层价值。
如:“推荐一个含花生的凉菜”,回答是:老醋花生,相当的Nice。
那么现在你知道怎么进行数据结构化了么?有问题欢迎留言讨论!