관계 추출과 지식 그래프 구축(Relation Extraction & Knowledge Graph Construction)

개체명 인식(NER)은 개체(entity)를 찾아냈고, 개체 연결(Entity Linking)은 그 개체를 표준 식별자에 고정(anchor)했습니다. 관계 추출(Relation Extraction)은 그 개체들 사이의 간선(edge)을 찾아냅니다. 지식 그래프(Knowledge Graph)는 노드(node), 간선(edge), 출처(provenance)의 총합입니다.

유형: Build 언어: Python 선수 강의: Phase 5 · 06 (NER), Phase 5 · 25 (Entity Linking) 예상 시간: 약 60분

학습 목표

  • 관계 추출(Relation Extraction; RE)이 자유 형식 텍스트(free text)를 (subject, relation, object) 삼중항(triple)으로 변환하는 과제임을 설명합니다.
  • 규칙 기반(pattern-based), 지도학습 기반(supervised), 생성형 거대 언어 모델(generative LLM) 기반 관계 추출의 장단점(tradeoff)을 비교합니다.
  • AEVS(Anchor-Extraction-Verification-Supplement) 파이프라인의 필요성을 이해합니다.
  • 온톨로지 매핑(ontology mapping), 출처(provenance), 시간 한정자(temporal qualifier)를 지식 그래프 품질을 지키는 관문(quality gate)으로 활용합니다.

문제

어떤 분석가가 다음 문장을 읽습니다. "Tim Cook became CEO of Apple in 2011." 이 한 문장에는 네 가지 사실(fact)이 들어 있습니다.

  • (Tim Cook, role, CEO)
  • (Tim Cook, employer, Apple)
  • (Tim Cook, start_date, 2011)
  • (Apple, type, Organization)

관계 추출(Relation Extraction; RE)은 자유 형식 텍스트를 구조화된 삼중항 (subject, relation, object)로 변환합니다. 말뭉치(corpus) 전체에서 이를 모으면 지식 그래프(knowledge graph)가 만들어집니다. 모은 결과를 질의(query)할 수 있으면, 검색 증강 생성(RAG), 분석(analytics), 규정 준수 감사(compliance audit)를 위한 추론 기반(reasoning substrate)이 됩니다.

2026년의 문제는 거대 언어 모델(LLM)이 관계를 지나치게 의욕적으로 추출한다는 것입니다. 너무 열정적인 나머지, 원문이 뒷받침하지 않는 삼중항까지 환각(hallucinate)으로 만들어 냅니다. 출처가 없으면 진짜 삼중항과 그럴듯해 보이는 허구를 구분할 수 없습니다. 2026년의 답은 AEVS 방식의 닻 고정 후 검증(anchor-and-verify) 파이프라인입니다.

사전 테스트

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

1.관계 추출(Relation Extraction)은 자유 형식 텍스트(free text)를 무엇으로 변환하나요?

2.거대 언어 모델(LLM)을 관계 추출에 사용할 때 AEVS 파이프라인이 필요한 이유는 무엇인가요?

0/2 답변 완료

개념

text → triples → knowledge graph (with provenance) source text "Tim Cook became CEO of Apple in 2011. Steve Jobs founded Apple in 1976." triples (AEVS-verified, with source spans) (Tim Cook, P169 "CEO of", Apple) span=[0, 30] "Tim Cook became CEO of Apple" (Steve Jobs, P112 "founded", Apple) span=[38, 63] "Steve Jobs founded Apple" each triple carries char-span + evidence phrase — audit trail non-negotiable in production knowledge graph Tim Cook Q265852 (PERSON) Apple Q312 (ORG) Steve Jobs Q19837 (PERSON) P169 CEO of P112 founded query with SPARQL / Cypher / graph traversal — each edge traces back to source span

삼중항의 형태(Triple form). (subject_entity, relation_type, object_entity) 구조입니다. 관계(relation)는 닫힌 온톨로지(closed ontology, 예: Wikidata properties, FIBO, UMLS)에서 가져오거나, 열린 집합(open set, OpenIE 방식처럼 무엇이든 허용)에서 가져옵니다.

