更新消息
- [2024/04/29] 我们发布了Eurux-8x22B-NCA和Eurux-8x22B-KTO,它们是在Mixtral-8x22B基础上,使用UltraInteract中的所有多轮轨迹对和UltraFeedback中的所有对进行SFT和NCA(KTO)微调而成。这些模型在推理性能方面表现出色,同时具备优秀的聊天和指令跟随能力。
- [2024/04/02] 我们发布了UltraInteract数据集,以及基于UltraInteract的Eurus系列大语言模型和奖励模型Eurus-RM-7B。在涵盖五个任务的12项测试中,Eurus-70B的推理能力超越了GPT-3.5 Turbo。
链接
简介
Eurus
我们发布了一系列大语言模型和一个奖励模型。在涵盖五个任务的12项测试中,Eurus-70B的推理能力超越了GPT-3.5 Turbo,并在LeetCode和TheoremQA这两个具有挑战性的基准测试中分别达到了33.3%的pass@1准确率和32.6%的准确率,大幅超越现有开源模型13.3%以上。此外,Eurux-8x22B的性能进一步提升,在推理方面表现出色,同时具备优秀的聊天和指令跟随能力。我们还训练了一个奖励模型,在推理任务的偏好建模方面表现特别强劲。
- Eurux-8x22B-NCA和Eurux-8x22B-KTO:基于Mixtral-8x22B,使用UltraInteract中的所有多轮轨迹对和UltraFeedback中的所有对进行SFT和NCA(KTO)微调。
- Eurus-7B-SFT和Eurus-70B-SFT:分别基于Mistral-7B和CodeLLaMA-70B,使用UltraInteract中的所有正确行为进行微调,同时混合了少量UltraChat、ShareGPT和OpenOrca示例。
- Eurus-7B-KTO和Eurus-70B-NCA:在SFT模型的基础上,使用UltraInteract和UltraFeedback进行偏好微调。
- Eurus-RM-7B:使用UltraInteract、UltraFeedback和UltraSafety的混合数据集进行训练。
UltraInteract
Eurus的强大性能主要归功于UltraInteract,这是一个专为复杂推理任务设计的大规模、高质量对齐数据集。对于每个指令,它包含一个偏好树,由以下内容组成:
- (1) 具有多样化规划策略的推理链,采用统一格式
- (2) 与环境和评论者的多轮交互轨迹
- (3) 用于促进偏好学习的成对数据
结构
UltraInteract为每个指令收集一个偏好树,指令作为根节点,每个行为作为一个节点。轨迹是由一系列行为组成的从根到叶的路径。 在每个偏好树中,所有正确行为的节点和以正确行为结束的所有轨迹可用于SFT。成对的正确和错误节点或轨迹可用于偏好学习。
示例说明
以下是UltraInteract轨迹的两轮示例。在每一轮中,演员模型生成逐步推理链,环境和评论模型分别提供观察和文本评论。
统计数据
以下是UltraInteract的一些统计数据。它包含86,000个指令、286,000个正确答案和219,000对数据。
评估
Eurux-8x22b-NCA和Eurux-8x22b-KTO
我们进行了全面的编码、数学、推理、知识、指令遵循和聊天基准测试。结果如下所示,开源模型中的最佳得分以粗体显示。Eurux-8x22b-NCA和Eurux-8x22b-KTO在推理性能方面表现出色,同时具备优秀的聊天和指令跟随能力。
模型/基准测试 | 编码 | 数学 | 推理 | 知识 | 指令遵循 | 聊天 | ||||
---|---|---|---|---|---|---|---|---|---|---|
HumanEval | MBPP | LeetCode | GSMPLUS | MATH | TheoremQA | BBH (CoT) | MMLU | IFEval | MT-Bench | |
GPT-3.5-Turbo | 76.8 | 82.5 | 23.3 | 61.2 | 37.8 | 35.6 | 70.1 | 70.0 | 56.6 | 7.94 |
GPT-4 | 85.4 | 83.5 | 41.8 | 85.6 | 69.7 | 52.4 | 86.7 | 86.4 | 79.7 | 8.96 |
Mixtral-8x7B-Ins | 50.6 | 50.1 | 5.6 | 49.6 | 25.9 | 20.4 | 73.5 | 70.3 | 48.8 | 8.30 |
DS-LM-67B-Chat | 70.7 | 65.7 | 20.0 | 65.0 | 41.0 | 17.9 | 78.9 | 72.3 | 52.7 | 8.35 |
QWen-1.5-72B | 71.3 | 56.9 | 15.6 | 65.4 | 43.4 | 18.5 | 78.0 | 72.9 | 53.4 | 8.61 |
Llama-3-70B-Ins | 77.4 | 66.2 | 34.4 | 72.9 | 46.8 | 26.6 | 91.7 | 79.8 | 83.2 | 9.02 |
Eurus-70b-NCA | 79.3 | 71.9 | 33.3 | 62.8 | 41.7 | 32.6 | 80.0 | 59.4 | 49.2 | 7.54 |
Eurux-8x22b-KTO | 71.3 | 68.9 | 29.4 | 68.3 | 48.4 | 35.3 | 83.6 | 75.9 | 67.1 | 8.58 |
Eurux-8x22b-NCA | 75.0 | 69.7 | 35.0 | 68.1 | 49.0 | 35.5 | 83.5 | 75.6 | 67.1 | 8.46 |
Eurus-7B和Eurus-70B
- Eurus的7B和70B版本在相似规模的开源模型中均达到了最佳的整体性能。在许多情况下,Eurus甚至超越了相应领域的专业模型。值得注意的是,Eurus-7B的表现优于大5倍的基准模型,而Eurus-70B的性能超过了GPT-3.5 Turbo。
- 使用UltraInteract进行偏好学习可以进一步提升性能,尤其是在数学和多轮能力方面。
Eurus-RM-7B
- Eurus-RM-7B作为最佳的7B级RM模型,其表现与更大规模的基准模型相当或更优。特别是在某些任务中,它甚至超越了GPT-4的表现。
- 我们的训练目标有助于提高RM在复杂问题和推理方面的表现。
- ULTRAINTERACT与其他数据集(如UltraFeedback和UltraSafety)兼容,混合这些数据集可以平衡不同的RM能力。
- 通过重新排序,Eurus-RM-7B大幅提升了LLMs的推理性能。
数据集格式
SFT
编程
{
"id": "92a7356beaa75391539cb79624bdf85b7e5d36d5e74e46a2f1c4001f40b3e055_1_1", // 唯一数据ID,包含三部分:唯一字符串、偏好树深度和当前轮次,用"_"分隔
"parent_id": "535550938ff58bd73cd7fb85be834bb90b7600daf6b6f6a16b64091e5ecbfe43", // 具有相同parent_id的数据有相同的指令但不同的行动
"task": "Coding", // 任务类型,选项 = ["Coding", "Math_Cot", "Math_PoT", "Logic"]
"dataset": "codecontest", // 指令来源的数据集
"instruction": "编写Python代码解决以下任务。\nMike有一个只由小写英文字母组成的字符串s。他想改变字符串中的恰好一个字符,使得结果成为回文。\n\n回文是一个正着读和倒着读都一样的字符串,例如"z"、"aaa"、"aba"、"abccba"是回文,而"codeforces"、"reality"、"ab"不是回文。\n\n输入\n\n第一行也是唯一一行包含字符串s(1 ≤ |s| ≤ 15)。\n\n输出\n\n如果Mike可以通过改变恰好一个字符使结果字符串成为回文,则输出"YES"(不带引号),否则输出"NO"(不带引号)。\n\n示例\n\n输入\n\nabccaa\n\n\n输出\n\nYES\n\n\n输入\n\nabbcca\n\n\n输出\n\nNO\n\n\n输入\n\nabcda\n\n\n输出\n\nYES", // 任务描述
"response": "
步骤1:这个问题要求我们判断是否可以通过改变字符串中的恰好一个字符使其成为回文。
步骤2:我们可以从字符串的开头和结尾开始遍历,计算对应字符不同的数量。
步骤3:如果字符串长度为奇数且只有一个字符不同,或者长度为偶数且恰好有一个字符不同,那么就可以通过改变一个字符使其成为回文。
步骤4:我们需要考虑边界情况,如单个字符的字符串或空字符串。
```python
# 步骤5:接收输入字符串
s = input()
# 步骤6:计算字符串长度
n = len(s)
# 步骤7:初始化计数器,用于记录不同字符的数量
cnt = 0
# 步骤8:遍历字符串的前半部分,统计与后半部分对应位置不同的字符数量
for i in range(n//2):
if s[i] != s[n-i-1]:
cnt += 1
# 步骤9:如果字符串长度为奇数且没有不同字符,或者有恰好一个不同字符,输出"YES"(不带引号)
if (n % 2 == 1 and cnt == 0) or (cnt == 1):
print('YES')
# 步骤10:否则,输出"NO"(不带引号)
else:
print('NO')
```" // 逐步解决方案
}
数学
{
"id": "647b2e8706cf459a8e3ec8e99727d2d51ff3414bf187db43d92cff87f8012713_1_1",
"parent_id": "499d250c5852eddcd48a28b6c173f1a2349a16555990a1cd6fb5c7954cb94587",
"task": "Math_PoT",
"dataset": "mathqa",
"instruction": "可用工具:\n[1] Python解释器\n当你发送包含Python代码的消息给python时,它将在一个有状态的Jupyter笔记本环境中执行。\n逐步解决以下数学问题。\n一个长方形的长度翻倍,同时宽度也翻倍。面积的百分比变化是多少?",
"response": "
步骤1:长方形的面积由其长度和宽度的乘积给出。如果长度翻倍,面积从l*w变为2l*w。同样,如果宽度翻倍,面积从l*w变为l*2w。
步骤2:如果长度和宽度都翻倍,面积从l*w变为2l*2w。面积的百分比变化由((新面积 - 旧面积) / 旧面积)*100给出。
步骤3:我们可以使用上述公式计算面积的百分比变化。
步骤4:通过创建一个工具来计算面积的百分比变化,我们可以轻松解决这个问题。
```python
# 步骤5:定义一个工具来计算面积的百分比变化
def calculate_percentage_change(length, width):
# 步骤6:计算旧面积和新面积
old_area = length * width
new_area = 2 * length * 2 * width
# 步骤7:计算百分比变化
percentage_change = ((new_area - old_area) / old_area) * 100
return percentage_change
# 步骤8:调用函数解决问题
percentage_change = calculate_percentage_change(2, 2)
print(percentage_change)
```"
}
逻辑
{
"id": "92a19848da4fb0fc0b414f061f7500a81ea4cbd8f922ca1e32a6a15ef6f7e1a0_1_1",
"parent_id": "107cc9147d8c09e62e2ba9e74cb41d9dbafd9a3adf62b67ba3da2b31c81b3300",
"task": "Logic",
"dataset": "hotpotqa",
"instruction": "
可用工具:\n[1] wikipedia_search(query: str) -> str\nWikipedia搜索工具提供对大量涵盖广泛主题的文章的访问。\n可以查询特定关键词或主题以检索准确和全面的信息。
逐步解决以下问题:3OH!3和Regina Spektor中,哪个音乐人或团体来自美国?
步骤1:为确定哪个音乐人或团体来自美国,我们可以搜索有关他们各自的信息。
```python
# 步骤2:搜索有关3OH!3的信息。
print(wikipedia_search('3OH!3'))
```
页面:3OH!3
摘要:3OH!3(发音为"three oh three")是一个来自美国科罗拉多州博尔德的电子音乐二人组,由Sean Foreman和Nathaniel Motte组成。他们以专辑《Want》中的单曲"DONTTRUSTME"而闻名,该单曲在Billboard Hot 100排行榜上达到第7位。他们的第二首单曲,来自《Want》专辑的"Starstrukk"(Katy Perry合作版)在英国、爱尔兰、芬兰、波兰和澳大利亚都进入了前十。他们通过与Kesha合作的歌曲"My First Kiss"获得了进一步的认可,该歌曲成为他们专辑《Streets of Gold》的主打单曲。该专辑后来在Billboard 200排行榜上达到第7位。\n\n\n\n页面:3OH!3(专辑)\n摘要:《3OH!3》是美国电子音乐乐队3OH!3的首张录音室专辑。歌曲"Holler Til You Pass Out"和"Chokechain"后来被重新混音用于该乐队的主流唱片公司首发。"Holler Til You Pass Out"、"Chokechain"和"Dance with Me"在iTunes版本的专辑中被排除在外。",
"response": "
步骤1:提供的信息确认3OH!3是一个来自美国科罗拉多州博尔德的电子音乐二人组。
步骤2:我们不再需要搜索Regina Spektor的信息,因为我们的任务只是确定这两个选项中哪一个来自美国,而我们已经确认了3OH!3的出身。
步骤3:我们可以自信地得出结论,3OH!3是来自美国的音乐人/团体。
答案:3OH!3"
}
偏好学习
{
"id": "d1f094e0e13096bc1bb6260e1e0d807e2c4ebfbbf4a4373f04cbed001c385c3c_5_3", // 唯一数据ID,包含三个部分:唯一字符串、偏好树深度和当前轮次,用"_"分隔
"parent_id": "d1f094e0e13096bc1bb6260e1e0d807e2c4ebfbbf4a4373f04cbed001c385c3c", // 具有相同parent_id的数据有相同的指令但不同的行动
"task": "Math_PoT", // 任务类型,选项 = ["Coding", "Math_Cot", "Math_PoT", "Logic"]
"dataset": "MATH", // 指令来源的数据集
"trajectory": [
{
"from": "user",
"value": "可用工具:\n[1] Python解释器\n当你向python发送包含Python代码的消息时,它将在有状态的Jupyter笔记本环境中执行。\n请逐步解决以下数学问题。\n尽可能简化你的答案。\n简化 $(-3-2i)-(1+4i)$。" // 任务指令
},
{
"from": "assistant",
"value": "步骤1:要简化表达式 $(-3-2i)-(1+4i)$,我们需要将负号分配给括号内的两项。\n步骤2:然后我们可以通过分别加总实部和虚部来合并同类项。\n```python\n# 步骤3:将负号分配给括号内的两项。\n(-3) - (-1) + (-2i) - (-4i)\n# 步骤4:通过分别加总实部和虚部来合并同类项。\n-3 + 1 + (-2i + 4i)\n```" // 助手的行动(第1轮)
},
{
"from": "user",
"value": "输出:单元格 In[1],第2行\n (-3) - (-1) + (-2i) - (-4i)\n ^\nSyntaxError: 语法无效\n你的答案是错误的。\n你简化给定复数的思路是正确的。然而,你在代码中犯了一个语法错误。在Python中,乘法运算必须用星号(*)明确写出,即使是复数也是如此。记住,Python中的虚数单位用j表示,而不是i。尝试修正语法并重新计算。" // 来自Python解释器的观察和反馈(第1轮)
},
{
"from": "assistant",
"value": "步骤1:要简化表达式 $(-3-2i)-(1+4i)$,我们需要将负号分配给括号内的两项。\n步骤2:然后我们可以通过分别加总实部和虚部来合并同类项。\n```python\n# 步骤3:将负号分配给括号内的两项。\n(-3) - (-1) + (-2j) - (-4j)\n# 步骤4:通过分别加总实部和虚部来合并同类项。\n-3 + 1 + (-2j + 4j)\n```" // 助手根据观察和反馈作出的行动(第2轮)
},
{
"from": "user",
"value": "输出:(-2+2j)\n你的答案是错误的。\n你简化给定复数的思路基本正确。然而,你在加法运算中犯了一个错误,实部相加(-3 + 1 ≠ -2)和虚部相加(-2j + 4j ≠ 2j)都有误。你应该正确合并同类项,得到正确答案-4和-6j。请重新尝试,进行正确的算术计算。" // 来自Python解释器的观察和反馈(第2轮)
}
] // trajectory是用户和助手之间的交互,第一个元素是任务指令
"chosen": "步骤1:将表达式分解为实部和虚部。\n步骤2:实部相减。\n步骤3:虚部相减。\n步骤4:将减法结果合并得到表达式的简化形式。\n\n\n\n```python\n# 步骤5:将表达式分解为实部和虚部,然后相减。\nreal_part = -3 - 1 # 实部相减\nimaginary_part = -2 - 4 # 虚部相减\n# 步骤6:将实部和虚部合并得到结果。\nresult = f\"{real_part}{imaginary_part:+d}i\"\nprint(result)\n```", // 基于trajectory选择的答案
"rejected": "步骤1:要简化表达式 $(-3-2i)-(1+4i)$,我们需要将负号分配给括号内的两项。\n步骤2:然后我们可以通过分别加总实部和虚部来合并同类项。\n```python\n# 步骤3:将负号分配给括号内的两项。\n(-3) - 1 - (-2j) - 4j\n# 步骤4:通过分别加总实部和虚部来合并同类项。\n-3 - 1 - 2j - 4j\n```", // 基于trajectory拒绝的答案
}
引用
@misc{yuan2024advancing,
title={Advancing LLM Reasoning Generalists with Preference Trees},
author={Lifan Yuan and Ganqu Cui and Hanbin Wang and Ning Ding and Xingyao Wang and Jia Deng and Boji Shan and Huimin Chen and Ruobing Xie and Yankai Lin and Zhenghao Liu and Bowen Zhou and Hao Peng and Zhiyuan Liu and Maosong Sun},
year={2024},
eprint={2404.02078},
archivePrefix={arXiv},
primaryClass={cs.AI}
}