提升RAG召回和生成效果策略之——小块检索,大块生成

51 阅读3分钟

提升RAG召回和生成效果策略之——小块检索,大块生成

 小块召回,大块生成的策略的作用是提升文档的召回率,并保证文档上下文的连贯性。【AI大模型教程】

在RAG技术的真实实践过程中,我们经常会遇到的一个问题就是——模型回答的质量不好;当然导致回答质量不好的原因有很多,而我们今天就来讨论一种RAG问答的优化策略——小块召回,大块生成。

从本质上来说其实就是解决了两个问题,小块解决召回问题,大块解决生成问题。

小块召回,大块生成

可能很多人都不明白什么叫做小块召回,大块生成?

小块召回,大块生成的原理很简单;用更小的文档块做召回,解决召回率和准确率问题;用更大的块做生成,解决上下文连贯性问题,提升生成质量。

当然这样说可能很多人都不太理解,其实这个是与具体的技术细节有关。

首先我们要明白一个问题,向量数据库存储数据的原理和传统数据库并没有本质上的区别;都是用一个一个的字段来存储数据,只不过向量数据库有一个比较特殊的点是支持向量计算,而不是基于传统的字符匹配。

其次,可能有人会认为,相似度查询是把文档向量化之后,通过相似度计算的方式检索出相关数据,然后再问答时再把这段数据转换成文本文档。

但在RAG的流程中,在把文档切片之后,虽然会把切片后的文档进行向量化,但同时会保存原文档;我们只是用向量化的数据做相似度计算,而不是用来做生成。

举例来说,向量字段就类似于传统数据库中的ID或某个字段,然后还会有一个原始文档的字段;当根据相似度计算检索到某条记录之后,会把原始文档里的内容传给模型做生成。

所以,向量数据库也是一条记录一条记录的保存数据,而向量是其中的一个字段类型,专门用来做向量检索使用。

而什么是小块检索,大块生成呢?

在文档切片之后,特别是在低质量的切片之后,很多人为了简单方便会直接把切片后的数据进行向量化,这种文档可能存在大量的无关内容或噪音。

比如说word/pdf等类型的文档会存在页眉,页脚,分割符等等;但这些内容对我们来说是没有意义的,只会降低文档的质量。

所以,我们可以选择一种方式,就是对这段文档进行总结或关键字提取;之后再进行向量化,这样就可以大大降低文档的噪音,提升相似度计算的质量;同时,我们继续保存文档原始内容,当召回之后我们并不是把总结之后的文档丢给模型,而是把原始文档丢给模型,这样既能提升文档召回率,也不会影响到参考文档质量。

而以上这个过程就叫做小块召回,大块生成;用更小更准确的文档块做数据召回,用更大更全的文档做增强生成;这样既能保证文档的召回效果,又能保证上下文的连贯性。

总之,RAG系统的优化过程是一个非常复杂且繁琐的过程,我们需要在各个环节对系统做优化和测试,才能真正达到生产级别的需要。