세 가지 추출 접근법.

  1. 규칙/패턴 기반(Rule/pattern-based). 허스트 패턴(Hearst pattern)을 사용합니다. "X such as Y" → (Y, isA, X) 같은 패턴과 손으로 만든 정규식(hand-crafted regex)을 결합합니다. 깨지기 쉽지만(brittle) 정밀하고(precise) 설명 가능(explainable)합니다.
  2. 지도학습 분류기(Supervised classifier). 한 문장 안에 등장하는 두 개체 언급(entity mention)이 주어지면 고정된 관계 집합 중 하나를 예측합니다. TACRED, ACE, KBP 같은 데이터셋으로 학습합니다. 2015~2022년의 표준 방식이었습니다.
  3. 생성형 LLM(Generative LLM). 모델에 프롬프트(prompt)를 주어 삼중항을 출력하게 합니다. 별도 학습 없이도(out of the box) 바로 동작합니다. 출처가 없으면 그럴듯해 보이는 쓰레기를 환각으로 만들어 냅니다.

AEVS(Anchor-Extraction-Verification-Supplement, 2026). 현재의 환각 완화(hallucination-mitigation) 프레임워크입니다.

  • 닻 고정(Anchor). 모든 개체 구간(entity span)과 관계 표현 구간(relation-phrase span)을 정확한 위치(exact position)와 함께 식별합니다.
  • 추출(Extract). 닻이 된 구간(anchor span)에 연결된 삼중항을 생성합니다.
  • 검증(Verify). 각 삼중항 요소를 원문과 일대일로 맞춰 봅니다. 뒷받침되지 않는 것은 거부합니다.
  • 보완(Supplement). 보완 단계를 통해 닻으로 표시한 구간이 누락되지 않았는지 확인합니다.

이렇게 하면 환각이 크게 줄어듭니다. 계산 자원은 더 많이 들지만 감사 가능(auditable)합니다.

열린 vs 닫힌 온톨로지의 절충(tradeoff).

  • 닫힌 온톨로지(Closed ontology). 고정된 속성 목록을 사용합니다. 예를 들어 Wikidata의 11,000개 이상 속성이 있습니다. 예측 가능하고 질의 가능하며, 임의로 만들어 내기 어렵습니다.
  • 개방형 정보 추출(Open IE). 어떤 동사구든 관계가 될 수 있습니다. 재현율(recall)은 높지만 정밀도(precision)는 낮고, 질의하기 까다롭습니다.

운영 환경의 지식 그래프(production KG)는 보통 둘을 섞어서 씁니다. 새로운 관계를 발굴(discovery)할 때는 개방형 정보 추출을 쓰고, 메인 그래프에 병합하기 전에 그 관계를 닫힌 온톨로지로 표준화(canonicalize)합니다.

직접 만들기

Step 1: 패턴 기반 추출(Pattern-based extraction)

PATTERNS = [
    (r"(?P<s>[A-Z]\w+) (?:is|was) (?:a|an|the) (?P<o>[A-Z]?\w+)", "isA"),
    (r"(?P<s>[A-Z]\w+) (?:is|was) born in (?P<o>\w+)", "bornIn"),
    (r"(?P<s>[A-Z]\w+) works? (?:at|for) (?P<o>[A-Z]\w+)", "worksAt"),
    (r"(?P<s>[A-Z]\w+) founded (?P<o>[A-Z]\w+)", "founded"),
]

전체 장난감 추출기(toy extractor)는 code/main.py를 참고합니다. 허스트 패턴은 디버깅이 쉽기 때문에 도메인 특화 파이프라인에서는 지금도 현역으로 배포됩니다.

Step 2: 지도학습 기반 관계 분류(Supervised relation classification)

from transformers import AutoTokenizer, AutoModelForSequenceClassification

tok = AutoTokenizer.from_pretrained("Babelscape/rebel-large")
model = AutoModelForSequenceClassification.from_pretrained("Babelscape/rebel-large")

text = "Tim Cook was born in Alabama. He later became CEO of Apple."
encoded = tok(text, return_tensors="pt", truncation=True)
output = model.generate(**encoded, max_length=200)
triples = tok.batch_decode(output, skip_special_tokens=False)

REBEL은 시퀀스-투-시퀀스(seq2seq) 관계 추출기입니다. 텍스트가 들어가면 삼중항이 나오고, 이미 Wikidata 속성 식별자(property id)를 사용합니다. 원거리 감독(distant-supervision) 데이터로 미세 조정(fine-tuned)되어 있으며, 공개 가중치 기준의 표준 베이스라인(open-weights baseline)입니다.

Step 3: 닻 고정을 포함한 LLM 기반 추출(LLM-prompted extraction with anchoring)

prompt = f"""Extract (subject, relation, object) triples from the text.
For each triple, include the exact character span in the source text.

Text: {text}

Output JSON:
[{{"subject": {{"text": "...", "span": [start, end]}},
   "relation": "...",
   "object": {{"text": "...", "span": [start, end]}}}}, ...]

Only include triples fully supported by the text. No inference beyond what is stated.
"""

