본문으로 건너뛰기

상호참조와 이벤트 연결을 위한 문서 간 어노테이션

ECB+가 뉴스 기사 전반에 걸쳐 이벤트와 개체를 어떻게 연결했는지, 어떤 도구가 문서 간 상호참조를 지원하는지, 이벤트 연결을 위한 Potato 설정을 설명합니다.

문서 간 어노테이션은 한 문서의 멘션, 이벤트, 주장을 다른 문서의 같은 개체, 이벤트, 증거와 연결합니다. ECB+ 코퍼스를 구축하는 데 쓰인 방법에서 어노테이터는 모든 문서 쌍을 비교하는 대신, 현실 세계의 이벤트나 개체마다 하나씩 있는 공유 레코드에 멘션을 연결합니다. CROMER, CoRefi, Potato의 multi_document_event 스킴은 이런 종류의 공유 레코드를 유지하고, INCEpTION과 brat는 각 멘션의 지식 베이스 식별자를 통해 문서를 연결합니다.

두 표현이 같은 대상을 가리킬 때 두 표현은 상호참조 관계에 있습니다. 문서 간 상호참조는 이 관계를 여러 텍스트로 확장합니다. 초기의 한 테스트 집합은 John Smith라는 서로 다른 35명의 인물을 언급하는 뉴욕 타임스 기사 197건을 모았습니다(Bagga and Baldwin, 1998). 이벤트 상호참조는 같은 발상을 행위에 적용합니다. EventCorefBank(ECB)는 482건의 뉴스 문서를 주제마다 하나의 핵심 이벤트가 있는 43개 주제로 묶었고, 어노테이터는 보도들에 걸쳐 각 이벤트의 멘션을 연결했습니다(Bejan and Harabagiu, 2010).

