大模型微调实践-OpenAI的RAG和微调经验总结
介绍
演讲标题:A Survey of Techniques for Maximizing LLM Performance
日期: 2023年11月14日
演讲人:
John Allard(Engineering Lead, Fine-tuning Product Team at OpenA)
Colin Jarvis(Solutions, EMEA at OpenAI)
主题:探讨Prompt Engineering(提示词工程)、Fine-tuning(微调)、RAG技术,学习优化LLM针对各种问题类别性能的实用策略。
内容总结
优化LLM的难点,首先最大的问题在于很难分清信号和噪声,问题难以定位,其次LLM的表现难以衡量,导致难以判断问题的严重程度,最后即使问题定位清楚,如何解决已发现的问题也是难点。
优化LLM表现的过程,不是按照“提示词工程->RAG->微调”这样的线性过程,原因在于RAG和微调解决的问题类型不同导致。
提示词工程总数最好的起点,利用其可以快速测试和学习的特点,可以用一个提示的评估结果,判断问题的出在输入的上下文内容,还是模型的行为。如果问题是相关性不高的上下文内容导致的,则可以利用RAG解决。如果问题是模型行为指令导致的,就可以直接使用微调技术。
典型LLM的优化流程
第一步,创建提示输入、输出评价标准、评估操作过程
第二步,添加给模型使用的少量输入-输出示例,审视模型的输出相关性效果是否有明显改善,如果是,则可以沿着RAG的方向优化。
第三步,模型上下文充足的情况下,输出格式和风格不完全符合要求,则需要采取微调策略。
第四步,重复循环第二和第三步,直到输出满意内容、符合输出标准为止。提示词工程实践经验
5.1 编写清晰指令的提示词看着简单,但是却是很多人初次使用最容易失败的地方。
确定能正确评估和推进LLM优化的评估体系,系统性衡量评估测试变动,以防止陷入“打地鼠”的困境。
5.2 提示词工程的局限性:受上下文窗口限制,在提示中加入大量新信息、复杂的风格或方法要求、越加越多的提示示例令牌,都会导致输出存在延迟、成本等问题。
5.3 提示词改进方向:明确指示确定将要呈现什么,任务是什么,并给模型时间思考。
5.4 提示词后使用RAG还是微调,可以想象为准备考试的过程,提示可视为完成考试做需要的指示,微调可视为已学习过的学习内容,用于解决问题所需要的框架,RAG可视为考试过程中的可以使用的开放书籍。在知道方法和需要查找问题的情况下,RAG可以实现翻书翻到正确页面去获取内容的效果。RAG实践经验
6.1 RAG的优势在于,它可以向模型引入新的信息来更新其知识。通过控制内容来减少幻觉也是使用RAG的常见用例。
6.2 教授模型学习新的语言格式和风格并不是RAG的适应场景,反而更适合微调。
6.3 提示工程和RAG听起来简单,其实非常难做,需要经过大量迭代、测试和学习才能真正实现。
6.4 通常认为模型投入生产,一般需要用到微调,但实际上,绝大多数的问题都是上下文问题,要么是没给它正确的上下文,要么是模型不知道哪一块上下文才是正确的。
6.5 对于RAG,如果要求模型只能使用其自身RAG数据库的内容,而检索系统没有建好,则模型是没有机会获得正确答案的,所以评估RAG时,不仅模型本身有会出问题,检索也会出问题。
6.6 OpenAI推荐RAGas评测框架作为评价RAG的开源评估系统.
6.7 RAGas评测指标:分别衡量回答问题的质量和对问题的相关性。 Faithfulness(忠诚度)、Answer Relevacy(答案相关性)、Answer Similarity(回答&答案相似度)、Context recall(上下文召回)
6.7.1 Faithfulness(忠诚度):用于评价模型幻觉程度。将输出拆分为多个陈述,并分析陈述内容是否可以从上下文推理得出。
6.7.2 Answer Relevacy(答案相关性):用于评价模型回答和用户输入的相关性如何。其方法是检查模型输出内容和输入内容用户提问的相关性,并用可能提问和真实提问计算余弦相似度,由此来决定权重大小。
6.7.3 Answer Similarity(回答&答案相似度):评估模型回答的内容和标准答案之间的相似程度,对回答和标准答案做向量化和归一化处理,计算余弦相似度。
6.7.4 Context recall(上下文召回):评估能否检索到的回答问题所需要的所有相关信息,评估检索的上下文对回答问题的帮助程度大小。微调实践经验
7.1 微调的两点好处:微调相比提示词工程面对模型上下文窗口的限制,可以向模型展示更多数据量,展示更多的示例;微调后的模型相比原始基本模型,在交互时减少复杂提示技巧的需求,高效延迟低,请求便宜快速、响应延迟和成本更低。
7.2 微调时需要先设置合适的期望,其通过适用于更强调基础模型已存在的知识,已有知识的一个子集。
7.3 微调不适用于向模型中添加新知识,想将新知识传递到模型中,可以考虑使用RAG技术。
7.4 微调不适合快速迭代新用例,因为微调本身就是一个相互缓慢的反馈循环,创建数据集和微调等多个环境比较耗时。
7.5 微调模型的过程,第一步就是先准备好数据集,这一步通常在绝大多数的机器学习任务中通常是最困难的。第二步启动训练过程,训练过程需要理解可调的超参数(hyper parameters)、损失函数(loss function),第三步需要评估模型,可以采用绝对排名(专家评价后按照标准进行排序)和相对排名(不同模型生成输出的比较)的方法,最后是部署模型,并在推理时进行采样,利用后三步的数据反馈回路,不断微调训练模型。
7.6 从实践案例看,微调开始前需要建立基准,确定模型做的好的地方,明确微调要改进的方面。微调建议一开始从小规模开始,可以先开发小而高质量的数据集,数据质量比数据数量更重要。
参考文献
[1] A Survey of Techniques for Maximizing LLM Performance
[2] OpenAI分享他们在RAG技术的最佳实践
[3] Ragas: Automated Evaluation of Retrieval Augmented Generation
[4] Lost in the Middle: How Language Models Use Long Contexts
[5] 如何评估一个RAG系统(RAGas评测框架)-下篇