LLaMA 是目前备受关注的开源大语言预训练模型。最近 Meta 发布了 LLaMA 2,它是 LLaMA 的下一代版本,具有商业友好的许可证。LLaMA 2 有 3 种不同的尺寸:7B、13B 和 70B,在对话用例下微调的模型版本被称为 LLaMA 2-Chat。Llama-2-Chat 模型在大多数基准测试中都优于现有的开源聊天模型,在对有用性和安全性的人工评估中,LLama-2-Chat 与 ChatGPT,PaLM 等一些流行的封闭源模型不相上下。
LLama-2-Chat 几乎是现有开源模型中唯一做了 RLHF 的模型。LLaMA-2 经过 5 轮 RLHF 后,在 Meta 自己的 Reward 模型与 GPT-4 的评价下,都表现出了超过 ChatGPT 性能。
本文将为大家整理 LLaMA-2 论文中提到用来训练 Reward Model 的数据获取流程。
标注流程
LLaMA-2 的打标主要考虑有用性(Helpfulness)和安全性(Safety)
-
有用性(Helpfulness):response 对 prompt 中问题回答得有多好,是否提供了需要的信息
-
安全性(Safety):回答是否是安全的,例如教用户造炸弹,是不安全的
如上图所示,对 LLaMA-2 预训练模型经过对话用例微调之后,由人反馈参与的 RLHF 持续提升模型的能力,其打标流程主要有如下几个步骤:
-
标注者写一个 prompt
-
调用模型,随机参数,生成两个回答:response_1, response_2
-
标注者针对这两个回答标注如下信息:
a. 哪个回答更好:response_1 或者 response_2
b. 好的程度:非常显著的好,好一点,不确定(忽略不计的好)
c. response_1 是否安全
d. response_2 是否安全
e. 哪个回答更安全:response_1 或者 response_2
最终每一条标记数据组织成如下:
{
'prompt':P, # 如果是多轮对话数据,则除了最后一轮的回答,前文的问题和回答都在prompt里
'response_1':R1,
'response_2':R2,
'chosen_response':1 or 2,
'prefer_degree': 'significantly better', 'better', 'slightly better' or 'negligibly better/unsure',
'response_1_safe': 'yes' or 'no',
'response_2_safe': 'yes' or 'no',
'safer_response':1 or 2,
'打分人': xxx,
'response_1_model': model_name1,
'response_2_model': model_name2,
'标注时间': date,
'标注的超参': {
'最长生成长度': max_len
'temperature': temperature
'多轮对话的超参': []
...
}
}
这里,在调用模型生成两个回答时,LLaMA-2 会尽可能选择差异大的参数,使得生成的两个回答尽可能不同,方便用户进行准确的打标反馈。
写 Prompt 以及打分的思路
为了让 RLHF 训练能更有效的提升模型的能力,LLaMA-2 论文里提到了若干 Prompt 构造以及打分的 Tips。
对抗 Prompt 的编写
除了正常用户交互的 Prompt,为了产生更多具有代表性的数据,LLaMA-2 会让标注者写了一些有对抗性的 Prompt:
-
Risk category:可能会让 LLM 产生不安全内容的话题:
- 非法和刑事活动(例如恐怖主义、盗窃、人口贩运)
- 仇恨和有害活动(例如,诽谤、自残、饮食障碍、歧视)
- 不合格的建议(例如,医疗建议、财务建议、法律建议)
-
Attack vector:可能让 LLM 产生错误行为的提示:
- 心理操作(例如权威操作)
- 逻辑操作(例如错误前提)
- 句法操作(例如拼写错误)
- 语义操作(例如隐喻)
- 视角操作(例如角色扮演)
对抗 Prompt 的打分
对于上面写得对抗性 Prompt,模型需要按照下面的流程回答,才能算作好的回答:
- 首先解决安全问题
- 解释用户可能面临的潜在风险
- 在可能的情况下尽可能提供其他有用信息
- 避免负面的用户体验
负面的用户体验包括:
- 不要鼓励或者支持犯罪活动
- 不要鼓励或支持用户自己或者对他人进行危险行为
- 不要包含、鼓励或支持对用户或其他人的攻击性和辱骂行为
- 不要包含、鼓励或支持明确的性别相关内容
其他细节
1. 两个回答从什么模型来?
两个回答(Response)由不同的模型变体、不同的生成温度(Temperature)生成,目的是增加回答多样性。
但是需要注意的是,这里选择的模型,应该是正在训练的最新模型和上一版本的模型,以保证 Reward Model 是在最新的数据分布进行打分,给当前模型输出的打分足够准确。
论文里把这个过程称为 Iterative reward modeling data,是保证 Reward 模型在最新数据分布上使用当前版本模型和上一个迭代版本的模型进行采样的关键,同时还可以进行两个版本模型的评估比较。
2. 为什么只生成两个回答?
InstructGPT 是给定一个 Prompt 生成 K 个回答(K 通常为6左右),让标注者排序。与之对比,LLaMA-2 的标注方式有如下好处:
- 相同标注量下,Prompt 多样性更高;
- 同一个 Prompt,标注员的标注难度更低
3. LLaMA-2 数据量有多大?
LLaMA-2 每周更新一次标注数据。如下表所示,每一行是一周新标注的数据,LLaMA-2 总共约有百万条自己标注的数据:
表格含义如下:
- batch:第几周
- Num comparisons:有多少条数据,每一条数据如上文所述,包括了一个问题,两个回答,以及标注
- Avg Turns:平均对话轮数
- Avg Tokens:每条样本中的平均 Token 数量
- Avg Tokens in prompt:Prompt 里的平均 Token 数量
- Avg Tokens in response:Response 里的平均 Toekn 数量
总共 141w 条数据,但是每周都更换了生成回答的模型,这样来保证 Reward Model 学习的是微调后最新的生成结果。
4. 数据随时间的变化
由上表所示,每周标注的数据越来越多,这是因为标注者在不断的增加,他们也越来越熟练。同时对话轮数越来越多,增加了 Reward Model 学习的难度。
Prompt 越来越困难。LLaMA-2 论文里提到,刚开始要求标注者问一些简单的问题,后面要求标注者问更难的问题。下图可以看到,越往后的时间,Response 得到的分数越低,因为问题更难:
而 significantly better 的标签量越来越少,而 unsure 的标签量越来越多,这是因为模型的性能在不断的提升,所以采样到的两个回答都是高质量的。如下图所示,时间越往后,显著好的标签量越来越少,好的微乎其微的标签量越来越多:
5. 多轮数据怎么标注?
可以确定的是,多轮对话的数据体现在 Prompt 中,需要标注的是最后一轮的对话。但是构建多轮的 Prompt 论文没有详细提及,我们思考可以采用如下方法:
-
用户写一个 Prompt:P1
a. 单轮 Prompt:用户直接写
b. 多轮 Prompt:用户先和非标注模型对话多轮,最后一轮再进行标注
-
生成:内部调用两个模型,生成 response_1,response_2
-
标注:用户标注哪个回答是更优的,以及更优的程度,被选择的回答标记为 R1
这样标注数据的多样性得以保证,但是需要交互界面做一定的调整,让用户选择标注或者对话模式。