상호참조 해결(Coreference Resolution)

"She called him. He did not answer. The doctor was at lunch." 두 사람을 가리키는 언급(reference)이 세 개 있는데, 이름은 어디에도 나오지 않습니다. 상호참조 해결(Coreference Resolution)은 누가 누구인지를 알아내는 작업입니다.

유형: Learn 언어: Python 선수 강의: Phase 5 · 06 (NER), Phase 5 · 07 (POS & Parsing) 예상 시간: 약 60분

학습 목표

  • 상호참조 해결(Coreference Resolution)이 멘션(mention)을 엔터티(entity) 클러스터(cluster)로 묶는 과제임을 설명합니다.
  • 고유 명사(named entity), 일반 명사구(nominal), 대명사(pronominal), 동격(appositive) 멘션을 구분합니다.
  • 규칙 기반(rule-based), 멘션 쌍(mention-pair), 멘션 순위(mention-ranking), 스팬 기반 종단간(span-based end-to-end), 생성형(generative) 접근을 비교합니다.
  • CoNLL F1과 상호참조 평가 지표(evaluation metric)의 의미를 이해합니다.

문제

300단어짜리 기사에서 Apple Inc.에 대한 모든 멘션(mention)을 추출(extract)해야 한다고 가정해 봅시다. 기사가 "Apple"이라고 적었을 때는 쉽지만, "the company", "they", "Cupertino's technology giant", "Jobs's firm"이라고 표현하면 어려워집니다. 이런 멘션들을 같은 엔터티(entity)로 연결(resolve)하지 않으면 NER 파이프라인은 전체 멘션의 60-80%를 놓치게 됩니다.

상호참조 해결은 같은 실세계 엔터티(real-world entity)를 가리키는 모든 표현을 하나의 클러스터(cluster)로 연결합니다. 표층 수준 자연어 처리(surface-level NLP)인 개체명 인식(NER)·구문 분석(parsing)과, 후속(downstream) 의미 처리인 정보 추출(Information Extraction; IE), 질의응답(Question Answering; QA), 요약(summarization), 지식 그래프(Knowledge Graph; KG) 사이를 잇는 접착제 같은 역할을 합니다.

2026년 기준으로 이 작업이 중요한 이유는 다음과 같습니다.

  • 요약(Summarization): "The CEO announced..."와 "Tim Cook announced..."에서, 요약문은 CEO가 누구인지를 명시해야 합니다.
  • 질의응답(Question Answering): "Who did she call?"이라는 질문에 답하려면 "she"가 누구인지 연결해야 합니다.
  • 정보 추출(Information Extraction): "PER1 founded Apple"과 "Jobs founded Apple"이 지식 그래프에 별도의 항목으로 들어가 있으면 잘못된 결과입니다.
  • 다중 문서 정보 추출(Multi-document IE): 같은 사건을 다룬 여러 기사에서 멘션을 합치는 작업은 문서 간 상호참조(cross-document coreference)입니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.상호참조 해결(Coreference Resolution)이 수행하는 핵심 과제는 무엇인가요?

2.'the company'라는 표현은 어떤 멘션(mention) 유형에 해당하나요?

0/2 답변 완료

개념

mentions → clusters → entities document Tim Cook walked onto the stage. He announced the new iPhone. The company also showed a laptop. It will ship in June. Mary Chen leads the AI team. She built the voice assistant. three entities, seven mentions across three sentences coreference clustering Entity #1 Tim Cook He type: PERSON Entity #2 The company It type: ORG Entity #3 Mary Chen She type: PERSON resolved clusters feed IE, QA, summarization — downstream tasks see one entity, not many mentions

과제(The task). 입력은 문서(document)이고, 출력은 멘션(스팬, span)들의 클러스터링입니다. 각 클러스터는 하나의 엔터티를 가리킵니다.

멘션 유형(Mention types).

  • 고유 명사(Named entity). "Tim Cook"
  • 일반 명사구(Nominal). "the CEO", "the company"
  • 대명사(Pronominal). "he", "she", "they", "it"
  • 동격(Appositive). "Tim Cook, Apple's CEO,"

