NLP(一百一十二)微调LLM,解锁推理能力——GRPO算法如何提升人物关系分类
本文将介绍如何使用最新流行的GRPO强化学习算法,对LLM进行微调,以提升其在人物关系分类任务上的推理能力。
简介
在两年前的文章NLP(六十三)使用Baichuan-7b模型微调人物关系分类任务中,笔者介绍了如何使用Baichuan-7B模型微调(SFT)人物关系分类任务,并比BERT时代取得了进步。
如今已步入DeepSeek R1时代,GRPO等强化学习算法正引领新一轮技术潮流。特别是DeepSeek R1 Zero模型的横空出世,证明了纯强化学习(RL)训练同样能赋予模型强大的推理能力,颠覆了OpenAI传统的大模型训练三阶段范式(SFT -> RM -> RLHF)。这一创新正是DeepSeek的独特之处,使其在近几个月的LLM竞赛中占据领先地位,引领行业发展方向。
本文将会最新流行的GRPO强化学习算法,对LLM进行微调,以提升其在人物关系分类任务上的推理能力。
数据集
人物关系分类指的是对文本中的两个人物,在特定的关系列表中,判断他们之间的人物关系。以样本亲戚1837年6月20日,威廉四世辞世,他的侄女维多利亚即位。
为例,其中亲戚
为人物关系,威廉四世
为实体1,维多利亚
为实体2。
笔者自己利用业余时间标注的样本数据有3881条,分布如下图:

对上述数据集进行划分,训练集与测试集的比例为8:2,其中训练集3105条,测试集776条。
笔者已将上述数据集上传至Hugging Face,网址为:https://huggingface.co/datasets/jclian91/people_relation_classification .
奖励函数
奖励函数
(Reward
function)是GRPO训练过程中很关键的因素,一个好的奖励能使得模型往既定的能力上演进,增强模型能力,而一个坏的奖励可能使得该模型的表现更为糟糕。因此,奖励函数需要根据任务来精心设计。
笔者在此次训练过程中,训练了两个奖励函数,分别为format_reward_func
和label_reward_func
函数。
对于format_reward_func
函数,其要求是模型的回复要符合
1 |
|
以下是上述奖励函数的单元测试:
1 |
|
对于label_reward_func
函数,其要求是答案中的人物关系与真实标签一致。如果两者一致,则得分为1,否则为0。该函数实现代码如下:
1 |
|
模型训练
Hugging Face开源的trl模块已支持GRPOTrainer,因此使用该模块来进行强化微调(Reinforce Fine Tuning)。所需Python第三方模块如下:
1 |
|
我们以Qwen2.5-7B-Instruct
为基座模型进行微调,其对话模板生成的prompt如下:
"prompt": "<|im_start|>system,判断这两个人物之间的关系,人物关系只能是['不知道', '夫妻', '父母', '兄弟姐妹', '上下级', '师生', '好友', '同学', '合作', '同一个人', '情侣', '祖孙', '同门', '亲戚']的一个。整体格式为
... ... ,推理过程用... 标记,最终的答案用... 标记,最终答案是人物关系的标签。<|im_end|><|im_start|>user:王玉宝的孙子王方轶大学毕业后,也成了通化广播电视台的记者,而孙女王梓怡在填报高考志愿时,毫不犹豫地报考了辽宁一所传媒院校的新闻专业。:王玉宝:王梓怡<|im_end|><|im_start|>assistant让我一步一步来思考解决。"
注意,
我们使用deepspeed
在在4张A800-SXM4-80GB显卡进行训练,命令如下:
1 |
|
其中run_relation_grpo.py
脚本为主要的训练脚本,训练逻辑在此完成,代码如下:
1 |
|
训练参数配置如下(grpo-qwen-2.5-7b-deepseek-r1-relation.yaml):
1 |
|
deepspeed配置文件如下(deepspeed_zero3.yaml):
1 |
|
笔者在4张A800-SXM4-80GB显卡上,训练时间为4.5小时。训练结果在tensorboard上查看如下:




