فاز 5 · درس 26

استخراج رابطه و ساخت گراف دانش

نوع
ساختنی
زمان
حدود 60 دقیقه
زبان‌ها
Python
پیش‌نیاز
فاز 5 · درس 06 (NER)، فاز 5 · درس 25 (پیونددهی موجودیت‌ها)
شبکه‌ای از گره‌ها و پیوندهای درخشان که از میان یک صفحه‌ی متنی بیرون آمده و ساختاری هندسی و سازمان‌یافته تشکیل داده‌اند
فهرست مطالب
  1. صورت مسئله
  2. مفاهیم پایه
  3. پیاده‌سازی گام‌به‌گام
  4. گام 1: استخراج مبتنی بر الگو
  5. گام 2: استخراج رابطه با مدل‌های بانظارت seq2seq
  6. گام 3: استخراج مبتنی بر پرامپت با LLM همراه با مهار متن
  7. گام 4: استانداردسازی روی یک آنتولوژی بسته
  8. گام 5: ساخت یک گراف کوچک و پرس‌وجو روی آن
  9. دام‌های رایج
  10. کاربرد در دنیای واقعی
  11. ذخیره‌ی خروجی
  12. تمرین‌ها
  13. اصطلاحات کلیدی
  14. مطالعه‌ی بیشتر

پس از شناسایی موجودیت‌ها و پیوند دادن آن‌ها به مفاهیم یکتا، حلقه‌ی گمشده برای تبدیل متن آزاد به دانش ساختاریافته، کشف ارتباط میان این موجودیت‌هاست. استخراج رابطه (Relation Extraction) دقیقاً این وظیفه را بر عهده دارد و پایه‌های ساخت گراف‌های دانش (Knowledge Graphs) را شکل می‌دهد؛ سیستمی که به مدل‌های هوش مصنوعی و معماری‌های Graph RAG قدرت استدلال، ممیزی دقیق و پیوند دادن حقایق را اعطا می‌کند.

در سال‌های اخیر، استفاده‌ی شتاب‌زده از مدل‌های زبانی بزرگ برای استخراج روابط، پدیده‌ی توهم و تولید گزاره‌های ساختگی بدون منبع را افزایش داده است. یادگیری رویکردهای مهندسی مدرن مانند چارچوب AEVS به شما کمک می‌کند سه‌گانه‌ها را به موقعیت‌های کاراکتری دقیق در متن لنگر کنید و گراف‌های دانشی بسازید که کاملاً قابل ردیابی و اعتبارسنجی باشند.

اگر برای اجرای مدل‌های متن‌باز این درس مانند REBEL یا کار با کتابخانه‌های پایتون نیاز به دانلود وزن‌ها از Hugging Face دارید، به یاد داشته باشید که دسترسی به این مخازن از داخل ایران ممکن است گاهی با ناپایداری روبه‌رو شود؛ برای دسترسی به مدل‌های تجاری نیز گیت‌وی‌های واسط داخلی یا کلیدهای API سازگار با فرمت OpenAI راهکاری در دسترس برای پیشبرد پروژه هستند.

بازشناسی موجودیت‌های نام‌دار (NER) موجودیت‌ها را پیدا کرد؛ پیونددهی موجودیت‌ها (Entity Linking) آن‌ها را مهار کرد؛ حالا استخراج رابطه (Relation Extraction یا RE) یال‌های میان آن‌ها را پیدا می‌کند. گراف دانش چیزی جز مجموعه‌ی گره‌ها، یال‌ها و منشأ و سندیت (Provenance) آن‌ها نیست.

صورت مسئله

تحلیل‌گری این جمله را می‌خواند: «تیم کوک در سال 2011 مدیرعامل اپل شد.» در این جمله چهار فکت نهفته است:

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