아키텍처(Architectures).

  1. 규칙 기반(Rule-based, Hobbs, 1978). 문법 규칙(grammar rule)을 활용한 구문 트리 기반(syntactic-tree-based) 대명사 해소입니다. 좋은 기준선(baseline)이며, 대명사 영역에서는 놀라울 정도로 이기기 어렵습니다.
  2. 멘션 쌍 분류기(Mention-pair classifier). 모든 멘션 쌍 (m_i, m_j)에 대해 상호참조(corefer) 여부를 예측합니다. 추이적 폐쇄(transitive closure)로 클러스터를 만듭니다. 2016년 이전의 표준 방식입니다.
  3. 멘션 순위(Mention-ranking). 각 멘션에 대해 후보 선행사(candidate antecedent)들을 순위 매깁니다. "선행사 없음(no antecedent)"도 후보에 포함되며, 최상위를 선택합니다.
  4. 스팬 기반 종단간(Span-based end-to-end, Lee et al., 2017). 트랜스포머(Transformer) 인코더(encoder)를 사용합니다. 길이 상한(length cap)까지 가능한 모든 후보 스팬을 열거(enumerate)하고, 멘션 점수(mention score)와 각 스팬에 대한 선행사 확률(antecedent-probability)을 예측한 뒤, 그리디(greedy)하게 클러스터를 만듭니다. 현대 표준입니다.
  5. 생성형(Generative, 2024+). LLM에 "List every pronoun in this text and its antecedent."처럼 프롬프트를 줍니다. 쉬운 사례에서는 잘 동작하지만, 긴 문서나 드물게 등장하는 지시 대상(rare referent)에서는 약합니다.

평가 지표(Evaluation metrics). 표준 지표는 다섯 가지(MUC, B³, CEAF, BLANC, LEA)입니다. 단일 지표 하나로는 클러스터링 품질을 모두 담아낼 수 없기 때문입니다. 보통은 앞의 세 지표 평균을 CoNLL F1으로 보고합니다. 2026년 기준 CoNLL-2012 최고 성능(state-of-the-art)은 약 83 F1입니다.

어려운 사례(Known hard cases).

  • 몇 페이지 앞에서 도입된 엔터티를 가리키는 한정 기술(definite description).
  • 가교 조응(bridging anaphora). 예: "the wheels" → 앞서 언급된 차의 바퀴를 가리키는 경우.
  • 중국어, 일본어처럼 영(零) 조응(zero anaphora)이 흔한 언어.
  • 후방 조응(cataphora, 대명사가 지시 대상보다 먼저 나오는 경우): "When she walked in, Mary smiled."

직접 만들기

Step 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]

Step 2: 규칙 기반 대명사 해소기(교육용)

code/main.py에는 표준 라이브러리만 사용한 구현이 있습니다.

  1. 멘션을 추출합니다. 고유 명사(대문자로 시작하는 스팬), 대명사(사전 조회), 한정 기술("the X")을 찾습니다.
  2. 각 대명사에 대해 직전 K개의 멘션을 살펴보고 다음 기준으로 점수를 매깁니다.
    • 성·수 일치(gender/number agreement) — 휴리스틱
    • 최근성(recency) — 가까운 멘션을 선호
    • 구문적 역할(syntactic role) — 주어를 선호
  3. 가장 높은 점수의 선행사(antecedent)와 연결합니다.

신경망 모델과 경쟁할 수는 없지만, 탐색 공간(search space)과 종단간 모델(end-to-end model)이 내려야 하는 결정이 무엇인지를 잘 보여 줍니다.