반환된 모든 구간(span)을 원문에 대해 검증합니다. text[start:end] != triple_entity인 항목은 거부합니다. 이것이 가장 단순한 형태의 AEVS "검증(verify)" 단계입니다.

Step 4: 닫힌 온톨로지로 표준화(Canonicalize onto a closed ontology)

RELATION_MAP = {
    "is the CEO of": "P169",       # "chief executive officer"
    "was born in":   "P19",         # "place of birth"
    "founded":        "P112",       # "founded by" (inverted subject/object)
    "works at":       "P108",       # "employer"
}


def canonicalize(relation):
    rel_low = relation.lower().strip()
    if rel_low in RELATION_MAP:
        return RELATION_MAP[rel_low]
    return None   # 매핑되지 않은 열린 관계는 제외하거나 사람 검토 큐로 라우팅

표준화 작업은 전체 엔지니어링 작업의 60~80%를 차지하는 경우가 많습니다. 일정과 예산을 충분히 잡아야 합니다.

Step 5: 작은 그래프를 만들고 질의하기(Build a small graph and query)

triples = extract(text)
graph = {}
for s, r, o in triples:
    graph.setdefault(s, []).append((r, o))


def neighbors(node, relation=None):
    return [(r, o) for r, o in graph.get(node, []) if relation is None or r == relation]


print(neighbors("Tim Cook", relation="P108"))    # -> [(P108, Apple)]

이것이 모든 KG 기반 검색 증강 생성(RAG-over-KG) 시스템의 기본 단위(atom)입니다. 규모는 RDF 삼중항 저장소(triple store, 예: Blazegraph, Virtuoso), 속성 그래프(property graph, 예: Neo4j), 또는 벡터 결합형 그래프 저장소(vector-augmented graph store)로 확장합니다.

함정(Pitfalls)

  • 관계 추출 이전의 상호참조 해결(Coreference before RE). "He founded Apple"에서 관계 추출은 "he"가 누구를 가리키는지 알아야 합니다. 상호참조 해결을 먼저 수행합니다(lesson 24 참고).
  • 개체 표준화(Entity canonicalization). "Apple Inc"와 "Apple"은 같은 노드로 해소(resolve)되어야 합니다. 개체 연결을 먼저 수행합니다(lesson 25 참고).
  • 환각된 삼중항(Hallucinated triples). LLM은 원문이 뒷받침하지 않는 삼중항도 출력합니다. 구간 검증(span verification)을 반드시 강제합니다.
  • 관계 표준화 누락(Relation canonicalization drift). 개방형 정보 추출의 관계는 일관성이 없습니다("was born in", "came from", "is a native of" 등). 표준 식별자로 합치지 않으면 그래프를 질의할 수 없습니다.
  • 시간 관련 오류(Temporal errors). "Tim Cook is CEO of Apple"은 지금은 참이지만 2005년에는 거짓이었습니다. 많은 관계는 시간에 한정됩니다(time-bounded). Wikidata의 P580(시작 시각, start time), P582(종료 시각, end time) 같은 한정자(qualifier)를 함께 사용합니다.
  • 도메인 불일치(Domain mismatch). REBEL은 위키백과(Wikipedia)로 학습되었습니다. 법률, 의료, 과학 텍스트에서는 도메인 특화로 미세 조정한 관계 추출 모델이 필요한 경우가 많습니다.

사용해보기

2026년 기준 스택은 다음과 같이 정리됩니다.

상황선택
빠른 운영, 일반 도메인REBEL 또는 LlamaPred + Wikidata 표준화
도메인 특화(생의학, 법률 등)SciREX 방식의 도메인 미세 조정 + 맞춤 온톨로지
LLM 기반, 감사 가능한 출력AEVS 파이프라인: 닻 고정 → 추출 → 검증 → 보완
대용량 뉴스 정보 추출(IE)패턴 기반 + 지도학습 혼합
새 KG를 처음부터 구축개방형 정보 추출 + 수동 표준화 단계
시간형 지식 그래프(Temporal KG)한정자(시작/종료 시각, 기준 시점)를 포함해 추출

통합 패턴은 다음과 같습니다. 개체명 인식(NER) → 상호참조 해결(coref) → 개체 연결(entity linking) → 관계 추출(relation extraction) → 온톨로지 매핑(ontology mapping) → 그래프 적재(graph load). 각 단계 모두 잠재적 품질 관문이 됩니다.