استخراج رابطه متن آزاد را به سه‌گانه‌های (Triples) ساختاریافته‌ی (subject, relation, object) یا همان «نهاد، رابطه، گزاره» تبدیل می‌کند. این سه‌گانه‌ها را در یک پیکره‌ی متنی تجمیع کنید تا یک گراف دانش داشته باشید. حالا اگر روی آن پرس‌وجو هم بزنید، به بستری برای استدلال در سامانه‌های RAG، تحلیل داده یا ممیزی‌های انطباق قانونی دست پیدا می‌کنید.

چالش سال 2026 این است: مدل‌های زبانی بزرگ (LLMها) روابط را بیش از حد مشتاقانه استخراج می‌کنند؛ آن‌قدر مشتاق که سه‌گانه‌هایی می‌سازند که متن مبدأ اصلاً از آن‌ها پشتیبانی نمی‌کند (توهم می‌زنند). بدون دانستن منشأ گزاره‌ها، نمی‌توان سه‌گانه‌های واقعی را از داستان‌سرایی‌های باورپذیر تشخیص داد. راهکار سال 2026 پایپ‌لاین‌های مهار و اعتبارسنجی به سبک چارچوب AEVS است.

مفاهیم پایه

متن → سه‌گانه‌ها → گراف دانش

ساختار سه‌گانه. (subject_entity, relation_type, object_entity). روابط یا از یک آنتولوژی بسته می‌آیند (ویژگی‌های Wikidata، استاندارد FIBO، اصطلاحات UMLS) یا از یک مجموعه‌ی باز (به سبک OpenIE که هر متنی می‌تواند رابطه باشد).

سه رویکرد استخراج.

  1. مبتنی بر قاعده یا الگو (Rule / pattern-based). الگوهای هرست (Hearst patterns): «X مانند Y» نتیجه می‌دهد (Y, isA, X). همراه با Regexهای دستی. شکننده، دقیق و تفسیرپذیر.
  2. دسته‌بند بانظارت (Supervised classifier). با داشتن دو موجودیت ذکرشده در جمله، رابطه را از میان یک مجموعه‌ی ثابت پیش‌بینی می‌کند. آموزش‌دیده روی TACRED ،ACE و KBP. رویکرد استاندارد سال‌های 2015 تا 2022.
  3. مدل‌های زبانی بزرگ زایا (Generative LLM). با یک پرامپت از مدل می‌خواهید سه‌گانه‌ها را تولید کند. بدون دردسر و درجا کار می‌کند؛ اما اگر منشأ آن بررسی نشود، خروجی‌های ساختگی ولی باورپذیر تحویل می‌دهد.

چارچوب AEVS (مهار، استخراج، اعتبارسنجی، تکمیل - 2026). چارچوب کنونی برای مهار توهم مدل‌ها:

  • مهار (Anchor): شناسایی تمام بازه‌های متنیِ موجودیت‌ها و عباراتِ رابطه با ثبت موقعیت دقیق کاراکتری آن‌ها.
  • استخراج (Extract): تولید سه‌گانه‌های متصل به بازه‌های مهارشده.
  • اعتبارسنجی (Verify): تطبیق تک‌تک اجزای سه‌گانه با متن مبدأ و رد هر داده‌ای که در متن وجود ندارد.
  • تکمیل (Supplement): یک مرحله بررسی پوشش متن برای اطمینان از این‌که هیچ بازه‌ی مهارشده‌ای از قلم نیفتاده باشد.

با این روش، میزان توهم به‌شدت افت می‌کند. به توان پردازشی بیشتری نیاز دارد، اما کاملاً قابل ممیزی است.

موازنه‌ی آنتولوژی باز در برابر بسته.

  • آنتولوژی بسته (Closed ontology): فهرست مشخصی از ویژگی‌ها (مثلاً بیش از 11,000 ویژگی در Wikidata). رفتار قابل پیش‌بینی دارد، پرس‌وجو روی آن سرراست است، اما نمی‌توان به‌سادگی رابطه‌ی جدیدی به آن اضافه کرد.
  • استخراج باز یا Open IE: هر عبارت فعلی می‌تواند یک رابطه باشد. بازخوانی (Recall) بالا، دقت (Precision) پایین و پرس‌وجوی بسیار نامنظم و آشفته.

