Phase 05: NLP: Foundations to Advanced

Relação Extração e Grafico de Conhecimento Construção

A NER encontrou as entidades. A entidade que liga as ancorou. A extração de relações encontra as bordas entre elas. Um gráfico de conhecimento é a soma de nós, bordas e sua proveniência.

Type: Build

Languages: Python

Prerequisites: Phase 5 · 06 (NER), Phase 5 · 25 (Entity Linking)

Time: ~60 minutes

O problema

Um analista diz: "Tim Cook tornou-se CEO da Apple em 2011". Quatro fatos:

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

Relação Extração (RE) transforma texto livre em triples estruturados (subject, relation, object)- Agregar em um corpo e você tem um gráfico de conhecimento. Agregar e consulta e você tem um substrato de raciocínio para RAG, análise ou auditorias de conformidade.

O problema de 2026: LLM extraem relações com entusiasmo. Muito entusiasmo. Eles alucinam triples que o texto fonte não suporta. Sem proveniência, você não pode distinguir triples reais da ficção plausível. A resposta de 2026 é o estilo AEVS-ancorar e verificar pipelines.

O conceito

!Text → triples → knowledge graph

Triple form. (subject_entity, relation_type, object_entity)Relações vêm de uma ontologia fechada (propriedades de Wikidata, FIBO, UMLS) ou de um conjunto aberto (estilo OpenIE, qualquer coisa pode acontecer).

Three extraction approaches.

  1. Rule / pattern-based.Padrões Hearst: "X como Y" → (Y, isA, X)Além de regex feito à mão, frágil, preciso, explicável.
  2. Supervised classifier.Dadas duas menções de entidade em uma frase, prever a relação a partir de um conjunto fixo.
  3. Generative LLM.Faça com que o modelo emite triples, funciona fora da caixa, precisa de origem ou alucina lixo de aparência plausível.

AEVS (Anchor-Extraction-Verification-Supplement, 2026).O quadro atual de atenuação das alucinações:

  • Anchor.Identificar cada espaço de entidades e espaço de frases de relação com posições exatas.
  • Extract.Gerenciar triples ligados a espaços de âncora.
  • Verify.Combine cada elemento triplo com o texto fonte; rejeite qualquer coisa não suportada.
  • Supplement.Um passe de cobertura garante que não seja deixada cair a faixa ancorada.

As alucinações caem drasticamente, requer mais computação, mas é auditable.

The open-vs-closed tradeoff.

  • Closed ontology.Lista fixa de propriedades (por exemplo, 11 mil propriedades do Wikidata). Prediível. Querável. Difícil de inventar.
  • Open IE.Qualquer frase verbal torna-se uma relação, alta memória, baixa precisão, confuso para fazer perguntas.

Os KGs de produção geralmente misturam: abrem IE para descoberta, depois canonizam as relações em uma ontologia fechada antes de se fundir no gráfico principal.

Construí-lo

Passo 1: extracção baseada em padrões

pythonPATTERNS = [
    (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"),
]

Veja .code/main.pyOs padrões Hearst ainda são enviados em canais específicos de domínio porque são depuráveis.

Passo 2: classificação das relações sob supervisão

pythonfrom 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 é um extractor de relações sequenciais: texto em, triplicação, já em ids propriedades Wikidata.

Passo 3: Extração com Mestrado em Direito Jurídico com ancoragem

pythonprompt = 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.
"""

Verifique cada volta contra a fonte.text[start:end] != triple_entityEste é o passo de "verificação" do AEVS na sua forma mínima.

Passo 4: canonizar em ontologia fechada

pythonRELATION_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   # drop unmapped open relations or route to manual review

A canonização é frequentemente 60-80% do trabalho de engenharia.

Passo 5: criar um pequeno gráfico e consulta

pythontriples = 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)]

Este é o átomo de cada sistema RAG-over-KG. Escala-o com lojas triplo RDF (Blazegraph, Virtuoso), gráficos de propriedade (Neo4j), ou lojas de gráficos aumentados por vetores.

Encurralagens

  • Coreference before RE."Ele fundou a Apple" RE precisa saber quem é "ele".
  • Entity canonicalization."Apple Inc" e "Apple" devem resolver no mesmo nó.
  • Hallucinated triples.Os LLM emitem triples que o texto não suporta.
  • Relation canonicalization drift.Relações de IE aberta são inconsistentes ("nasceu em, " " veio de, " " é um nativo de").
  • Temporal errors."Tim Cook é CEO da Apple" verdade agora, falsa em 2005.P580hora de início, P582tempo de encerramento em Wikidata).
  • Domain mismatch.O texto jurídico, médico e científico muitas vezes precisa de modelos RE ajustados para o domínio.

Usá-lo

A pilha de 2026:

SituationPick
Fast production, general domainREBEL or LlamaPred with Wikidata canonicalization
Domain-specific (biomed, legal)SciREX-style domain fine-tune + custom ontology
LLM-prompted, audited outputAEVS pipeline: anchor → extract → verify → supplement
High-volume news IEPattern-based + supervised hybrid
Building a KG from scratchOpen IE + manual canonicalization pass
Temporal KGExtract with qualifiers (start/end time, point in time)

O padrão de integração: NER → coref → entidade ligando → extração de relações → mapeamento ontológico → carga gráfica. Cada etapa é um portão de qualidade potencial.

Envia-o

Salva comooutputs/skill-re-designer.md- Não .

markdown---
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:

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).

Exercícios

  1. Easy.Alimenta o extrator de padrões .code/main.py5 frases de artigos de notícias.
  2. Medium.Use REBEL (ou um pequeno LLM) nas mesmas frases. Comparar triples. Qual extractor tem maior precisão?
  3. Hard.Construir o pipeline AEVS: extrair com LLM + verificar intervalos em relação à fonte. Medir a taxa de alucinação antes vs após o passo de verificação em 50 frases do estilo Wikipedia.

Termos-chave

TermWhat people sayWhat it actually means
TripleSubject-relation-object(s, r, o) tuple that is the atomic unit of a KG.
Open IEExtract anythingOpen-vocabulary relation phrases; high recall, low precision.
Closed ontologyFixed schemaBounded set of relation types (Wikidata, UMLS, FIBO).
CanonicalizationNormalize everythingMap surface names / relations to canonical ids.
AEVSGrounded extractionAnchor-Extraction-Verification-Supplement pipeline (2026).
ProvenanceSource-of-truth linkEvery triple carries a doc id + char-span to its source.
Distant supervisionCheap labelsAlign text with an existing KG to create training data.

Mais leitura

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.