如何提升RAG检索的准确率及答案的完整性?
RAG(检索增强生成),重点在于检索,即通过解析文档,然后使用嵌入模型进行向量化,通过欧式距离、向量积乘、最近临等算法来计算向量的相似度,找到与提问语义相似的上下文。然后通过将上下文提交给大模型进行回答的过程。
提示词模版举例:
'<指令>根据已知信息,简洁和专业的来回答问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题”,'
'不允许在答案中添加编造成分,答案请使用中文。 </指令>\n'
'<已知信息>{{ context }}</已知信息>\n'
'<问题>{{ question }}</问题>\n',
大家有没有发现开源RAG的默认分片长度为250, 重叠为50,但是存在检索准确率不高(找不到答案或找到的上下文无法回答该问题)和答案不完整(答案有缺失)的问题。
经过反复测试验证,发现分片长度为100-300时,检索的准确率相对比较高。为了照顾短答案,使用分片长度为100,重叠50,来提升检索提问上下文定位的准确率,并提升分片的完整度(不能完全保证)。为了保证答案的完整性,在100分片长度前后分别增加n*100分片长度和m*100分片长度。n的取值为0-5,m的取值为5-10。具体总结如下:
提问准确率:分片长度100
分片完整性:重叠长度50
答案完整性:n*100 + 100 + m * 100
大模型理解难度:将分片重叠部分做去重处理。
经过以上优化处理,提问答案定位的准确率基本能满足100%覆盖,答案的完整性也非常好。
至于重排模型,可用可不用,个人认为作用不大,使用重排模型的主要目的是因为检索不准确,检索准确了,重排的意义就不大,检索不准确的主要原因是以考虑到检索的速度,降低了一定的准确度,但当分片设置的比较小时,检索的准确率就提升上来了。