گراف‌های دانش عملیاتی معمولاً این دو را ترکیب می‌کنند: با Open IE روابط را کشف می‌کنند، سپس پیش از ادغام در گراف اصلی، روابط را طبق یک آنتولوژی بسته یکپارچه‌سازی و استاندارد (Canonicalize) می‌کنند.

استخراج رابطهمتن ← (فاعل، رابطه، مفعول)
RELATION EXTRACTIONRelation extraction anchors entity spans in the text, then snaps them into typed edges. "Tim Cook" and "Apple" become nodes; the verb phrase becomes the labeled edge between them. Aggregate the triples and you have a knowledge graph."تیم کوک مدیرعامل اپل شد."Tim CookAppleemployer
استخراج رابطه، بازه‌های موجودیت را در متن تثبیت کرده و سپس آن‌ها را به یال‌های نوع‌دار متصل می‌کند. «Tim Cook» و «Apple» تبدیل به گره می‌شوند؛ عبارت فعلی نیز به یال برچسب‌دار بین آن‌ها تبدیل می‌شود. با تجمیع این سه‌گانه‌ها یک گراف دانش شکل می‌گیرد.

پیاده‌سازی گام‌به‌گام

گام 1: استخراج مبتنی بر الگو

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

برای دیدن کد کامل این استخراج‌کننده‌ی ساده، فایل code/main.py را ببینید. الگوهای هرست هنوز هم در پایپ‌لاین‌های حوزه‌های خاص استفاده می‌شوند چون اشکال‌زدایی آن‌ها راحت است.

گام 2: استخراج رابطه با مدل‌های بانظارت seq2seq

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

tok = AutoTokenizer.from_pretrained("Babelscape/rebel-large")
model = AutoModelForSeq2SeqLM.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)
decoded = tok.batch_decode(output, skip_special_tokens=False)

مدل REBEL یک استخراج‌کننده‌ی رابطه بر پایه‌ی BART و از نوع seq2seq است: به‌جای دسته‌بندی جفت‌موجودیت‌ها، مستقیماً سه‌گانه‌ها را تولید می‌کند. متن را تحویل می‌گیرد و سه‌گانه‌ها را تحویل می‌دهد؛ با نام‌های رابطه‌ای که مستقیماً از ویژگی‌های Wikidata برداشته شده‌اند. متن‌های رمزشکنی‌شده هنوز برچسب‌های <triplet> ،<subj> و <obj> مربوط به REBEL را دارند، بنابراین مثل پارسر موجود در Model Card، متن را بر اساس آن‌ها بشکنید تا به رکوردهای (subject, relation, object) برسید. این مدل روی داده‌های با نظارت غیرمستقیم (Distant supervision) فاین‌تیون شده و بیس‌لاین استاندارد وزن‌های باز (Open-weights) به شمار می‌رود.

گام 3: استخراج مبتنی بر پرامپت با LLM همراه با مهار متن

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

هر بازه‌ی متنی خروجی را با متن مبدأ تطبیق دهید. هر جا که شرط text[start:end] != triple_entity برقرار نبود، آن را رد کنید. این ساده‌ترین شکل از مرحله‌ی «اعتبارسنجی» در چارچوب AEVS است.

گام 4: استانداردسازی روی یک آنتولوژی بسته

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

استانداردسازی معمولاً 60 تا 80 درصد کار مهندسی را به خود اختصاص می‌دهد؛ حتماً منابع و زمان کافی برای آن کنار بگذارید.

گام 5: ساخت یک گراف کوچک و پرس‌وجو روی آن

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

این بخش، هسته‌ی بنیادین هر سیستم Graph RAG است. این ساختار را می‌توانید با پایگاه‌های سه‌گانه‌ی RDF (مانند Blazegraph یا Virtuoso)، پایگاه‌های گراف ویژگی‌محور (مثل Neo4j) یا پایگاه‌های داده‌ی برداری تلفیق‌شده با گراف به مقیاس‌های بزرگ‌تر برسانید.

