目前工程实践上,大家把优化的重点基本都放在了retrieve环节里,这里面涉及三个重要的问题:
目前工程实践上,大家把优化的重点基本都放在了retrieve环节里,这里面涉及三个重要的问题:
1⃣how and what do I retrieve:从传统的相似性检索、文本检索,到目前最常用的依托于embedding的语义检索,大家在实践中仍在不断迭代。Kiela后面也提到有研究希望把整个retriever过程做成一个模型,他也在课程中构想未来应该把retriever的训练也纳入到LLM的训练架构中。
文本的embedding可简化理解为文本的向量化表达,并且可根据不同文本的向量化表达,判断出文本之间语义的远近亲疏关系。
目前的文本emebedding也都是通过模型来实现的,这类模型也在不断迭代。OpenAI在今年1月份推出了text-embedding-3(small和large两版),相比其2022年12月推出的ada-002模型,在性能上获得了显著提升。
用于多语言检索的常用基准(MIRACL)平均分数已从 31.4%(ada-002)增加到 44.0%(3-small)和54.9%(3-large)。
附图之一是OpenAI对其text emebedding模型作用机制的示意。
2⃣When to retrieve: 一般就两种思路。一种是在获得检索范围后即retrieve,另一种是让模型判断何时retrieve。
3⃣How to encode: 如何编码也直接影响了如何检索的过程。
其他问题:
1⃣how to pre-process: 实际上强调就是input要包含system prompt,可设定角色、技能、任务、工作流、限制条件等。
2⃣how to prompt: 涉及提示词工程的方法论。
3⃣how to pass context: 可以把context作为prompt的一部分以文本形式输入,也可通过代码的方式代入。
4⃣how to post-process: 比如格式化输出的处理,如固定输出json格式,或固定在末尾输出reference列表等。
5⃣how to verify: 指的是如何验证output的效果或质量,比如验证output与知识库的相关性、准确性等。
最后,还有关于RAG整体架构的审视框架:
1⃣How to optimize: 各环节哪些地方可以优化。架构中已经列出的问题都是思考的重点。
2⃣How to learn: 这里的learn应该指的是机器学习的learn,探讨各环节从software 1.0的静态架构向机器学习和software 2.0的演进。
3⃣how to scale: 如何应对规模化的问题。
比如关于知识库如何chunk、何时编码,在知识库过大时就不适合提前预处理好chunk和编码。或者大量用户同时prompt该如何应对。
前段时间判断过2024年会是RAG应用爆发的一年
links:
Stanford CS25 V4 2024春季课程(面向公众开放,有人想一起学习搭子么?)
Stanford CS25 V3: Retrieval Augmented Language Models
RAG论文原文
OpenAI text-embedding-3 models
OpenAI text-embedding-ada-002 model
Software 2.0 by Andrej Karpathy
Kiela在讲这节课几个月后在其创立的Contextual AI正式推出RAG 2.0