주장-증거 연결은 자동 팩트체킹에서처럼 주장을 그 주장을 뒷받침하거나 반박하는 문장과 짝짓습니다. FEVER 데이터셋에서는 주장의 12.15%가 둘 이상의 위키백과 페이지에서 가져온 증거를 필요로 했습니다(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+는 43개 ECB 주제에 뉴스 기사 502건을 추가하여 총 982개 텍스트가 되었습니다(ECB+ 저장소). 어노테이터는 이벤트 행위, 시간, 장소, 인간 및 비인간 참여자를 30개 태그로 표시했습니다. 어노테이터는 모두 영어 원어민인 유급 학생 조교 두 명이었습니다. 두 조교는 세 라운드로 작업했습니다.

  1. CAT 도구에서 조교들은 새 기사 502건의 이벤트 구성 요소를 표시하고 각 기사 안에서 상호참조하는 멘션을 연결했습니다.
  2. 조교들은 원래 기사에 대한 기존 ECB 0.1 어노테이션을 수정했습니다.
  3. CROMER에서 조교들은 각 주제의 모든 기사에 걸쳐 상호참조하는 멘션을 연결했습니다.

CROMER에서 어노테이터는 먼저 "barack obama" 같은 이름 있는 인스턴스를 만든 다음 상호참조하는 각 멘션을 그 인스턴스에 연결합니다. 작업에 참여하는 모든 사람이 인스턴스를 공유합니다. 두 어노테이터는 처음 네 주제의 기사 55건에 모두 라벨링하여 30개 태그에서 Cohen의 카파 0.74, 다섯 개 주요 구성 요소 태그에서 0.79를 얻었습니다. 불일치의 대부분은 멘션 범위에 관한 것이었는데, 지침은 중심어를 지정했지만 어노테이터가 때로 구 전체를 표시했기 때문입니다. 재훈련 후 두 어노테이터는 나머지 기사 447건을 나누어 각 기사를 한 번씩 어노테이션했습니다.

문서 간 계층의 경우 두 번째 어노테이터는 첫 번째 어노테이터의 링크를 보지 않은 채 첫 번째 어노테이터의 인스턴스를 재사용했습니다. 인스턴스를 공유하면 인스턴스 ID가 범주 라벨 역할을 했으며, 문서 간 상호참조 ID 490개에 대한 Cohen의 카파는 0.76이었습니다. ECB+ 팀은 모든 문서 간 프로젝트에 적용되는 세 가지 선택을 했습니다. 첫째, 어노테이션 전에 문서를 주제별로 묶었습니다. 둘째, 어노테이터가 멘션을 공유된 이름 있는 레코드에 연결했습니다. 셋째, 나머지 작업을 나누기 전에 이중 어노테이션한 부분집합에서 일치도를 측정했습니다.

문서 간 연결을 위한 도구

어노테이션 도구는 문서 간 링크를 두 가지 방식으로 처리합니다. 첫째, 일부 도구는 어떤 문서의 멘션이든 가리킬 수 있는 레코드의 공유 목록을 유지합니다. 둘째, 다른 도구는 한 번에 한 문서씩 어노테이션하고 지식 베이스 식별자를 통해 문서를 연결합니다. 아래 표의 각 항목은 2026년 11월 2일 기준으로 해당 도구의 논문이나 문서에서 가져온 것입니다.

도구용도문서를 연결하는 방식
CROMER여러 어노테이터가 같은 클러스터를 다루는, 문서 클러스터 전반의 수작업 이벤트 및 개체 상호참조멘션이 공유 인스턴스에 연결되며, 인스턴스는 DBpedia와 위키백과에 연결할 수 있습니다. CROMER가 ECB+의 문서 간 계층을 만들었습니다.
CoRefi어노테이터 온보딩과 검토 단계를 갖추고 어떤 웹 페이지에도 삽입할 수 있는 크라우드소싱 상호참조 어노테이션(Bornstein et al., 2020)저장소는 CoRefi를 종단 간 문서 간 상호참조 도구로 설명합니다. 구성과 결과는 JSON이며 라이선스는 MIT입니다.
INCEpTION지식 베이스 연결과 추천기를 갖춘 다중 계층 텍스트 어노테이션, Apache License 2.0개념 기능이 멘션을 프로젝트 지식 베이스나 Wikidata의 개념에 연결합니다. 2023년 코드북은 INCEpTION을 사용해 Wikidata를 통해 뉴스 기사 전반의 개체를 연결했습니다.
brat브라우저에서의 스팬 및 관계 어노테이션각 문서에는 .ann 파일이 하나 있습니다. Equiv 관계가 파일 안의 멘션을 묶고, 정규화가 스팬을 위키백과 항목 같은 외부 ID에 연결합니다.
Label Studio여러 데이터 유형에 걸친 라벨링Relations 태그가 라벨링된 두 영역을 연결하고, 상호참조 템플릿은 텍스트 구절 안의 개체를 연결합니다.
Potato자체 서버에서의 어노테이션 연구multi_document_event 스킴은 구성원 문서와 인용된 텍스트 스팬이 있는 이벤트의 공유 레지스트리를 유지합니다.

연결하는 단위에 따라 선택하세요. 멘션 수준의 문서 간 상호참조에는 CoRefi나 CROMER처럼 문서에 걸쳐 개별 멘션을 연결하는 도구가 필요합니다. INCEpTION은 멘션을 Wikidata나 도메인 온톨로지로 해결하고 각 문서 안에서 체인 계층과 추천기를 원하는 프로젝트에 맞습니다. Potato는 문서 전체를 공유 이벤트에 연결하고 각 이벤트 슬롯을 채우는 텍스트를 기록합니다. 이 설계는 이벤트 수준 상호참조, 다중 문서 이벤트 추출, 주장-증거 연결에 맞습니다.

Potato의 문서 간 이벤트

Potato는 CROMER가 인스턴스를 모델링하는 방식과 비슷하게, 문서 간 이벤트를 공유 레지스트리의 레코드로 모델링합니다. 각 기사는 하나의 항목입니다. 기사를 읽는 어노테이터는 기사를 기존 이벤트에 연결하거나 새 이벤트를 만든 다음, 기사에서 텍스트를 선택하여 이벤트의 슬롯을 채웁니다. 아래 구성은 이벤트 구성 요소마다 슬롯 하나씩을 두어 뉴스 기사에 대한 ECB+ 방식의 이벤트 상호참조를 설정합니다.

yaml
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: true

event_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는 문장 트랜스포머 모델로 모든 문서를 임베딩하고, 임베딩을 클러스터링하고, 클러스터를 /corpus/map의 2D 지도에 투영하며, 각 문서의 최근접 이웃을 미리 계산합니다. 그러면 어노테이터는 코퍼스 전체 대신 한 클러스터나 한 문서의 이웃을 검토합니다. 위 구성에 다음 블록을 추가하세요.

yaml
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]는 2D 배치를 위한 umap-learn을 추가합니다. umap-learn이 없으면 Potato는 PCA 투영으로 대체합니다. 지도에서 문서의 점을 클릭하면 일반 배정 큐와 별개로 그 문서가 요청에 따라 어노테이터에게 배정됩니다.

