🔄OpenAI分享的在RAG的最佳实践
type
status
date
slug
summary
tags
category
icon
password
第一部分
客户需求:他们有大量文档(比如10万份),希望模型只基于这些文档进行知识检索。
解决方案:
- 直接将PDF和docx文件嵌入,准确率是45%。
- 经过20次调优迭代,解决细节小Bug - 准确率到65%
- 基于规则进行优化,譬如先判断问题属于什么领域(退一步思考),然后再回答,效果提升到85%
- 发现数据里有一些是结构化数据(如表格),为此定制提取解决,准确率提升到98%。
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
第二部分
客户需求:文本生成SQL(利用自然语言问题和数据库模式生成语法正确的SQL查询,比如给定一个数据库模式和一个问题,能否生成相应的SQL查询)。
解决方案:
- 首先,我们用最简单的方法,比如余弦相似性,寻找类似问题的SQL查询,进行问题相似性搜索。
我们测试了不同的嵌入和提示工程,但结果不太好。
后来,我们意识到不同的数据库模式对问题的答案可能完全不同。
- 所以针对一个问题进行相似性搜索意义不大,但用预设答案进行搜索可能效果更好。
我们使用预设的文档嵌入,生成一个假设的SQL查询进行相似性搜索,性能大大提升。
对于这个特定问题,我们尝试了上下文检索,通过简单过滤将问题按难度排名,只带回同等难度的例子,这带来了改进。
我们还尝试了一些先进技术,比如链式推理,让系统识别列、表,最后构建查询。
但我们决定采用更简单的方法进行自我一致性检查,让系统构建查询并运行,出错时给出提示,再次尝试。
- 我们从69%开始,然后添加了一些示例,得到了几个改进点,这表明RAG可以进一步改进。
我们尝试这个问题,看到性能提升了3%,然后使用答案,假设的文档嵌入使我们进一步提升了5%。
- 我们决定试试微调,看能否更进一步。先建立了我们的基线,与上一张幻灯片里的69%基线一样,使用简单的提示工程技术。
然后,用简单的提示工程对GBT 4进行微调,结果模型准确率提升到接近82%。
再稍微调整模型使用um rag技术,把一些示例动态注入上下文窗口,准确率达到83.5%。
这些都很简单,没有复杂的数据预处理或后处理。
结果显示简单的微调和提示工程也能接近最先进的技术。
总而言之:
当你想提高语言模型(LM)的性能时,可以从提示工程技术开始,这些技术投资小,能够快速迭代,验证解决问题的可行性。
这个过程不是线性的,可能需要多次迭代才能满意,你会在这些技术之间来回切换。
- 我们隔着一条鸿沟远远地观望,我们会以为某件事情很简单.
- 但是当我们建立好评测标准、样本集合,并且实践之后,才会发现有很多原先没考虑到的问题。
- 当我们解决一个问题之后,会发现指标提高一点(也可能证明不可行),这个过程不是线性的,没有一帆风顺的情况。
都是启发式地,碰到问题,然后解决问题。
openai官方关于RAG技术优化的样例文章:
Loading...