可以看到,随着训练步数的增加,模型的平均回复长度从一开始的90多稳定在60多,而format_reward_func渐渐稳定在1左右,而label_reward_func稳定在0.85-0.90之间。由此可见,模型对于格式是严格遵守的,而标签的真实性还有待增强。
模型评估
我们使用vllm
框架来部署上述训练后的模型,命令如下:
1 |
|
对人物关系数据集(776条样本)进行评估,代码如下:
1 |
|
评估结果如下:
1 |
|
人物关系任务是笔者自创的人物,已有四五年,这期间数据集固定不动,而模型训练算法早已一日千里,在此汇总如下:
模型方法 | 基座模型 | F1值 | 说明 |
---|---|---|---|
BERT向量提取+BiGRU+Attention | BiGRU+Attention | 78.97% | BERT模型作为特征提取处理 |
BERT cls finetuning | BERT | 82.69% | 当作文本分类任务处理 |
R-BERT | chinese-roberta-wwm-ext | 85.35% | BERT时代的关系分类模型代表 |
R-BERT | chinese-roberta-wwm-ext-large | 87.22% | BERT时代的关系分类模型代表 |
QLora | Baichuan-7B | 88.25% | max_seq_length=256,epoch=5, … |
QLora | Baichuan-7B | 89.15% | max_seq_length=256,epoch=10, … |
GRPO with LLM | Qwen2.5-7B-Instruct | 88.84% | 基于LLM的纯强化方案, steps=500 |
需要对上述结果做些说明,GRPO在测试集上的F1值达到了88.84%,虽然比Baichuan-7B差一点,但并不能说明基于GRPO的强化微调比SFT效果差,两者的方案并不相同,在文本长度,是否具有推理能力上是不一样的。基于GRPO的强化微调的模型有推理能力,在给出关系分类的结果时,会给出推理过程(即分类理由),而SFT后的模型只输出了关系分类结果,没有中间的推理过程。
为了说明上述观点,笔者挑选了2个预测结果正确的例子作为说明。
- 正确例子1
文本:周海婴:鲁迅与许广平之子(1929—2011),无线电专家。 人物1:周海婴 人物2:许广平 真实标签:父母 预测:
根据文本内容,“周海婴:鲁迅与许广平之子”,可以确定周海婴是许广平的儿子,因此他们之间是父母关系。 父母
- 正确例子2
文本:就在十年前,金池和曹格都还只是涂惠源老师门下的弟子,与他们一同在音乐路上追梦的同门还有谭维维、曾一鸣和今年在“中国好声音”亮相的魏雪漫。 人物1:曹格 人物2:谭维维 真实标签:同门 预测:
根据文本内容,金池、曹格 、谭维维、曾一鸣和魏雪漫都是涂惠源老师门下的弟子,他们是在音乐路上一起追梦的同门。因此,曹格和谭维维之间是同门关系。 同门
但也存在着预测错误的例子,列举如下:
- 错误例子1
文本:梁启超的弟子中有胡适,徐志摩和王庚。 人物1:徐志摩 人物2:王庚 真实标签:同门 预测:
根据文本内容,梁启超的弟子包括徐志摩和王庚。这表明徐志摩和王庚都是梁启超的弟子,但文本中没有提到他们之间的任何关系。因此 ,我们只能确定他们有共同的老师,但没有足够的信息来确定他们之间的具体关系。 不知道
- 错误例子2
文本:徐佛苏简介:在日本与当时留学生的同盟会,日知会等交往.曾担任或黄兴先生的秘书; 人物1:徐佛苏 人物2:黄兴 真实标签:合作 预测:
根据文本内容,徐佛苏曾担任黄兴先生的秘书。在历史上,秘书通常是为上司或重要人物服 务的职位,这表明徐佛苏和黄兴之间存在上下级关系或至少是较为正式的工作关系。 上下级
从第2个例子看,真实标签反而存在错误,导致模型预测出错。因此,实际上,该训练后模型的推理能力(或评估指标)应比评估结果更强。
模型预测
在新的数据上进行测试,验证模型的泛化能力:





从上述的例子中,我们可以得到一点启发:那就是模型在给出正确的人物关系标签时,也给出了推理过程(think阶段),而这个推理过程我们是可以拿来作为解释的,这是不是另外一种模型的可解释性呢?
以往,我们对于大模型(或者神经网络)的可解释性存在困惑,觉得它的可解释性不行,但有了模型的推理过程后,这一点应该不难做到,虽然这并不是严格意义上的模型的可解释性。
总结
笔者已将上述代码及结果在Notion上发布,网址为:https://local-dugout-3c9.notion.site/People-Relation-Classification-with-GRPO-training-1ac8b5de853080aaa7a6c2ab85f09dde
文末列出了不少参考文献,大多数都是DeepSeek R1模型的复现和实践,也是最近一段时间里在R1复现任务中比较有代表性的工作,值得细细品味。
参考文献
- NLP(六十三)使用Baichuan-7b模型微调人物关系分类任务: https://zhuanlan.zhihu.com/p/655360024
- Mini-R1: Reproduce Deepseek R1 „aha moment“ a RL tutorial: https://www.philschmid.de/mini-deepseek-r1
- Open-R1: a fully open reproduction of DeepSeek-R1: https://huggingface.co/blog/open-r1
- TinyZero: https://github.com/Jiayi-Pan/TinyZero
- Logic-RL: https://github.com/Unakar/Logic-RL
- DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning
- https://arxiv.org/abs/2501.12948
- Train your own R1 reasoning model with Unsloth (GRPO): https://unsloth.ai/blog/r1-reasoning
- Training with GRPOTrainer
- https://www.stephendiehl.com/posts/grpotrainer/
- GRPO Training Script for Qwen Model on GSM8K Dataset
- https://github.com/kossisoroyce/train_grpo.py
- LLaMA Factory:微调DeepSeek-R1-Distill-Qwen-7B模型实现新闻标题分类器: https://gallery.pai-ml.com/#/preview/deepLearning/nlp/llama_factory_deepseek_r1_distill_7b
欢迎关注我的公众号NLP奇幻之旅,原创技术文章第一时间推送。

欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。
