Qwen2-Math开源,包含15B7B72B三种参数规模的数学模型
作者: YeungNLP 来源: YeungNLP
01
简介
🎉好消息,继今年6月份Qwen2系列模型开源后,Qwen团队秉持着优良的开源传统,在8月8日深夜再次开源了Qwen2-Math系列模型。这是一个专注于数学推理 能力的模型,该系列模型包括1.5B/7B/72B三种参数规模。
ModelScope:
https://modelscope.cn/organization/qwen?tab=model
HuggingFace:
https://huggingface.co/collections/Qwen/qwen2-math-66b4c9e072eda65b5ec7534d
Qwen2-Math是基于Qwen2大模型所构建的专门用于数学解题的语言模型,其数学能力显著超越了此前的开源模型,甚至超过了闭源模型(如 GPT-4o)。
Qwen2-Math在复杂的多步逻辑推理的高级数学问题上具有优秀的表现,在一系列数学基准评测中,Qwen2-Math-72B-Instruct 超越了最先进的模型,包括 GPT-4o、Claude-3.5-Sonnet、Gemini-1.5-Pro 和 Llama-3.1-405B。
注:此次开源的模型主要支持英语,后续将推出中英双语版本,敬请期待**。**
02
Qwen2-Math基座模型
Qwen2-Math的基座模型使用Qwen2系列基座模型进行初始化,然后在精心设计的数学专用语料库上进行增量预训练 ,该语料库包含大规模高质量的数学网络文本、书籍、代码、考试题目以及由Qwen2模型合成的数学预训练数据 。
在三个广泛使用的英语数学基准GSM8K、Math和MMLU-STEM上对Qwen2-Math进行了评估,并且还评估了三个中国数学基准CMATH,GaoKao Math Cloze和GaoKao Math QA。所有评估均采用Few-shot CoT的方式。
在上述6项数学评测中,Qwen2-Math均取得了非常优异的表现,尤其是Qwen2-Math-72B,显著优于Llama-3.1-70B,并且与Llama-3.1-405B的表现在伯仲之间,但显然Qwen2-Math-72B的参数要小得多,部署条件要低得多。
03
Qwen2-Math指令微调模型
在指令微调阶段,首先基于Qwen2-Math-72B训练了一个数学专用的奖励模型。此外,还有一个判别模型,可用于评判模型的回复是否正确。作者将奖励模型与判别模型进行结合,用于拒绝采样构建SFT数据,从而对Base模型进行指令微调。最后进一步使用GRPO对SFT模型进行优化。
作者对Qwen2-Math-Instruct在英语和中文的数学基准评测上进行了评测。除了常用的基准评测,如 GSM8K 和 MATH 之外,还加入了更具挑战性的考试,例如OlympiadBench、CollegeMath、高考(GaoKao)、AIME2024以及AMC2023。对于中文的数学评测集,使用了CMATH、2024年中国高考数学题以及2024年中国中考数学题。Qwen2-Math-72B-Instruct在各个评测集上均显著优于Llama-3.1-70B-Instruct。
为了防止评测集在模型训练时泄露,作者在预训练和微调数据集上都进行了去污染处理 。预训练数据移除了与测试集有显著重叠的样本,并且移除了有13-gram重复且最长公共子序列比例大于0.6的训练样本。指令微调数据移除了更多与GSM8K、MATH、Aqua、SAT Math、OlympiadBench、College Math、AIME24、AMC23等数据集有重叠的正例污染样本,也使用了与预训练数据同样的过滤方法。
04
使用方式
建议直接使用Instruct模型进行性能测试,使用方式与此前Qwen2系列模型一直,测试脚本如下:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2-Math-72B-Instruct"
device = "cuda" # the device to load the model onto
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "Find the value of $x$ that satisfies the equation $4x+5 = 6x+7$."
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
期待Qwen后续更多的开源工作~
在**「知****乎」** 也能找到我们了,搜索**「红雨瓢泼」** 即可。
给公众号添加【星标⭐️ 】不迷路
您的点赞、在看、关注 是我坚持的最大动力!
更多AI工具,参考Github-AiBard123,国内AiBard123