산출물 만들기

outputs/skill-re-designer.md로 저장합니다.

---
name: re-designer
description: Design a relation extraction pipeline with provenance and canonicalization.
version: 1.0.0
phase: 5
lesson: 26
tags: [nlp, relation-extraction, knowledge-graph]
---

Given a corpus (domain, language, volume) and downstream use (KG-RAG, analytics, compliance), output:

Guide the student in Korean.

1. Extractor. Pattern-based / supervised / LLM / AEVS hybrid. Reason tied to precision vs recall target.
2. Ontology. Closed property list (Wikidata / domain) or open IE with canonicalization pass.
3. Provenance. Every triple carries source char-span + doc id. Non-negotiable for audit.
4. Merge strategy. Canonical entity id + relation id + temporal qualifiers; dedup policy.
5. Evaluation. Precision / recall on 200 hand-labelled triples + hallucination-rate on LLM-extracted sample.

Refuse any LLM-based RE pipeline without span verification (source provenance). Refuse open-IE output flowing into a production graph without canonicalization. Flag pipelines with no temporal qualifier on time-bounded relations (employer, spouse, position).

이 스킬(skill)은 말뭉치(도메인, 언어, 분량)와 후속 사용처(KG 기반 RAG, 분석, 규정 준수)를 입력으로 받아 추출기(extractor), 온톨로지(ontology), 출처(provenance), 병합 전략(merge strategy), 평가(evaluation)를 설계하게 합니다. 구간 검증(출처 정보)이 없는 LLM 기반 관계 추출 파이프라인은 거부하고, 표준화 없이 개방형 정보 추출 결과가 운영 그래프로 흘러들어 가는 것을 거부하며, 고용주(employer), 배우자(spouse), 직위(position)처럼 시간에 한정된 관계에 시간 한정자가 없으면 표시합니다.

연습문제

  1. 쉬움. code/main.py의 패턴 추출기를 뉴스 기사 문장 5개에 실행해 봅니다. 정밀도(precision)를 직접 손으로 점검합니다.
  2. 중간. 같은 문장들에 REBEL 또는 작은 LLM을 사용해 봅니다. 추출된 삼중항을 비교합니다. 어느 추출기가 정밀도가 더 높습니까? 재현율은 어느 쪽이 더 높습니까?
  3. 어려움. AEVS 파이프라인을 만듭니다. LLM으로 추출하고 원문 구간과 검증합니다. 위키백과 스타일 문장 50개에서 검증 단계 전후의 환각률(hallucination rate)을 측정합니다.

핵심 용어

용어흔한 설명실제 의미
삼중항(Triple)주어-관계-목적어지식 그래프의 원자 단위인 (s, r, o) 튜플입니다.
개방형 정보 추출(Open IE)무엇이든 추출어휘가 제한되지 않은 관계 표현. 재현율은 높고 정밀도는 낮습니다.
닫힌 온톨로지(Closed ontology)고정된 스키마관계 유형이 한정된 집합. Wikidata, UMLS, FIBO가 대표 예입니다.
표준화(Canonicalization)전부 정규화표면 이름과 관계 표현을 표준 식별자로 매핑합니다.
AEVS근거 기반 추출닻 고정-추출-검증-보완(Anchor-Extraction-Verification-Supplement) 파이프라인(2026)입니다.
출처(Provenance)진실의 원천 연결모든 삼중항이 원문에 대한 문서 식별자와 문자 구간(char-span)을 가집니다.
원거리 감독(Distant supervision)값싼 라벨기존 지식 그래프와 텍스트를 정렬해 학습 데이터를 만드는 방식입니다.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

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

re-designer

Design a relation extraction pipeline with provenance and canonicalization.

Skill

확인 문제

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

1.개방형 정보 추출(Open IE) 시스템이 'was born in', 'came from', 'is a native of'를 세 개의 별도 관계로 추출했습니다. 이것이 지식 그래프에 어떤 문제를 일으키나요?

2.관계 추출 파이프라인이 'He founded Apple in 2003.'이라는 문장에서 '(He, founded, Apple)'을 추출했습니다. 사전 처리 단계 없이 이 삼중항이 문제가 되는 이유는 무엇인가요?

3.'(Tim Cook, CEO, Apple)'이라는 삼중항이 시간 한정자(temporal qualifier) 없이 저장되었습니다. 이것이 지식 그래프 품질 문제인 이유는 무엇인가요?

0/3 답변 완료

추가 문제 풀기

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