1. 复现DeepSeek R1信息抽取模型的探索之旅

最近我在尝试复现DeepSeek R1模型的信息抽取能力,特别是零样本文本到图结构(text-to-graph)的抽取任务。这个任务的核心是:给定一组预定义的实体类型和关系类型,从目标文本中抽取出所有符合要求的实体及其关系。举个例子,对于下面这段文本:

"微软CEO萨提亚·纳德拉宣布Azure AI新功能"

理想情况下,模型应该输出这样的结构化结果:

{
  "entities": [
    {"id": 0, "text": "微软", "type": "公司"},
    {"id": 1, "text": "萨提亚·纳德拉", "type": "人物"},
    {"id": 2, "text": "Azure AI", "type": "产品"}
  ],
  "relations": [
    {"head": "萨提亚·纳德拉", "tail": "微软", "type": "CEO"},
    {"head": "微软", "tail": "Azure AI", "type": "开发"}
  ]
}

这个任务对小型生成式语言模型来说相当具有挑战性。当不限制输出格式时,语言模型可以相对较好地自由抽取实体和关系。但一旦要求模型按照预定义的实体和关系类型进行结构化输出,即使是微调过的模型也会表现得很挣扎。

2. 为什么文本到图抽取如此困难?

2.1 监督学习的局限性

在我的实验中,通过监督学习的方式训练小型语言模型进行条件式文本到图转换效果不佳。主要原因包括:

  1. 输出空间爆炸 :结构化输出(如JSON)的排列组合可能性太多,模型难以准确学习所有可能的输出模式
  2. 错误传播 :一旦模型在序列生成的早期犯错,后续输出会完全偏离正确路径
  3. 泛化能力弱 :面对训练数据中未出现过的实体或关系组合时,模型表现显著下降

2.2 强化学习的潜力

与传统监督学习不同,强化学习不直接告诉模型应该生成什么token,而是通过奖励机制引导模型学习最优策略。在文本到图抽取任务中:

  • 里程碑 :正确抽取符合输入类型要求的图结构
  • 动作 :模型生成的每个token
  • 奖励 :基于输出质量的评分

这种范式有几个独特优势:

  1. 探索性学习 :模型可以尝试多种解决方案并从中学习
  2. 多目标优化 :可以同时优化格式正确性、信息完整性和抽取准确性
  3. 知识利用 :模型能够自主发现数据中隐含的模式和策略

3. DeepSeek的GRPO方法解析

DeepSeek团队提出了Group Relative Policy Optimization(GRPO)方法,其损失函数设计有几个关键特点:

  1. 候选解生成 :模型生成多个解决方案,基于获得的奖励来调整生成概率
  2. KL散度约束 :防止模型偏离初始预训练模型太远,保持语言理解能力
  3. 硬负例学习 :模型会看到它自己生成的高概率但低质量的输出,从中学习避免错误

这种方法带来了几个有趣的性质:

  • 正负例对比学习 :模型同时接触正例和负例,形成更清晰的决策边界
  • 认知发现 :模型可能自主发现人类标注者无法明确描述的问题解决策略
  • 目标权重调节 :可以针对模型弱点(如关系抽取)分配更高奖励权重

4. 三阶段训练流程详解

4.1 合成数据生成

由于高质量的标注数据稀缺,我们采用以下流程构建训练集:

  1. 数据收集 :从目标领域收集多样化文本
  2. 文本到图转换 :使用Llama 70B生成初始图结构
  3. 数据筛选与增强
    • 过滤低质量抽取结果
    • 通过实体替换、关系重组等方式增加多样性
  4. 思维链生成 :让大模型解释其抽取过程,生成附带推理步骤的数据

实践发现:小模型难以自主发现有效的推理策略,因此显式提供思维链数据至关重要

4.2 监督微调

虽然最终依赖强化学习,但初始的监督微调必不可少:

  1. 格式学习 :用1k左右样本教会模型输出正确JSON结构
  2. 基础能力建立 :确保模型能识别基本实体和关系
  3. 预热训练 :为后续RL训练提供较好的初始策略

关键配置:

  • 学习率:2e-5
  • 批量大小:16
  • 训练步数:500-1000

