共指消解


文档摘要

共指消解 本节摘要:「她给他打电话。他没接。医生在午休。」三个指称指向两个人,却没有一个被点名——共指消解就是搞清谁是谁。从一篇 300 字文章里抽出每一个提到苹果公司(Apple Inc.)的地方:文章写「Apple」时容易,写「那家公司」「他们」「库比蒂诺的科技巨头」「乔布斯的公司」时难;不把这些指称解析到同一实体,你的 NER 流水线会漏掉 6080% 的提及。共指消解把指向同一现实实体的每个表达连成一个簇,它是表层 NLP(NER、句法分析)与下游语义(信息抽取、问答、摘要、知识图谱)之间的胶水。2026 它依然要紧:摘要要会点名 CEO 而非含糊带过,问答要会解析「她」,知识图谱里「PER1 创立苹果」与「乔布斯创立苹果」若是两条就错了。

共指消解

本节摘要:「她给他打电话。他没接。医生在午休。」三个指称指向两个人,却没有一个被点名——共指消解就是搞清谁是谁。从一篇 300 字文章里抽出每一个提到苹果公司(Apple Inc.)的地方:文章写「Apple」时容易,写「那家公司」「他们」「库比蒂诺的科技巨头」「乔布斯的公司」时难;不把这些指称解析到同一实体,你的 NER 流水线会漏掉 60~80% 的提及。共指消解把指向同一现实实体的每个表达连成一个簇,它是表层 NLP(NER、句法分析)与下游语义(信息抽取、问答、摘要、知识图谱)之间的胶水。2026 它依然要紧:摘要要会点名 CEO 而非含糊带过,问答要会解析「她」,知识图谱里「PER1 创立苹果」与「乔布斯创立苹果」若是两条就错了。本节讲透提及的四种类型(命名、名词性、代词性、同位语)、五种架构(从 Hobbs 1978 规则法到 span 端到端神经网络再到生成式 LLM),以及为何评估要用 MUC、B³、CEAF、BLANC、LEA 五个指标取平均——因为没有单一指标能捕捉聚类质量。

对应原课程:Phase 5 · Lesson 24 · coreference-resolution(原英文 phases/05-nlp-foundations-to-advanced/24-coreference-resolution/docs/en.md)。前置依赖:第 06 节(NER)、第 07 节(词性与句法分析)。

学习目标

阅读完本节,你应当能够:

  1. 区分四种提及类型(命名、名词性、代词性、同位语)与回指、下指、桥接的差异。
  2. 讲清五种架构的演进:规则、提及对分类、提及排序、span 端到端、生成式 LLM
  3. 解释为何评估要报 CoNLL F1(MUC + B³ + CEAF-φ4 平均)而非单一指标。
  4. 识别单例爆炸、长上下文代词退化、性别假设、LLM 长文漂移等陷阱。

一、问题与直觉

从一篇 300 字文章里抽出每一个提到苹果公司的地方。文章写「Apple」时容易;写「那家公司」「他们」「库比蒂诺的科技巨头」「乔布斯的公司」时难。不把这些指称解析到同一实体,你的 NER 流水线漏掉 60~80% 的提及。

共指消解把指向同一现实实体的每个表达连成一个簇。它是表层 NLP(NER、句法分析)与下游语义(信息抽取、问答、摘要、知识图谱)之间的胶水。

2026 它为何要紧:

  • 摘要:「CEO 宣布……」vs「蒂姆·库克宣布……」——摘要该点出 CEO 的名字。
  • 问答:「她给谁打了电话?」需要解析「她」。
  • 信息抽取:知识图谱里「PER1 创立苹果」与「乔布斯创立苹果」若是两条独立条目就错了。
  • 多文档信息抽取:跨文章合并关于同一事件的提及,即跨文档共指。

四种提及类型:

  • 命名实体:「Tim Cook」。
  • 名词性:「the CEO」「the company」。
  • 代词性:「he」「she」「they」「it」。
  • 同位语:「Tim Cook, Apple's CEO,」。

架构演进:

  1. 规则式(Hobbs, 1978):基于语法树的代词解析,用语法规则。好基线,在代词上出奇地难被超越。
  2. 提及对分类器:对每对提及 (m_i, m_j) 预测是否共指,按传递闭包聚类。2016 前的标准。
  3. 提及排序:对每个提及,给候选先行词(含「无先行词」)排序,取最高。
  4. 基于 span 的端到端(Lee 等, 2017):Transformer 编码器,枚举所有长度上限内的候选 span,预测提及分数与每个 span 的先行词概率,贪心聚类。现代默认。
  5. 生成式(2024+):提示 LLM:「列出文本里每个代词及其先行词」。易例上效果好,长文档与罕见指称上挣扎。

评估指标。 五个标准指标(MUC、B³、CEAF、BLANC、LEA),因为没有单一指标能捕捉聚类质量。报前三个的平均为 CoNLL F1。2026 在 CoNLL-2012 上的 SOTA 约 83 F1。

已知难例:

  • 指向几页前引入的实体的定指描述。
  • 桥接回指(「轮子」→ 前面提过的车)。
  • 中文、日文等语言的零回指。
  • 下指(先行词在代词之后):「当走进来时,玛丽笑了。」

二、从零实现

第 1 步:预训练神经共指(AllenNLP / spaCy-experimental)

import spacy nlp = spacy.load("en_coreference_web_trf") # 实验性模型 doc = nlp("Apple announced new products. The company said they would ship soon.") for cluster in doc._.coref_clusters: print(cluster, "->", [m.text for m in cluster])

更长文档上你会得到类似:

  • 簇 1:[Apple, The company, they]
  • 簇 2:[new products]

第 2 步:规则式代词解析器(教学)

code/main.py 的纯标准库实现:

  1. 抽取提及:命名实体(大写 span)、代词(字典查表)、定指描述(「the X」)。
  2. 对每个代词,看前 K 个提及,按以下打分:性别/数一致性(启发式)、就近(更近的优先)、句法角色(主语优先)。
  3. 链到最高分的先行词。

不能与神经模型竞争,但展示了搜索空间与端到端模型必须做的决策。

第 3 步:用 LLM 做共指

prompt = f"""Text: {text} List every pronoun and noun phrase that refers to a person or company. Cluster them by what they refer to. Output JSON: [{{"entity": "Apple", "mentions": ["Apple", "the company", "it"]}}, ...] """

两个失败模式要盯。一是 LLM 过度合并(「him」与「her」其实指两个不同的人);二是 LLM 在长文档里静悄悄漏掉提及。总用 span-offset 检查来验。

第 4 步:评估

标准 conll-2012 脚本算 MUC、B³、CEAF-φ4 并报平均。做内部评估时,先在你标注的测试集上报 span 级精确与召回,再加提及链接 F1。

三、框架对比

陷阱

  • 单例爆炸:有些系统把每个提及都报成自己的簇。B³ 宽容,MUC 会惩罚。总查全部三个指标。
  • 长上下文里的代词:文档超过 2,000 token 时性能掉约 15 F1。要小心分块。
  • 性别假设:硬编码性别规则在非二元指称、组织、动物上崩。用学习模型或中性打分。
  • LLM 长文漂移:单次 API 调用无法可靠跨 50+ 段聚类提及。用滑动窗口 + 合并。

2026 的栈:

情形
英语,单文档 en_coreference_web_trf(spaCy-experimental)或 AllenNLP 神经共指
多语言 在 OntoNotes 或 Multilingual CoNLL 上训的 SpanBERT / XLM-R
跨文档事件共指 专用端到端模型(2025~26 SOTA)
快速 LLM 基线 GPT-4o / Claude 配结构化输出共指提示
生产对话系统 规则兜底 + 神经主路径 + 关键槽位人工复核

💡 2026 集成模式:先跑 NER,再跑共指,把共指簇并进 NER 实体。下游任务看到的是每簇一实体,而非每提及一实体。

四、可复用产物

保存为 outputs/skill-coref-picker.md:

--- name: coref-picker description: Pick a coreference approach, evaluation plan, and integration strategy. version: 1.0.0 phase: 5 lesson: 24 tags: [nlp, coref, information-extraction] --- Given a use case (single-doc / multi-doc, domain, language), output: 1. Approach. Rule-based / neural span-based / LLM-prompted / hybrid. One-sentence reason. 2. Model. Named checkpoint if neural. 3. Integration. Order of operations: tokenize → NER → coref → downstream task. 4. Evaluation. CoNLL F1 (MUC + B³ + CEAF-φ4 average) on held-out set + manual cluster review on 20 documents. Refuse LLM-only coref for documents over 2,000 tokens without sliding-window merge. Refuse any pipeline that runs coref without a mention-level precision-recall report. Flag gender-heuristic systems deployed in demographically diverse text.

五、练习

  1. 基础:在 5 段手工写的段落上跑 code/main.py 的规则解析器,对比金标准测提及链接准确率。
  2. 进阶:在一篇新闻上用预训练神经共指模型,对比你自己的手工标注,看它挂在哪里。
  3. 挑战:搭一个共指增强的 NER 流水线:先 NER,再按共指簇合并,在 100 篇文章上测相对纯 NER 的实体覆盖提升。

本节要点回顾

  1. 共指是表层 NLP 到语义的胶水:不解析提及,NER 漏 60~80%,KG 会出重复条目。
  2. 四种提及类型:命名、名词性、代词性、同位语。
  3. 五种架构演进:Hobbs 规则→提及对分类→提及排序→span 端到端(现代默认)→生成式 LLM。
  4. span 端到端枚举所有候选 span:Transformer 编码器预测提及分数与先行词概率,贪心聚类。
  5. CoNLL F1 = MUC + B³ + CEAF-φ4 平均:单一指标无法捕捉聚类质量,2026 SOTA 约 83 F1。
  6. 难例:定指远距离指称、桥接回指、中日语零回指、下指。
  7. 单例爆炸 B³ 宽容 MUC 惩罚:总查三个指标。
  8. 长上下文代词掉约 15 F1:超 2,000 token 要小心分块。
  9. 性别假设在非二元/组织/动物上崩:用学习模型或中性打分。
  10. LLM 长文漂移:单次调用跨 50+ 段不可靠,用滑动窗口+合并,集成模式是先 NER 再共指再合并。

下一节,我们把共指簇连到真实世界的知识库——进入「实体链接」,看如何把「苹果」这个模糊提及消歧并链接到知识图谱里的正确条目。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U