دام‌های رایج

  • مرجع‌یابی پیش از استخراج رابطه: در جمله‌ی «او اپل را تأسیس کرد»، استخراج رابطه باید بداند منظور از «او» کیست. ابتدا پایپ‌لاین مرجع‌یابی زنجیره‌ای (Coreference resolution) را اجرا کنید (درس 24).
  • استانداردسازی موجودیت‌ها: «Apple Inc» و «Apple» باید روی یک گره یکسان ادغام شوند. ابتدا پیونددهی موجودیت‌ها را اجرا کنید (درس 25).
  • سه‌گانه‌های توهمی: LLMها سه‌گانه‌هایی تولید می‌کنند که اصلاً در متن نیست. اعتبارسنجی بازه‌های متنی را اجباری کنید.
  • انحراف در استانداردسازی روابط: روابط در روش Open IE یکدست نیستند («متولد شد در»، «اهلِ»، «زاده‌ی»). اگر آن‌ها را به شناسه‌های یکتا و استاندارد تقلیل ندهید، نمی‌توانید روی گراف پرس‌وجو اجرا کنید.
  • خطاهای زمانی: عبارت «تیم کوک مدیرعامل اپل است» الان درست است، ولی در سال 2005 غلط بود. خیلی از روابط محدودیت زمانی دارند. از توصیف‌گرها (Qualifiers) استفاده کنید (مثل P580 برای زمان شروع و P582 برای زمان پایان در Wikidata).
  • ناهمخوانی دامنه‌ها: مدل REBEL روی داده‌های ویکی‌پدیا آموزش دیده است. متون حقوقی، پزشکی و علمی معمولاً به مدل‌های استخراج رابطه‌ای نیاز دارند که روی همان دامنه فاین‌تیون شده باشند.

کاربرد در دنیای واقعی

استک پیشنهادی سال 2026:

شرایط گزینه‌ی انتخابی
پروداکشن سریع، دامنه‌ی عمومی REBEL یا LlamaPred همراه با استانداردسازی بر اساس Wikidata
دامنه‌های خاص (پزشکی، حقوقی) فاین‌تیون روی دامنه‌ی خاص مشابه SciREX به همراه آنتولوژی سفارشی
استخراج با پرامپت به LLM، با خروجی ممیزی‌شده پایپ‌لاین AEVS: مهار ← استخراج ← اعتبارسنجی ← تکمیل
پردازش حجم بالای اخبار ترکیب رویکرد مبتنی بر الگو و مدل‌های بانظارت
ساخت گراف دانش از صفر روش Open IE همراه با یک مرحله استانداردسازی دستی
گراف دانش وابسته به زمان استخراج به همراه توصیف‌گرها (زمان شروع/پایان، مقطع زمانی)

الگوی یکپارچه‌سازی: بازشناسی موجودیت‌ها (NER) ← مرجع‌یابی زنجیره‌ای ← پیونددهی موجودیت‌ها ← استخراج رابطه ← نگاشت به آنتولوژی ← بارگذاری در گراف. هر یک از این مراحل می‌تواند یک فیلتر کنترل کیفیت باشد.

ذخیره‌ی خروجی

این محتوا را در فایل 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:

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

تمرین‌ها

  1. ساده. استخراج‌کننده‌ی مبتنی بر الگو در فایل code/main.py را روی 5 جمله از مقالات خبری اجرا کنید. دقت آن را به‌صورت دستی بسنجید.
  2. متوسط. از مدل REBEL (یا یک مدل زبانی کوچک) روی همان جمله‌ها استفاده کنید. سه‌گانه‌ها را مقایسه کنید. کدام مدل دقت بالاتری دارد؟ کدام بازخوانی بیشتری دارد؟
  3. سخت. پایپ‌لاین AEVS را بسازید: استخراج با LLM + اعتبارسنجی بازه‌های متنی در برابر متن مبدأ. نرخ توهم را قبل و بعد از مرحله‌ی اعتبارسنجی روی 50 جمله‌ی مشابه ویکی‌پدیا اندازه بگیرید.