Step 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"]}}, ...]
"""

주의해야 할 실패 양상(failure mode)이 두 가지 있습니다. 첫째, LLM은 서로 다른 사람을 가리키는 "him"과 "her"를 하나로 합쳐 버리는 과합병(over-merge)을 자주 일으킵니다. 둘째, 긴 문서에서는 멘션을 조용히 누락시킵니다. 항상 스팬 오프셋 확인(span-offset check)으로 검증해야 합니다.

Step 4: 평가

표준 conll-2012 스크립트는 MUC, B³, CEAF-φ4를 계산해 평균을 보고합니다. 사내 평가(in-house eval)에서는 주석을 단 테스트 세트에서 스팬 수준의 정밀도(precision)와 재현율(recall)부터 시작하고, 그 뒤에 멘션 연결(mention-linking) F1을 추가합니다.

함정(Pitfalls)

  • 싱글톤 폭증(Singleton explosion). 일부 시스템은 모든 멘션을 각각 별도의 클러스터로 보고합니다. B³는 이에 관대하지만 MUC는 강하게 감점합니다. 항상 세 지표를 모두 확인해야 합니다.
  • 긴 문맥에서의 대명사. 2,000 토큰이 넘는 문서에서는 성능이 약 15 F1 떨어집니다. 청크(chunk)를 신중히 나눠야 합니다.
  • 성별 가정(Gender assumptions). 하드코딩된 성별 규칙은 논바이너리 지시 대상, 조직, 동물에서는 깨집니다. 학습된 모델 또는 중립적 점수 부여(neutral scoring)를 사용하세요.
  • 긴 문서에서의 LLM 드리프트. 단일 API 호출로는 50문단 이상에 걸친 멘션을 안정적으로 클러스터링할 수 없습니다. 슬라이딩 윈도우(sliding-window) + 병합(merge) 방식을 사용해야 합니다.

사용하기

2026년의 스택은 다음과 같이 정리할 수 있습니다.

상황선택
영어, 단일 문서en_coreference_web_trf(spaCy-experimental) 또는 AllenNLP 신경망 상호참조
다국어OntoNotes 또는 Multilingual CoNLL로 학습한 SpanBERT / XLM-R
문서 간 사건 상호참조(Cross-document event coref)전용 종단간 모델(2025-26 SOTA)
빠른 LLM 기준선구조화 출력(structured-output) 상호참조 프롬프트를 적용한 GPT-4o / Claude
프로덕션 대화 시스템규칙 기반 폴백 + 신경망 본선 + 핵심 슬롯(critical slot)에 대한 수동 검토

2026년에 실제 배포되는 통합 패턴(integration pattern)은 다음과 같습니다. 먼저 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:

Guide the student in Korean.

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.

이 스킬은 단일 문서/다중 문서, 도메인, 언어 같은 활용 사례(use case)에 따라 접근 방식(approach), 모델, 통합 방식, 평가 계획을 고르도록 돕습니다. 2,000 토큰이 넘는 문서에 대해 슬라이딩 윈도우 병합 없이 LLM 단독으로 상호참조를 처리하는 것을 거부하고, 멘션 수준의 정밀도-재현율 보고가 없는 파이프라인을 거부하며, 인구통계적으로 다양한(demographically diverse) 텍스트에 성별 휴리스틱 시스템을 배포하려 할 경우 플래그를 띄웁니다.

연습문제

  1. 쉬움. code/main.py의 규칙 기반 해소기를 직접 만든 문단 5개에 실행합니다. 정답(ground truth)과 비교해 멘션 연결 정확도(mention-link accuracy)를 측정합니다.
  2. 중간. 뉴스 기사에 사전 학습된 신경망 상호참조 모델을 적용합니다. 직접 단 주석(manual annotation)과 클러스터를 비교합니다. 어디에서 실패했나요?
  3. 어려움. 상호참조로 강화한 NER 파이프라인(coref-enhanced NER pipeline)을 만듭니다. NER를 먼저 실행한 뒤, 상호참조 클러스터로 결과를 병합합니다. 100개 기사에 대해 NER만 사용했을 때와 비교해 엔터티 커버리지(entity coverage)가 얼마나 개선되는지 측정합니다.

핵심 용어

용어흔한 설명실제 의미
멘션(Mention)어떤 대상에 대한 언급엔터티를 가리키는 텍스트 스팬. 이름, 대명사, 명사구가 포함된다.
선행사(Antecedent)"it"이 가리키는 대상뒤따라 나오는 멘션과 상호참조 관계에 있는 이전 멘션.
클러스터(Cluster)한 엔터티에 속한 멘션들동일한 실세계 엔터티를 가리키는 멘션의 집합.
조응(Anaphora)뒤에서 앞을 가리키는 참조후행 멘션이 선행 멘션을 가리킨다("he" → "John").
후방 조응(Cataphora)앞에서 뒤를 가리키는 참조선행 멘션이 후행 지시 대상을 가리킨다("When he arrived, John...").
가교 조응(Bridging)함축적 참조"I bought a car. The wheels were bad."에서 wheels는 바로 그 car의 바퀴를 의미한다.
CoNLL F1리더보드의 그 점수MUC, B³, CEAF-φ4 F1 점수의 평균.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

coref-picker

Pick a coreference approach, evaluation plan, and integration strategy.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.상호참조 시스템이 B³ F1은 높은데 MUC F1은 매우 낮다면, 이 패턴이 가장 가능성 있게 나타내는 것은 무엇인가요?

2.LLM 단독 상호참조 접근이 약 2,000토큰을 넘는 문서에서 실패하는 이유는 무엇인가요?

3.운영 NLP 파이프라인에서 상호참조 해결이 개체명 인식(NER) 이후에 실행되어야 하는 이유는 무엇인가요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다