coreference와 span_link 스킴은 하나의 항목 안에서 스팬을 연결합니다. 한 기사 안의 멘션 체인에는 상호참조 체인에 설명된 대로 span 스킴과 coreference 스킴을 추가하세요. ECB+ 쇼케이스 디자인은 샘플 기사에 이벤트 레지스트리를 적용합니다.

Potato의 일치도와 내보내기

Potato 2.13.1은 멘션 스팬에 대해서만 일치도를 계산합니다. span 스킴에 대해 Potato의 일치도 보고서에는 토큰 수준 Cohen의 카파, 정확 일치와 부분 일치에서의 스팬 F1, 문자 위치에 대한 Krippendorff의 알파, 단순화된 감마가 들어 있습니다. 스팬 일치도가 각 척도를 설명합니다. Potato는 상호참조 체인, 스팬 링크, multi_document_event 소속을 채점하지 않습니다. 클러스터 일치도는 내보내기 결과를 가지고 Potato 밖에서 계산합니다.

export_annotation_format: jsonl이면 Potato는 어노테이터와 기사 쌍마다 하나의 레코드를 annotation_output/exports/jsonl/에 쓰며, 그 쌍의 라벨, 스팬, 링크가 들어 있습니다. events 라벨은 어노테이터가 기사의 소속을 마지막으로 변경했을 때 그 기사가 속해 있던 이벤트를 나열하고, event_registry.json에는 이벤트 자체가 들어 있습니다. ECB+ 연구 같은 일치도 연구에서는 서로 다른 output_annotation_dir 값을 가진 구성 사본으로 어노테이터마다 Potato 서버를 하나씩 실행하세요. 그러면 각 서버가 별도의 레지스트리를 유지하며, 두 클러스터링을 B3나 CEAF 같은 클러스터 지표로 비교합니다. 이후 차이를 해소하는 방법은 판정과 불일치 해소가 다룹니다.

자주 묻는 질문

어떤 도구가 문서 간 어노테이션과 연결을 지원하나요?

CROMER, CoRefi, Potato는 어떤 문서의 멘션이든 가리킬 수 있는 이벤트나 개체별 공유 레코드를 유지하고, INCEpTION과 brat는 각 멘션의 지식 베이스 식별자를 통해 문서를 연결합니다. CROMER가 ECB+의 문서 간 계층을 만들었고, CoRefi는 크라우드소싱 문서 간 상호참조를 위한 MIT 라이선스 도구입니다. Potato의 multi_document_event 스킴은 문서 전체를 공유 이벤트에 연결하고 각 이벤트 슬롯에 대해 인용된 텍스트를 저장합니다.

ECB+ 코퍼스는 어떻게 어노테이션되었나요?

유급 학생 어노테이터 두 명이 CAT 도구에서 30개 태그로 이벤트 구성 요소를 표시하고 각 기사 안에서 상호참조하는 멘션을 연결한 다음, CROMER에서 각 주제의 기사 전반에 걸쳐 멘션을 공유된 이름 있는 인스턴스에 연결했습니다. 이중 어노테이션한 기사 55건의 부분집합에서 Cohen의 카파는 30개 태그에서 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