اصطلاحات کلیدی

اصطلاح در گفتار عام معنای دقیق فنی
سه‌گانه (Triple) نهاد-رابطه-گزاره تاپل (s, r, o) که واحد سازنده‌ی بنیادین در گراف دانش است.
استخراج رابطه باز (Open IE) استخراج هر چیزی از متن استفاده از عبارات متنی آزاد برای رابطه؛ بازخوانی بالا، دقت پایین.
آنتولوژی بسته (Closed ontology) اسکیمای ثابت مجموعه‌ای محدود و مشخص از انواع روابط (مانند Wikidata ،UMLS ،FIBO).
استانداردسازی (Canonicalization) یکدست کردن همه‌چیز نگاشت نام‌های ظاهری و روابط مختلف به شناسه‌های یکتا و استاندارد.
چارچوب AEVS استخراج مستند به متن پایپ‌لاین مهار، استخراج، اعتبارسنجی و تکمیل (Anchor-Extraction-Verification-Supplement، سال 2026).
منشأ و سندیت (Provenance) پیوند به منبع معتبر اتصال هر سه‌گانه به شناسه سند و بازه‌ی کاراکتری دقیق آن در متن مبدأ.
نظارت غیرمستقیم (Distant supervision) برچسب‌گذاری ارزان تطبیق متن با یک گراف دانش موجود برای تولید خودکار داده‌های آموزشی.

مطالعه‌ی بیشتر

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسواحد بنیادین (اتمیک) یک گراف دانش چیست؟
  2. پیش از درسمخفف AEVS در استخراج رابطه سال 2026 نشان‌دهنده چیست؟
  3. حین درسچرا هر سه‌گانه باید اطلاعات منشأ منبع (شناسه سند + بازه) را به همراه داشته باشد؟
  4. حین درسکانونی‌سازی (Canonicalization) روابط چه کاری انجام می‌دهد؟
  5. حین درسچرا استخراج رابطه معمولاً ابتدا به رفع مرجع مشترک (Coreference Resolution) نیاز دارد؟
  6. پس از درسکدام گزینه بازخوانیِ استخراج اطلاعات باز (Open IE) را فدای قابلیت پرس‌وجوی گراف می‌کند؟
  7. پس از درسچرا بسیاری از گراف‌های دانش عملیاتی از توصیف‌کننده‌های زمانی (زمان شروع/پایان) استفاده می‌کنند؟
  8. پس از درسمدل REBEL چیست؟

سؤالات متداول

استخراج رابطه (Relation Extraction) چه تفاوتی با NER دارد؟

در NER تنها کلمات و موجودیت‌های نام‌دار مانند افراد، سازمان‌ها یا مکان‌ها شناسایی می‌شوند، اما استخراج رابطه اتصالات و روابط معنادار میان دو موجودیت را پیدا کرده و به شکل سه‌گانه (نهاد، رابطه، گزاره) مدل می‌کند.

چارچوب AEVS چگونه مانع از توهم مدل‌های زبانی می‌شود؟

این چارچوب با ثبت موقعیت دقیق کاراکتری موجودیت‌ها در متن مبدأ (Anchor)، تطبیق مستقیم متن سه‌گانه‌ها با بخش‌های متناظر در متن اصلی (Verify) و رد کردن هر عبارتی که در سند منبع وجود ندارد، از توهم جلوگیری می‌کند.

چرا استانداردسازی (Canonicalization) در ساخت گراف دانش حیاتی است؟

روابط استخراج‌شده به شیوه‌ی باز ممکن است کلمات متفاوتی مانند «متولد شد در» یا «اهلِ» داشته باشند؛ استانداردسازی این برچسب‌ها را به شناسه‌های یکتا و تعریف‌شده در آنتولوژی تقلیل می‌دهد تا گراف دانش قابل پرس‌وجو شود.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.