在RAG中,如何对数据进行处理是非常重要的,传统的RAG中,数据处理第一步就是指切片,即如何将一份数据切成小份。如果分的不好,句子从中间切断,会导致数据召回的时候意思不连贯,AI产生误解。
就以302.AI的更新日志为例,下面是需要切片的源文本:
2024.9.5
【全能工具箱】现在在API超市进行调试无需再手动填入API Key,系统会自动填好
【工具超市】AI文档编辑器支持了超长文一键生成和界面内AI聊天的功能
【聊天机器人】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,优势是专注于提供有用、最新、准确的回复,来自Perplexity
【API超市】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,来自Perplexity
【API超市】DeepL新增了翻译成任何语言的接口
【帮助中心】更新了几个常用的工具集成教程,例如Lobe-Chat,沉浸式翻译等
2024.9.3
【管理后台】全能工具箱和机器人现在支持是否显示账户余额,在高级选项进行配置,默认关闭
【API超市】视频生成新增了Minimax的文生视频
【API超市】图片生成新增了艺术二维码生成,来自302.AI
【绘画机器人】Midjourney价格降到了原来的50%
现有的问题
切片问题一:句子中断
如果切片时,我们只考虑字数,每100个字切一刀,很有可能会出现从句子中间切断的情况,例如:
2024.9.5
【全能工具箱】现在在API超市进行调试无需再手动填入API Key,系统会自动填好
【工具超市】AI文档编辑器支持了超长文一键生成和界面内AI聊天的功能
【聊天机器人】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,优势是专注于提供有用、最新、准确的回复,来自Perplexity
【API超市】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,来自Perplexity
【API超市】DeepL新增了翻译成任何
语言的接口
【帮助中心】更新了几个常用的工具集成教程,例如Lobe-Chat,沉浸式翻译等
2024.9.3
【管理后台】全能工具箱和机器人现在支持是否显示账户余额,在高级选项进行配置,默认关闭
【API超市】视频生成新增了Minimax的文生视频
【API超市】图片生成新增了艺术二维码生成,来自302
.AI
【绘画机器人】Midjourney价格降到了原来的50%
此时会发现,文字被从中间切断了。
切片问题二:段落中断
句子中断,其实是非常低级的问题,很容易解决,可以通过标点符号等判断句子是否完整,再进行切割。段落切割,就会复杂一些。例如刚才的例子,我们把句子完整度考虑进去,可能就会切割为2条:
2024.9.5
【全能工具箱】现在在API超市进行调试无需再手动填入API Key,系统会自动填好
【工具超市】AI文档编辑器支持了超长文一键生成和界面内AI聊天的功能
【聊天机器人】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,优势是专注于提供有用、最新、准确的回复,来自Perplexity
【API超市】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,来自Perplexity
【API超市】DeepL新增了翻译成任何语言的接口
【帮助中心】更新了几个常用的工具集成教程,例如Lobe-Chat,沉浸式翻译等
2024.9.3
【管理后台】全能工具箱和机器人现在支持是否显示账户余额,在高级选项进行配置,默认关闭
【API超市】视频生成新增了Minimax的文生视频
【API超市】图片生成新增了艺术二维码生成,来自302.AI
【绘画机器人】Midjourney价格降到了原来的50%
此时看起来没有什么问题,但是假如用户问了一个问题:
9月5日的更新是什么?
此时只会检索到第一条,因为第二条没有任何9月5日相关的信息,这样就会遗漏了第二条中“【帮助中心】更新了几个常用的工具集成....”的内容。
解决方案
解决方法一:设置相邻文本重合
在302.AI,点击知识库中的高级设置,可以看到这个设置:
这个设置的意思就是,每个切片之间,有一定的重叠部分。例如:
2024.9.5
【全能工具箱】现在在API超市进行调试无需再手动填入API Key,系统会自动填好
【工具超市】AI文档编辑器支持了超长文一键生成和界面内AI聊天的功能
【聊天机器人】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,优势是专注于提供有用、最新、准确的回复,来自Perplexity
【API超市】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,来自Perplexity
【API超市】DeepL新增了翻译成任何语言的接口
【帮助中心】更新了几个常用的工具集成教程,例如Lobe-Chat,沉浸式翻译等
2024.9.3
【API超市】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,来自Perplexity
【API超市】DeepL新增了翻译成任何语言的接口
【帮助中心】更新了几个常用的工具集成教程,例如Lobe-Chat,沉浸式翻译等
2024.9.3
【管理后台】全能工具箱和机器人现在支持是否显示账户余额,在高级选项进行配置,默认关闭
【API超市】视频生成新增了Minimax的文生视频
【API超市】图片生成新增了艺术二维码生成,来自302.AI
【绘画机器人】Midjourney价格降到了原来的50%
其中下面这一段,在两个片段都出现了。
【API超市】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,来自Perplexity
【API超市】DeepL新增了翻译成任何语言的接口
【帮助中心】更新了几个常用的工具集成教程,例如Lobe-Chat,沉浸式翻译等
2024.9.3
如果用户问:
集成教程几号更新的?
由于集成教程这个关键词在2个片段中都会出现,所以会同时召回两个片段,交给AI后,AI可以准确的判断出具体的时间。
解决方法二:增加切片长度
有句话叫,大力出奇迹,RAG也不例外。其实RAG就是为了减轻大模型的负担,减少它处理的上下文。但是随着现在的模型越来越强,甚至有些模型的上下文高达2M(Gemini-1.5-pro),所以在切片这块,可以不用切的那么细,尽可能喂更多的内容给大模型,让AI去处理。
在302.AI,点击知识库中的高级设置,可以看到这个设置:
当AI回答找不到你想要的内容时,可以对这个参数进行调整,500,1000,2000都可以。上面的范例,切出来,就只有一个片段了,这样AI就不会错过任何信息:
2024.9.5
【全能工具箱】现在在API超市进行调试无需再手动填入API Key,系统会自动填好
【工具超市】AI文档编辑器支持了超长文一键生成和界面内AI聊天的功能
【聊天机器人】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,优势是专注于提供有用、最新、准确的回复,来自Perplexity
【API超市】支持了pplx-8b-online,pplx-70b-online,pplx-405b-online,来自Perplexity
【API超市】DeepL新增了翻译成任何语言的接口
【帮助中心】更新了几个常用的工具集成教程,例如Lobe-Chat,沉浸式翻译等
2024.9.3
【管理后台】全能工具箱和机器人现在支持是否显示账户余额,在高级选项进行配置,默认关闭
【API超市】视频生成新增了Minimax的文生视频
【API超市】图片生成新增了艺术二维码生成,来自302.AI
【绘画机器人】Midjourney价格降到了原来的50%
但是注意,这个长度越长,AI处理的上下文越多,费用也会随之增加。所以如何找到一个最佳实践点,还需要你自己慢慢的去测试。
解决方法三:粗切片+细切片
有时候,切片切得过粗,对模型的要求就越高,不聪明的模型可能会找不到重点。此时我们可以使用一份文件,切两次片的办法,粗切一遍,细切一遍。这样模型召回的时候,会同时召回两个颗粒度的文本,就像一页标记了重点的书。
细切片,我们推荐按语义切片的方式,可以更加科学的识别段落等,来自于Jina.ai。
在302.AI,点击知识库中的高级设置,可以看到这个设置:
总结
这里只是介绍了几个比较简单的数据处理办法,但是生产环境中,数据本身的质量也是非常重要的。如果数据本身就是含糊不清,段落错乱,只是通过切片优化,也是无法解决的。所以最终还需要你使用自己的数据,去尝试不同的方案,找到最适合你的。