Phase 05: NLP: Foundations to Advanced

İlişki Çekimi ve Bilgi Grafi Yapı

NER varlıkları buldu. varlık bağlantısı onları demirledi. ilişki çıkarımı aralarındaki kenarları bulur. Bilgi grafi düğümlerin, kenarların ve kökenlerinin toplamıdır.

Type: Build

Languages: Python

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

Time: ~60 minutes

Sorun

Bir analist şöyle okuyor: "Tim Cook 2011'de Apple'ın CEO'su oldu".

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

İlişki Çekimi (RE) serbest metni yapılandırılmış üçlüler haline getirir (subject, relation, object)Bir diziyi toplayıp bir bilgi grafikine sahip olursunuz. Toplayıp sorguya sahip olursunuz ve RAG, analitik veya uyumluluk denetimi için bir mantık altyapınız vardır.

2026 sorunu: LLM'ler ilişkileri coşkuyla çıkarır. Çok coşkuyla. Kaynak metnin desteklemediği üçlü halüsinasyonlar yaparlar. Kaynak olmadan gerçek üçlüleri makul kurgudan ayırt edemezsiniz. 2026 cevabı AEVS tarzı demirleyici ve doğrulama boru hattıdır.

Anlaşım

!Text → triples → knowledge graph

Triple form. (subject_entity, relation_type, object_entity). İlişkiler kapalı bir ontolojiden (Wikidata özellikleri, FIBO, UMLS) veya açık bir setten (OpenIE tarzı, her şey geçerlidir) gelir.

Three extraction approaches.

  1. Rule / pattern-based.Hearst modelleri: "X gibi Y" → (Y, isA, X)Ayrıca el yapımı regex, kırılgan, kesin, açıklanabilir.
  2. Supervised classifier.Bir cümlede iki varlıktan bahsedilirse, ilişkiyi sabit bir setten tahmin edin. TACRED, ACE, KBP üzerinde eğitilmiş. Standart 20152022.
  3. Generative LLM.Modelle üçlü yayımlamaları için uyarın.

AEVS (Anchor-Extraction-Verification-Supplement, 2026).Mevcut halüsinasyon-düşünme çerçevesinde:

  • Anchor.Her bir varlık aralığını ve ilişki-söz aralığını tam pozisyonlarla tanımlayın.
  • Extract.Anchor spans ile bağlantılı üçlü oluşturun.
  • Verify.Her üçlü öğeyi kaynak metine eşleştirin; desteklenmeyen herhangi bir şeyi reddedin.
  • Supplement.Bir kaplama geçitinin, demirlenmiş bir uzanın düşmemesini sağlar.

Halüsinasyonlar keskin düşüyor.

The open-vs-closed tradeoff.

  • Closed ontology.Düzgün özellikler listesi (örneğin, Wikidata'nın 11.000+ özellikleri). Önceden tahmin edilebilir. Arayan. Yaratmak zor.
  • Open IE.Her sözlü cümle bir ilişki haline gelir. Yüksek hatırlama, düşük hassaslık. Sorgulamak çirkin.

Üretim KG'leri genellikle karıştırılır: keşif için IE açın, sonra ana grafikte birleşmeden önce ilişkileri kapalı bir ontolojiye kanonize edin.

Yapın

Adım 1: Şablon tabanlı çıkarma

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"),
]

Bakın .code/main.pyHearst modelleri hala alan özel boru hattlarında gönderiliyor çünkü hataları çözülebilir.

Adım 2: denetim altında olan ilişki sınıflandırması

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, bir seksanı birbiriyle ilişki çıkarıcıdır: metin içeri, üç kat dışarı, zaten Wikidata mülkiyet kimliklerinde. Uzak denetim verilerine göre ince ayarlanmıştır. Standart açık ağırlıklar temel çizgi.

Adım 3: Ankerleme ile LLM ile yapılan çıkarma

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

Geri dönüşe gelen her uzayı kaynağa karşı doğrulayın.text[start:end] != triple_entityBu AEVS'in "tutar" adımıdır.

Adım 4: Kapalı ontolojiye kanonikleştir

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

Kanonikleştirme genellikle mühendislik işinin %60-80'ini alır.

Adım 5: Küçük bir grafik oluşturun ve sorgu

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

Bu, her RAG-over-KG sisteminin atomudur. RDF üçlü depoları (Blazegraph, Virtuoso), özellik grafikleri (Neo4j) veya vektörlü artıran grafik depoları ile ölçebilirsiniz.

Tuzaklar

  • Coreference before RE."Apple'ı kurdu" RE'nin "o" kim olduğunu bilmesi gerekiyor.
  • Entity canonicalization."Apple Inc" ve "Apple" aynı düğmeye bağlanmalıdır.
  • Hallucinated triples.LLM'ler, metnin desteklemediği üçlü yayınlar.
  • Relation canonicalization drift.Açık IE ilişkileri tutarlı değildir ("doğuştu," "gelendi," "doğuştu"). Kanonik kimliklere veya grafiklere düşmek engelli değildir.
  • Temporal errors."Tim Cook Apple'ın CEO'su" doğru şimdi, yanlış 2005'te.P580Başlama zamanı,P582Wikidata'da son zaman).
  • Domain mismatch.REBEL, Wikipedia'da eğitim aldı. Hukuk, tıbbi ve bilimsel metin genellikle alanlar için iyi ayarlanmış RE modellerine ihtiyaç duyar.

Kullan

2026'da:

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)

Entegreleme örneği: NER → coref → entite bağlantı → ilişki çıkarımı → ontoloji haritası → grafik yükü. Her aşama potansiyel bir kalite kapısıdır.

Gönder

  • Kaydet .outputs/skill-re-designer.md- ...
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).

Egzersizler

  1. Easy.Şablon çıkarıcıyı çalıştır code/main.py5 haber makalesinin cümlesi.
  2. Medium.Aynı cümlelerde REBEL (veya küçük bir LLM) kullanın. Üçlü ile karşılaştırın. Hangisi daha hassas?
  3. Hard.AEVS borusunu oluşturun: LLM + ile ekstraktı çıkarın ve kaynaklara göre süreleri doğrulayın. 50 Wikipedia tarzı cümle üzerinde doğrulama adımından önce vs. sonra halüsinasyon oranını ölçün.

Anahtar Terimler

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.

Daha Fazla Okumak

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.