GMNER多模态实体识别任务——ReAct结合


一、任务背景:GMNER 的要求?

CCKS2025 多模态实体识别任务(GMNER),目标是:

图+文对中,识别出命名实体、实体类型,并指出这些实体在图像中的位置。

例如,给了我们如下的输入:

  • 文本:"Soldiers test the PUMA vehicle."

  • 图像:001.png(步战车)

我们要输出结构化结果如下:

bash 复制代码
{
  "001": [
    {
      "name": "PUMA",
      "label": "vehicle",
      "bndbox": {
        "xmin": 150,
        "xmax": 250,
        "ymin": 150,
        "ymax": 250
      }
    }
  ]
}

二、ReAct机制是什么?适合什么场景?

**ReAct(Reason + Act)**是一种语言模型提示设计方式,融合:

  • Reasoning(推理):语言模型内在地分析任务,理解目标,拆解步骤;

  • Acting(执行) :模型主动执行具体动作,比如查图、查库、定位目标、调用API等。

两者交替进行,形成一套"思考---行动---反馈---再思考"的闭环。

示例过程如下:

复制代码
Thought: "PUMA" appears to be a military vehicle.
Act: Search a knowledge base to verify.
Observation: "PUMA is an infantry fighting vehicle developed in Germany."
Thought: Confirmed, so entity type is 'vehicle'.
Act: Locate 'PUMA' in the image using a vision model.
Observation: Found a bounding box at [150, 250, 150, 250].
Answer: Output the entity with type 'vehicle' and its bounding box.

认为:"PUMA马"似乎是一辆军用车辆。
行动:搜索知识库进行验证。
观察:"PUMA是德国研发的步兵战车。"
思考:已确认,因此实体类型为"vehicle"。
动作:使用视觉模型在图像中定位"PUMA"。
观察:在[150,250,150,250]处发现一个边界框。
答案:输出类型为"vehicle"的实体及其边界框。


三、已有模型资源

我们需要啊准备两个核心模型:

模型 作用 限制
🧠 GPT类大语言模型 文本理解,ReAct执行 我们要构建 prompt
👁️ Grounding DINO 图像中根据文本定位实体 不理解语义,只处理图像定位

Grounding DINO 可以很好完成**Acting(图像识别、定位)**部分。

但它不做任何"推理":比如"PUMA"是什么类型?是否应该出现在图里?这些就适合用ReAct解决。


四、如何融合 ReAct 进我们的实现?

我们可以设计一个三阶段系统,每个阶段明确分工:

阶段一:文本理解与推理(Reason)

输入 :text.json
输出:识别出的实体+类别

方法一:直接用大语言模型(如 GPT-4)做实体识别和分类,结合 few-shot ReAct prompt。

方法二:训练一个传统文本NER模型(如BERT-NER)做第一步识别,然后让语言模型进行实体分类确认。

你可以为每个文本构建 ReAct prompt:

bash 复制代码
Text: "Soldiers test the PUMA vehicle."

Thought 1: I see the word "PUMA", it seems to refer to some object.
Act 1: Check if "PUMA" is a military term or object.
Obs 1: PUMA is a German-made armored fighting vehicle.

Thought 2: Therefore, "PUMA" is a vehicle-type entity.
Answer: Entity = PUMA, Type = vehicle

阶段二:图像中实体定位(Act)

输入 :图像+推理出的实体名
输出:实体在图像中的位置框(或 null)

使用 Grounding DINO 完成这部分:

python 复制代码
from groundingdino.util.infer import load_model, predict

# 加载模型
model = load_model(config_path, checkpoint_path)

# 输入图像和实体文本,定位实体
boxes, phrases, confidences = predict(model, image_path, [entity_name])

你还可以设置不同类型的置信度阈值(比如 vehicle ≥ 0.5,person ≥ 0.7)。


阶段三:输出格式组织

把所有信息整理成标准格式写入 Entity.json

python 复制代码
{
  "001": [
    {
      "name": "PUMA",
      "label": "vehicle",
      "bndbox": {
        "xmin": 150,
        "xmax": 250,
        "ymin": 150,
        "ymax": 250
      }
    }
  ]
}

如果没有框,bndboxnull


五、完整系统流程图(简化版)

复制代码
                ┌───────────────┐
                │ text.json     │
                └─────┬─────────┘
                      ↓
     ┌──────────────────────────────────┐
     │ ReAct (GPT Prompt)               │
     │ Text推理:提取实体及类型          │
     └─────┬────────────────────────────┘
           ↓