4.3 强化学习训练

采用GRPO进行强化学习训练,设计了三种奖励函数:

  1. 格式奖励(R_format)

    • 检查输出是否为合法JSON
    • 验证是否包含必需的字段(entities, relations)
    • 权重:0.2
  2. JSON结构奖励(R_json)

    • 确保实体和关系的表示符合预定模式
    • 验证ID引用正确性
    • 权重:0.3
  3. F1奖励(R_f1)

    • 比较预测与真实标注的实体/关系
    • 计算精确率、召回率和F1值
    • 权重:0.5

训练曲线显示:

  • JSON奖励快速饱和(因有监督基础)
  • F1奖励持续提升,表明抽取能力不断增强
  • 格式奖励保持稳定

5. 实战:使用训练好的模型进行信息抽取

我们基于Qwen2.5-0.5B训练了一个文本到图抽取模型,以下是使用示例:

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "Ihor/Text2Graph-R1-Qwen2.5-0.5b"
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

text = """苹果公司于1976年由史蒂夫·乔布斯、史蒂夫·沃兹尼亚克和罗纳德·韦恩创立,总部位于加利福尼亚州库比蒂诺。"""

prompt = "分析文本,识别实体并抽取关系:{}"

messages = [
    {
        "role": "system",
        "content": "你是一个经过训练的信息抽取助手,能够从文本中识别命名实体及其关系..."
    },
    {
        "role": "user",
        "content": prompt.format(text)
    }
]

text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=512
)

response = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
print(response)

预期输出示例:

{
  "entities": [
    {"id": 0, "text": "苹果公司", "type": "公司"},
    {"id": 1, "text": "史蒂夫·乔布斯", "type": "人物"},
    {"id": 2, "text": "史蒂夫·沃兹尼亚克", "type": "人物"},
    {"id": 3, "text": "罗纳德·韦恩", "type": "人物"},
    {"id": 4, "text": "加利福尼亚州库比蒂诺", "type": "地点"}
  ],
  "relations": [
    {"head": "史蒂夫·乔布斯", "tail": "苹果公司", "type": "创始人"},
    {"head": "史蒂夫·沃兹尼亚克", "tail": "苹果公司", "type": "创始人"},
    {"head": "罗纳德·韦恩", "tail": "苹果公司", "type": "创始人"},
    {"head": "苹果公司", "tail": "加利福尼亚州库比蒂诺", "type": "总部所在地"}
  ]
}

6. 关键挑战与解决方案

6.1 局部最优问题

小模型容易陷入局部最优,表现为:

  • 只生成少量实体
  • 忽略复杂关系
  • 重复相似结构

解决方案:

  • 增加F1奖励权重
  • 在奖励函数中加入多样性惩罚项
  • 使用温度采样增加探索性

6.2 关系抽取难点

关系抽取比实体识别更难,因为:

  1. 常涉及长距离依赖
  2. 需要理解隐含语义
  3. 相同实体对可能有多种关系

改进措施:

  • 在奖励函数中单独设置关系F1子项
  • 预训练时加入更多关系分类任务
  • 在思维链中明确要求关系推理步骤

6.3 计算效率优化

GRPO需要生成多个候选,计算开销大,我们采用:

  1. 响应缓存 :重复利用已生成结果
  2. 早期截断 :对低质量候选提前终止
  3. 分布式评估 :并行计算多个样本的奖励

7. 未来改进方向

基于当前实验结果,我认为有几个有前景的改进方向:

  1. 课程学习 :从简单样本开始,逐步增加难度
  2. 多任务联合训练 :结合实体识别、关系分类等任务
  3. 检索增强 :引入外部知识库验证抽取结果
  4. 更大规模实验 :尝试70B级别基础模型

在实际业务场景中,这种结构化信息抽取技术可以应用于:

  • 知识图谱构建
  • 智能搜索增强
  • 商业情报分析
  • 内容自动摘要

训练过程中一个有趣的发现是:当模型开始自主发现"实体-关系-实体"的三角验证策略时,抽取准确率会有显著提升。这种 emergent property 正是强化学习最有价值的优势之一。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