简述
训练方式
在一个比较强的BaseModel(GPT3.5)上继续用数据微调(SFT),但这次的微调还引入了一种学习方式叫RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)。
所以可以简单总结为:强BaseModel微调 + RLHF
训练过程
第一阶段:训练监督模型
GPT 3.5本身很难理解人类不同类型指令中蕴含的不同意图,为了让GPT 3.5初步具备理解指令的意图,首先会在数据集中随机抽取问题,由人类标注人员,给出高质量答案,然后用这些人工标注好的数据来微调 GPT-3.5模型(获得SFT模型, Supervised Fine-Tuning)。
此时的SFT模型在遵循指令/对话方面已经优于 GPT-3,但不一定符合人类偏好。
第二阶段:训练奖励模型(Reward Model)
在数据集中随机抽取问题,使用第一阶段生成的模型,对于每个问题,生成多个不同的回答。人类标注者对这些结果综合考虑给出排名顺序。接下来,使用这个排序结果数据来训练奖励模型。对多个排序结果,两两组合,形成多个训练数据对。
RM模型接受一个输入,给出评价回答质量的分数。这样,对于一对训练数据,调节参数使得高质量回答的打分比低质量的打分要高。
第三阶段:采用PPO(Proximal Policy Optimization,近端策略优化)强化学习来优化策略。
这一阶段利用第二阶段训练好的奖励模型,靠奖励打分来更新预训练模型参数。在数据集中随机抽取问题,使用PPO模型生成回答,并用上一阶段训练好的RM模型给出质量分数。
把回报分数依次传递,由此产生策略梯度,通过强化学习的方式以更新PPO模型参数。
如果我们不断重复第二和第三阶段,通过迭代,会训练出更高质量的ChatGPT模型。
应用和效果
以下内容按照是否“只需要嵌套一个prompt就能达到目标”来分类。
一步到位
只需要根据任务套prompt,就可以达到目标,但前提是需要精心设计尝试多种prompt。
翻译
prompt示例
请你帮我把#START和#END之间的文本翻译成英文#START {content} #END
相关产品
-
- OpenAI translator 划词翻译和文本润色的浏览器插件
- 沉浸式翻译 智能识别网页主内容区,双语显示,中文/英文对照着看
- ByteLingo英语助手 公司内专用,不用输key
摘要
prompt示例
相关产品
-
- Glarity 一款开源浏览器插件,主要功能是利用 ChatGPT为谷歌搜索、YouTube视频等网站内容生成摘要。
-
- Wiseone
辅助创作/笔记工具
prompt示例
相关产品
-
- Notion AI
其他
- 代码补全、生成、debug
prompt示例:
结果:
- 正则表达式生成
prompt示例:
结果:
多步到位
文档向量索引
应用场景
input有两类:一个是{doc},一个是{query}
output必须为:基于doc的{answer}
- 可以对论文、小说、网页文章、简历、合同等任何长文本内容,进行快速整理摘要重点,或者是针对某个问题提取doc中的答案(不会自己随意生成),如果想要深入研究某个答案,还可以直接索引到那块内容来细看。
相关产品
-
- ChatPdf
- ChatDoc
效果
原理
使用openai api来实现对话式文档问答,最朴素的想法把这个当成一个阅读理解问题,构建如下的prompt:
现有一个问题:“洗碗机排水管堵塞了怎么办”,请根据下面的文章来回答,文章内容如下:"......"
这种方法在文档较长时存在两个问题:
- 第一,openai api存在最大长度的限制,例如chatgpt的最大token数为4096,此时直接对文档截断,存在上下文丢失的问题
- 第二,api的调用费用和token长度成正比,tokens数太大,则每次调用的成本都会很高
参考搜索引擎中“先检索再重排”的思路,针对文档问答设计“先检索再整合“的方案。
整体思路如下:
- 首先准备好文档,把每个文档切成若干个小的chunks
- 将每个chunk转为一个向量,存入向量数据库
-
- 文本转向量可以使用openai embedding
- 也可以使用其他方案,如fasttext/simbert等
- 当用户发来一个问题的时候,将问题同样转为向量,并检索向量数据库,得到相关性最高的一个或几个chunk
- 将问题和chunk合并重写为一个新的请求发给openai api,可能的请求格式如下:
推荐一个库:llama-index (封装了先检索再整合的逻辑)
Agent
简介
简单来说:agent管理所有prompt、工具、LLM资源,三者结合实现自主开发。
展开来说:给定一个任务,AI Agent可以实现 LLM 与其他工具的组合、链路的嵌套等逻辑。利用提供的工具、LLM和带有CoT的prompt,实现自主开发、拆分子任务、决策子任务优先级、自己去寻找对应解决子任务需要的资源
例子:
相关产品
-
- LongChain Agent
- AutoGPT
- Microsoft Jarvis
- BabyAGI
效果
对LongChain Agent提问“五一假期从上海到东京哪一班航班最便宜?”
直接询问Chatgpt的结果
对AutoGPT提问“为即将到来的假期发明一道原创菜谱,并且保存到一个文件里。”
结果:https://github.com/Torantulino/Auto-GPT
原理
这边以LongChain Agent为例,其他agent的设计都类似。
agent管理所有prompt、工具、LLM资源,三者结合实现自主开发。
三要素:LLM、prompt、APIs
参考网上的一个例子来展开讲原理。
- 任务:查询本周天气,以及十年后我多少岁,今年我28
- Agent 返回结果:
- 要素一:chatgpt
- 要素二:prompt
- 要素三:API
这里定义两个工具:WeatherTool、CustomCalculatorTool
- 执行过程:
-
- 通过这个prompt,加上我们的任务以及自定义的工具,会变成下面这个样子:
大集成
简介
集合各种应用
相关产品
-
- Microsoft Copliot
- 钉钉 x 通义千问
Answer the following questions as best you can. You have access to the following tools: # 尽可能的去回答以下问题,你可以使用以下的工具:Calculator: Useful for when you need to answer questions about math.# 计算器:当你需要回答数学计算的时候可以用到 Weather: useful for When you want to know about the weather # 天气:当你想知道天气相关的问题时可以用到 Use the following format: # 请使用以下格式(回答)Question: the input question you must answer # 你必须回答输入的问题 Thought: you should always think about what to do # 你应该一直保持思考,思考要怎么解决问题 Action: the action to take, should be one of [Calculator, Weather] # 你应该采取[计算器,天气]之一 Action Input: the input to the action # 对工具需要输入什么内容 Observation: the result of the action # 工具的返回结果 ... (this Thought/Action/Action Input/Observation can repeat N times) # 思考-行动-输入-输出 的循环可以重复N次 Thought: I now know the final answer # 最后,你应该知道最终结果了 Final Answer: the final answer to the original input question # 针对于原始问题,输出最终结果Begin! # 开始 Question: Query the weather of this week,And How old will I be in ten years? This year I am 28 # 问输入的问题 Thought:
-
- 第一轮响应内容:
- 第二轮响应内容:
- 第三轮响应内容:
- 直接使用chatgpt的结果: