面向共指与事件链接的跨文档标注
ECB+ 如何在新闻报道之间链接事件和实体,哪些工具支持跨文档共指标注,以及用于事件链接的 Potato 配置。
跨文档标注把一篇文档中的指称、事件或主张,与其他文档中的同一实体、同一事件或同一证据链接起来。构建 ECB+ 语料库时采用的方法,是让标注者把指称挂到每个真实世界事件或实体的一条共享记录上,而不是逐对比较所有文档。CROMER、CoRefi 和 Potato 的 multi_document_event 方案都维护这类共享记录,INCEpTION 和 brat 则通过每个指称上的知识库标识符把文档联系起来。
当两个表达式指向同一对象时,二者之间就存在共指关系。跨文档共指把这种关系延伸到不同文本之间。一个早期的测试集收集了 197 篇《纽约时报》文章,文中提到 35 个同名为 John Smith 的不同人物(Bagga and Baldwin, 1998)。事件共指把同样的思路用于行为。EventCorefBank(ECB)把 482 篇新闻文档分为 43 个主题,每个主题围绕一个核心事件,标注者在各篇报道之间链接每个事件的指称(Bejan and Harabagiu, 2010)。
主张与证据的链接把一条主张与支持或反驳它的句子配对,自动事实核查就是这样做的。在 FEVER 数据集中,12.15% 的主张需要来自不止一个 Wikipedia 页面的证据(Thorne et al., 2018)。多文档事件抽取把信息抽取用于同一事件的多篇报道,并填写一个事件模板(谁、什么、何地、何时)。
本指南讨论文档之间的链接。共指消解讨论单篇文本内部的指称链,关系与事件抽取讨论单篇文本内部的关系和事件论元,实体链接讨论把指称解析到知识库条目。跨度标注讨论如何标出指称本身,文本标注工具对比则在各项任务上比较文本标注工具。Potato 是免费开源软件(GPL-3.0-or-later),运行在你自己的服务器上。
跨文档标注的难点
文档对的数量随文档数量的平方增长。一个含 n 篇文档的语料库有 n(n − 1)/2 个文档对。25 篇报道构成 300 个文档对,ECB+ 的 982 篇文本则构成 481,671 个。ECB 和 ECB+ 只在同一主题内部链接文档,语料库构建者事先围绕同一类事件组织好了每个主题。有了共享记录,标注者只需把每篇新报道与目前已记录的事件逐一核对,而这份列表的长度取决于语料库中真实世界事件的数量。
标注者必须同时记住多篇文档中的细节。ECB+ 新增了 502 篇文章,报道每个主题事件类型的另一个实例(Cybulska and Vossen, 2014)。例如,第一个主题把 Tara Reid 2008 年入住戒瘾中心的报道与 Lindsay Lohan 2013 年入住戒瘾中心的报道放在一起。按照 ECB+ 的标注规范,两个行为指称只有在时间、地点和参与者都相同时才构成共指。因此,标注者在链接两篇报道之前要核对时间、地点和参与者。
簇的一致性比标签的一致性更难度量。两位标注者可能把同样十篇文档分成只差一篇文档的簇,得分高低取决于指标统计的是链接、指称还是整个簇。Pradhan et al. (2014) 的参考评分器计算五种共指指标(MUC、B3、CEAFe、CEAFm 和 BLANC)。B3 出自 John Smith 那项研究。
ECB+ 的标注流程
ECB+ 在 ECB 的 43 个主题上新增了 502 篇新闻文章,总计 982 篇文本(ECB+ 仓库)。标注者用 30 个标签标出事件的行为、时间、地点,以及人类与非人类参与者。标注者是两名有报酬的学生助理,母语都是英语。两名助理分三轮工作:
- 在 CAT 工具中,助理们标出 502 篇新文章中的事件成分,并在每篇文章内部链接共指的指称。
- 助理们修订了原有文章已有的 ECB 0.1 标注。
- 在 CROMER 中,助理们在每个主题的所有文章之间链接共指的指称。
在 CROMER 中,标注者先创建一个命名实例,例如"barack obama",再把每个与之共指的指称挂到这个实例上。同一任务的所有标注者共享这些实例。两名标注者都标注了前四个主题的 55 篇文章,在 30 个标签上的 Cohen's kappa 为 0.74,在五个主要成分标签上为 0.79。大多数分歧涉及指称的范围,原因是标注规范规定标中心词,而标注者有时标出了整个短语。重新培训后,两名标注者分摊了其余 447 篇文章,每篇文章只标注一次。
在跨文档这一层,第二名标注者沿用第一名标注者创建的实例,但看不到第一名标注者的链接。在共享实例的情况下,实例 ID 起到类别标签的作用,490 个跨文档共指 ID 上的 Cohen's kappa 为 0.76。ECB+ 团队做出的三个选择适用于任何跨文档项目。第一,在标注之前先把文档按主题分组。第二,标注者把指称链接到共享的命名记录。第三,团队先在一个双人标注的子集上测量一致性,再分摊其余工作。
支持跨文档链接的工具
标注工具处理跨文档链接的方式有两种。第一种是维护一份共享记录列表,任何文档中的指称都可以指向其中的记录。第二种是一次只标注一篇文档,通过知识库标识符把文档联系起来。下表每一行都依据该工具自己的论文或文档,截至 2026 年 11 月 2 日:
| 工具 | 设计用途 | 文档如何被链接 |
|---|---|---|
| CROMER | 在文档簇之间人工标注事件和实体共指,多名标注者处理同一批簇 | 指称挂到共享实例上,实例可以链接到 DBpedia 和 Wikipedia。ECB+ 的跨文档层就是用 CROMER 标注的。 |
| CoRefi | 众包共指标注,带标注者入门培训和审核阶段,可嵌入任意网页(Bornstein et al., 2020) | 其仓库把 CoRefi 描述为一个端到端跨文档共指标注工具。配置和结果都是 JSON,许可证为 MIT。 |
| INCEpTION | 多层文本标注,支持知识库链接和推荐器,采用 Apache License 2.0 | 概念特征把指称链接到项目知识库或 Wikidata 中的概念。一份 2023 年的编码手册用 INCEpTION 通过 Wikidata 在新闻文章之间链接实体。 |
| brat | 在浏览器中做跨度和关系标注 | 每篇文档对应一个 .ann 文件。Equiv 关系在文件内部把指称归为一组,规范化(normalization)则把一个跨度挂到外部 ID 上,例如某个 Wikipedia 条目。 |
| Label Studio | 多种数据类型的标注 | Relations 标签链接两个已标注区域,共指模板在一段文本内部链接实体。 |
| Potato | 在你自己的服务器上开展标注研究 | multi_document_event 方案维护一个共享的事件登记表,每个事件带有成员文档和被引用的文本跨度。 |
按你要链接的单位来选择。指称级的跨文档共指需要能在文档之间链接单个指称的工具,例如 CoRefi 或 CROMER。INCEpTION 适合把指称解析到 Wikidata 或领域本体、并希望在每篇文档内使用链层和推荐器的项目。Potato 把整篇文档链接到共享事件,并记录填入每个事件槽位的文本。这种设计适合事件级共指、多文档事件抽取以及主张与证据的链接。
Potato 中的跨文档事件
Potato 把一个跨文档事件建模为共享登记表中的一条记录,与 CROMER 对实例的建模方式大致相同。每篇文章是一个条目。标注者阅读一篇文章时,把它挂到一个已有事件上或新建一个事件,再通过选中文章中的文本来填写事件的槽位。下面的配置在新闻文章上搭建 ECB+ 风格的事件共指任务,每个事件成分对应一个槽位:
annotation_task_name: "Cross-document event coreference"
task_dir: "."
data_files:
- "data/articles.jsonl"
item_properties:
id_key: id
text_key: text
output_annotation_dir: "annotation_output/"
export_annotation_format: jsonl
user_config:
allow_all_users: true
instance_display:
fields:
- key: text
type: text
span_target: true
event_template:
enabled: true
name: news_event
allow_annotator_create: true
slots: &event_slots
- {name: action, description: "What happened", type: text}
- {name: time, description: "When the action happened", type: text}
- {name: location, description: "Where the action happened", type: text}
- {name: participants, description: "Who took part or was affected", type: text}
annotation_schemes:
- annotation_type: multi_document_event
name: events
description: "Attach this article to the real-world event the article reports, or create a new event, and cite text for each slot."
slots: *event_slots
allow_annotator_create: trueevent_template 块负责创建登记表。如果配置中有 multi_document_event 方案,却没有带 enabled: true 的 event_template 块,Potato 会在启动时报验证错误并停止。YAML 锚点 &event_slots 让方案的槽位与模板的槽位保持一致。文本字段上的 span_target: true 让标注者可以通过选中文本来引用证据。articles.jsonl 的每一行都有一个 id 和一个 text。运行 potato start config.yaml 启动服务器。
Potato 把登记表写入 annotation_output/event_registry.json。每条事件记录包含标题、各槽位的值、成员文档的 ID,以及一份证据引用列表,其中每条引用记有槽位名、文档 ID、字符偏移量和引用的原文。从一篇文章中引用证据,会把这篇文章加入该事件。seed_events 文件可以预先载入事件。例如,种子文件可以为每个主题中的每个核心事件各放一个事件。
登记表在标注者之间共享。第二名标注者打开一篇文章时,会看到之前的标注者已经挂到这篇文章上的事件。当两名标注者同时编辑同一事件时,Potato 会拒绝后一次保存,并重新载入该事件的当前版本。
语料库地图缩短了标注者需要比对的文档列表。启用 corpus_map 后,Potato 用 sentence-transformer 模型为每篇文档生成嵌入,对嵌入做聚类,把这些簇投影到 /corpus/map 上的一张二维地图,并预先计算每篇文档的最近邻。这样标注者只需查看一个簇或某篇文档的近邻,而不必面对整个语料库。在上面的配置中加入这个块:
corpus_map:
enabled: true
embedding_model: all-MiniLM-L6-v2
clustering: {num_clusters: auto, items_per_cluster: 6}
knn: {k: 5}语料库地图需要另行安装 sentence-transformers。pip install potato-annotation[viz] 会加装用于二维布局的 umap-learn。没有 umap-learn 时,Potato 退回到 PCA 投影。在地图上点击某篇文档对应的点,会把这篇文档按需分配给该标注者,不经过常规的分配队列。
coreference 和 span_link 方案只在一个条目内部链接跨度。要标注单篇文章内部的指称链,按共指链中的说明添加一个 span 方案和一个 coreference 方案。ECB+ 展示设计把事件登记表用在了示例文章上。
Potato 中的一致性与导出
Potato 2.13.1 只对指称跨度计算一致性。对于 span 方案,Potato 的一致性报告包含词元级 Cohen's kappa、完全匹配和部分匹配下的跨度 F1、基于字符位置的 Krippendorff's alpha,以及一个简化版 gamma。跨度一致性逐一解释了这些度量。Potato 不对共指链、跨度链接或 multi_document_event 的成员关系评分。簇的一致性需要在 Potato 之外根据导出结果计算。
设置 export_annotation_format: jsonl 后,Potato 为每一对标注者与文章写一条记录到 annotation_output/exports/jsonl/,其中包含这一对的标签、跨度和链接。events 标签列出的是标注者最后一次修改该文章的成员关系时文章所属的事件,事件本身则保存在 event_registry.json 中。要做 ECB+ 那样的一致性研究,可以为每位标注者各运行一个 Potato 服务器,所用配置副本的 output_annotation_dir 各不相同。这样每个服务器各自维护一份登记表,你再用 B3 或 CEAF 这类簇指标比较两种聚类结果。裁定与分歧处理介绍了之后如何解决这些差异。
常见问题
哪些工具支持跨文档标注与链接?
CROMER、CoRefi 和 Potato 为每个事件或实体维护一条共享记录,任何文档中的指称都可以指向它;INCEpTION 和 brat 则通过每个指称上的知识库标识符把文档联系起来。ECB+ 的跨文档层是用 CROMER 标注的,CoRefi 是一个采用 MIT 许可证、用于众包跨文档共指标注的工具。Potato 的 multi_document_event 方案把整篇文档链接到共享事件,并为每个事件槽位保存被引用的文本。
ECB+ 语料库是如何标注的?
两名有报酬的学生标注者先在 CAT 工具中用 30 个标签标出事件成分,并在每篇文章内部链接共指的指称,然后在 CROMER 中把每个主题各篇文章中的指称链接到共享的命名实例上。在 55 篇文章的双人标注子集上,30 个标签的 Cohen's kappa 为 0.74,跨文档共指为 0.76。重新培训后,两名标注者分摊了其余 447 篇文章,每篇文章只标注一次。
延伸阅读
参考文献
- Bagga, A., and Baldwin, B. (1998). Entity-Based Cross-Document Coreferencing Using the Vector Space Model. ACL-COLING 1998, 79–85. https://aclanthology.org/P98-1012/
- Bejan, C., and Harabagiu, S. (2010). Unsupervised Event Coreference Resolution with Rich Linguistic Features. ACL 2010, 1412–1422. https://aclanthology.org/P10-1143/
- Bornstein, A., Cattan, A., and Dagan, I. (2020). CoRefi: A Crowd Sourcing Suite for Coreference Annotation. EMNLP 2020 System Demonstrations, 205–215. https://aclanthology.org/2020.emnlp-demos.27/
- Cybulska, A., and Vossen, P. (2014). Using a Sledgehammer to Crack a Nut? Lexical Diversity and Event Coreference Resolution. LREC 2014, 4545–4552. https://aclanthology.org/L14-1646/
- Girardi, C., Speranza, M., Sprugnoli, R., and Tonelli, S. (2014). CROMER: a Tool for Cross-Document Event and Entity Coreference. LREC 2014, 3204–3208. https://aclanthology.org/L14-1568/
- Pradhan, S., Luo, X., Recasens, M., Hovy, E., Ng, V., and Strube, M. (2014). Scoring Coreference Partitions of Predicted Mentions: A Reference Implementation. ACL 2014, 30–35. https://aclanthology.org/P14-2006/
- Thorne, J., Vlachos, A., Christodoulopoulos, C., and Mittal, A. (2018). FEVER: a Large-scale Dataset for Fact Extraction and VERification. NAACL 2018, 809–819. https://aclanthology.org/N18-1074/
- Vogel, J. (2023). Code Book for the Annotation of Diverse Cross-Document Coreference of Entities in News Articles. arXiv:2310.12064. https://arxiv.org/abs/2310.12064