[("PUMA", "vehicle")]
           ↓
     ┌─────────────────────────────────┐
     │ Grounding DINO                  │
     │ 输入图像+实体 → 输出实体位置      │
     └─────┬───────────────────────────┘
           ↓
 ┌─────────────────────────────┐
 │ 生成Entity.json结构化输出    │
 └─────────────────────────────┘

示例 Prompt(ReAct风格)

Prompt 是我们给语言模型输入的一段文字,用来引导它完成特定任务。

说的非常直白就是,Prompt 就是告诉模型:"你现在要做什么、怎么做、输入是什么、输出什么格式"。

Prompt 通常包含以下组成部分:

部分 内容 示例
任务指令 告诉模型要干什么 "请识别出文本中的命名实体及其类别"
输入内容 提供任务的数据 "Text: Soldiers test the PUMA vehicle."
输出格式 要求输出格式规范 输出格式为:{"name": ..., "label": ...}
示例(可选) 提供一两个示例 Few-shot prompt(见下)

要做的任务是从"图+文"中识别实体,这里模型要:

  • 看懂文本 → 推理出哪些是实体

  • 决定实体的类型

  • 决定是否需要图像识别(并调用 Grounding DINO)

所以你可以写一个这样的 Prompt:

bash 复制代码
任务:请你扮演一个多模态信息抽取专家,从文本中提取出军事装备名称和类别。如果实体在图像中可能可见,请执行定位操作。

Text: "Soldiers test the PUMA vehicle."

步骤:
Thought: "PUMA"可能是军事装备。
Act: 查询资料确认。
Observation: 是德国制造的步兵战车。
Thought: 所以"PUMA"是 vehicle 类型。
Act: 图像中是否可以定位?
Observation: Grounding DINO 定位到了边界框。

输出:
{
  "name": "PUMA",
  "label": "vehicle",
  "bndbox": { "xmin":150, "xmax":250, "ymin":150, "ymax":250 }
}
bash 复制代码
Text: "Soldiers test the overall system demonstrator armoured infantry fighting vehicle PUMA."

You are tasked to identify all named entities, decide their types (e.g. person, vehicle, location), and for each entity, decide whether it can appear in the accompanying image. If yes, call a vision model to locate it.

Thought: "PUMA" looks like a named entity.
Act: Search military knowledge base for "PUMA"
Observation: "PUMA" is a German armored vehicle.
Thought: It is a vehicle, and likely appears in the image.
Act: Locate "PUMA" in image using Grounding DINO
Observation: Detected bounding box [150, 250, 150, 250]
Final Answer: name="PUMA", label="vehicle", bndbox=[...]
-------------------------------------------------------------
文本:"士兵们正在测试装甲步兵战车PUMA的整体系统演示。"
您的任务是识别所有命名实体,确定其类型(例如人、车辆、位置),并为每个实体决定是否可以出现在随附的图像中。如果是,请调用视觉模型来定位它。
思想:"PUMA"看起来像一个命名实体。
行动:在军事知识库中搜索"PUMA"
观察:"PUMA"是一辆德国装甲车。
思考:这是一辆车,很可能出现在图像中。
动作:使用接地DINO在图像中定位"PUMA"
观察:检测到边界框[150, 250, 150, 250]
最终答案:name="PUMA",label="车辆",bndbox=[...]


最后总结

项目 内容
任务核心 图文联合识别军事领域命名实体+类型+图像定位
Grounding DINO优势 强大目标定位模型,适合用于 Act
ReAct引入价值 用语言模型增强推理能力,决定定位对象、生成可解释推理轨迹
整合方式 Reason(识别实体+分类)→ Act(调用 Grounding DINO 定位)
可选优化 加入多模态微调或扩充ReAct prompt以提升准确率
相关推荐
June bug几秒前
【Vue】EACCES: permission denied 错误
前端·javascript·vue.js
陈随易2 分钟前
PostgreSQL v18发布,新增AIO uuidv7 OAuth等功能
前端·后端·程序员
一只小阿乐6 分钟前
react 中的组件性能优化
前端·javascript·react.js·react组件性能优化
柯南二号11 分钟前
【大前端】【iOS】iOS 真实项目可落地目录结构方案
前端·ios
肉清17 分钟前
linux自用命令
linux·服务器·前端
weibkreuz24 分钟前
初始React@1
前端·react.js·前端框架
Coder_Boy_35 分钟前
前端和后端软件系统联调经典问题汇总
java·前端·驱动开发·微服务·状态模式
小皮虾39 分钟前
别再封装 Axios 了!用 RPC 像调用本地函数一样写接口(支持 Vue/React/Node)
前端·rpc·全栈
PieroPC42 分钟前
NiceGUI .classes() 完整列表教程
前端
月巴月巴白勺合鸟月半42 分钟前
一个医学编码的服务
服务器·前端·javascript