فاز 5 · درس 25

پیونددهی و ابهام‌زدایی موجودیت‌ها در پردازش زبان طبیعی

نوع
ساختنی
زمان
حدود 60 دقیقه
زبان‌ها
Python
پیش‌نیاز
فاز 5 · درس 06 (NER)، فاز 5 · درس 24 (تحلیل ارجاعات یا Coreference Resolution)
یک برچسب متنی معلق که با خطوط نوری به چندین پوشه یا مدخل مختلف متصل شده و یکی از اتصالات روشن و تثبیت شده است
فهرست مطالب
  1. صورت مسئله
  2. مفاهیم پایه
  3. دو معیار ارزیابی کلیدی
  4. پیاده‌سازی گام‌به‌گام
  5. گام 1: ساخت نمایه‌ی نام‌های مستعار از بازهدایت‌های ویکی‌پدیا
  6. گام 2: ابهام‌زدایی بر اساس بافت متن
  7. گام 3: روش مبتنی بر امبدینگ (به سبک BLINK)
  8. گام 4: پیونددهی زایشی موجودیت‌ها (ایده‌ی کلی)
  9. گام 5: ارزیابی روی AIDA-CoNLL
  10. دام‌های رایج
  11. کاربرد عملی
  12. تحویل پروژه
  13. تمرین‌ها
  14. اصطلاحات کلیدی
  15. مطالعه‌ی بیشتر

مدل‌های بازشناسی موجودیت‌های نام‌دار (NER) می‌توانند کلماتی مثل «Jordan» یا «Paris» را در متن پیدا و دسته‌بندی کنند، اما مشخص نمی‌کنند که منظور دقیقاً کدام شخص یا کدام شهر است. این ابهام باعث می‌شود اطلاعات استخراج‌شده برای ساخت گراف دانش، سیستم‌های پرسش‌وپاسخ و پایگاه‌های داده کاربرد دقیقی نداشته باشند.

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

مدل بازشناسی موجودیت‌های نام‌دار (NER) کلمه‌ی «Paris» را پیدا کرد. حالا پیونددهی موجودیت‌ها (Entity linking یا EL) باید تصمیم بگیرد: پاریس در فرانسه؟ پاریس هیلتون؟ شهر پاریس در تگزاس؟ یا پاریس (شاهزاده‌ی تروآ)؟ بدون این پیوند، گراف دانش شما در ابهام می‌ماند.

صورت مسئله

این جمله را در نظر بگیرید: «Jordan beat the press». مدل NER شما واژه‌ی «Jordan» را به‌عنوان شخص (PERSON) برچسب می‌زند. عالی است، اما کدام جردن؟

  • مایکل جردن (بسکتبالیست)؟
  • مایکل بی. جردن (بازیگر)؟
  • مایکل آی. جردن (استاد یادگیری ماشین در برکلی — بله، این اشتباه در مقاله‌های یادگیری ماشین واقعاً پیش می‌آید)؟
  • کشور اردن (Jordan)؟
  • جردن (نام کوچک عبری)؟

پیونددهی موجودیت‌ها هر اشاره را به یک مدخل منحصربه‌فرد در یک پایگاه دانش (Knowledge base یا KB) مانند ویکی‌داده، ویکی‌پدیا، دی‌بی‌پدیا یا پایگاه دانش تخصصی شما وصل می‌کند. این کار دو گام دارد:

  1. تولید کاندیداها (Candidate generation): با دیدن اشاره‌ی «Jordan»، کدام مدخل‌های پایگاه دانش محتمل‌اند؟
  2. ابهام‌زدایی (Disambiguation): با توجه به بافت متن، کدام کاندیدا گزینه‌ی درست است؟

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

مفاهیم پایه

پایپ‌لاین پیونددهی موجودیت‌ها: اشاره متن → کاندیداها → موجودیت ابهام‌زدایی‌شده

تولید کاندیداها: با گرفتن صورت ظاهری اشاره («Jordan»)، کاندیداها را در یک نمایه‌ی نام‌های مستعار (Alias index) جستجو می‌کنید. واژه‌نامه‌های نام‌های مستعار در ویکی‌پدیا بیشتر موجودیت‌های نام‌دار را پوشش می‌دهند: مثلاً «JFK» به جان اف. کندی، ژاکلین کندی، فرودگاه JFK یا فیلم JFK می‌رسد. چنین نمایه‌ای معمولاً برای هر اشاره بین 10 تا 30 کاندیدا برمی‌گرداند.

ابهام‌زدایی: سه رویکرد اصلی.

  1. پیشین + بافت متن (Milne & Witten, 2008): حاصل‌ضرب P(entity | mention) × context-similarity(entity, text). سریع است، نیازی به آموزش ندارد و خوب جواب می‌دهد.
  2. مبتنی بر امبدینگ (ESS / REL / Blink): امبدینگِ اشاره + بافت متن را بسازید. توصیف هر کاندیدا را هم به بردار تبدیل کنید. گزینه‌ای را که بیشترین شباهت کسینوسی (Cosine similarity) را دارد انتخاب کنید. روش پیش‌فرض سال‌های 2020 تا 2024 همین بود.
  3. زایشی (GENRE در سال 2021؛ روش‌های مبتنی بر مدل‌های زبانی بزرگ از 2023 به بعد): نام رسمی و استاندارد موجودیت را توکن‌به‌توکن تولید کنید. خروجی به یک درخت پیشوندی (Trie) از نام‌های معتبر محدود می‌شود تا مطمئن شوید خروجی حتماً یک شناسه‌ی معتبر در پایگاه دانش است.

یکپارچه در برابر پایپ‌لاین: مدل‌های مدرن (مثل ELQ، BLINK، ExtEnD و GENRE) مراحل NER، تولید کاندیدا و ابهام‌زدایی را در یک مرحله اجرا می‌کنند. با این حال، سیستم‌های پایپ‌لاینی هنوز در محیط‌های عملیاتی حرف اول را می‌زنند، چون هر جزء را به‌راحتی می‌توانید عوض کنید.

دو معیار ارزیابی کلیدی

  • بازخوانی اشاره‌ها در تولید کاندیدا (Mention recall): نسبتی از اشاره‌های مرجع (Gold) که مدخل درستِ پایگاه دانش در فهرست کاندیداهایشان وجود دارد. این عدد کفِ کارایی کل پایپ‌لاین را تعیین می‌کند.
  • دقت ابهام‌زدایی / نمره‌ی F1: اگر کاندیدای درست در فهرست باشد، انتخاب اول (Top-1) چند درصد مواقع درست است؟

همیشه هر دو معیار را گزارش کنید. سیستمی با دقت ابهام‌زدایی 99% روی بازخوانی کاندیدای 80%، در عمل پایپ‌لاینی با کارایی 80% است.

اتصال موجودیت‌ها (ENTITY LINKING)تولید کاندیداها و سپس انتخاب
ENTITY LINKINGEntity linking runs in two stages. Candidate generation pulls every knowledge-base entry a surface form like "Jordan" could refer to. Disambiguation then scores each candidate against the surrounding context and keeps one. Here the sports context resolves the mention to the basketball entry while the actor, country, and ML-professor candidates fade out.اشاره"Jordan"بافتار: beat the pressQ41421 M. Jordan (NBA)Q44437 M.B. Jordan (بازیگر)Q810 Jordan (کشور)Q3308285 M.I. Jordan (یادگیری ماشین)✓تولید کاندیداها، سپس ابهام‌زدایی بر اساس بافتار
اتصال موجودیت‌ها (Entity Linking) در دو مرحله اجرا می‌شود. مرحله‌ی تولید کاندیدا تمام مدخل‌های پایگاه دانش را که یک عبارت متنی مانند «Jordan» می‌تواند به آن اشاره کند، استخراج می‌کند. سپس ابهام‌زدایی به هر کاندیدا با توجه به متن پیرامون امتیاز می‌دهد و یکی را برمی‌گزیند. در اینجا، بافتار ورزشی باعث اتصال اشاره به مدخل بسکتبال می‌شود و گزینه‌های بازیگر، کشور و استاد یادگیری ماشین کنار گذاشته می‌شوند.

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

گام 1: ساخت نمایه‌ی نام‌های مستعار از بازهدایت‌های ویکی‌پدیا

alias_to_entities = {
    "jordan": ["Q41421 (Michael Jordan)", "Q810 (Jordan, country)", "Q254110 (Michael B. Jordan)"],
    "paris":  ["Q90 (Paris, France)", "Q663094 (Paris, Texas)", "Q55411 (Paris Hilton)"],
    "apple":  ["Q312 (Apple Inc.)", "Q89 (apple, fruit)"],
}

داده‌های نام‌های مستعار در ویکی‌پدیا شامل حدود 18M جفت (نام مستعار، موجودیت) است. آن‌ها را از دامپ‌های ویکی‌داده بگیرید و در قالب یک نمایه‌ی معکوس (Inverted index) ذخیره کنید.

گام 2: ابهام‌زدایی بر اساس بافت متن

def disambiguate(mention, context, alias_index, entity_desc):
    candidates = alias_index.get(mention.lower(), [])
    if not candidates:
        return None, 0.0
    context_words = set(tokenize(context))
    best, best_score = None, -1
    for entity_id in candidates:
        desc_words = set(tokenize(entity_desc[entity_id]))
        union = len(context_words | desc_words)
        score = len(context_words & desc_words) / union if union else 0.0
        if score > best_score:
            best, best_score = entity_id, score
    return best, best_score

هم‌پوشانی ژاکارد صرفاً یک مثال دم‌دستی است. آن را با شباهت کسینوسی روی امبدینگ‌ها جایگزین کنید (برای نسخه‌ی ترنسفورمری، گام 2 را در فایل code/main.py ببینید).

from sentence_transformers import SentenceTransformer
encoder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")

def embed_mention(text, mention_span):
    start, end = mention_span
    marked = f"{text[:start]} [MENTION] {text[start:end]} [/MENTION] {text[end:]}"
    return encoder.encode([marked], normalize_embeddings=True)[0]

def embed_entity(entity_id, description):
    return encoder.encode([f"{entity_id}: {description}"], normalize_embeddings=True)[0]

در زمان ساخت نمایه، برای هر موجودیتِ پایگاه دانش فقط یک بار امبدینگ تولید کنید. موقع پرس‌وجو، امبدینگِ اشاره + بافت متن را یک بار حساب کنید، ضرب داخلی آن را با مجموعه‌ی کاندیداها بگیرید و بیشترین مقدار را بردارید.

گام 4: پیونددهی زایشی موجودیت‌ها (ایده‌ی کلی)

مدل GENRE عنوان ویکی‌پدیای موجودیت را کاراکتر‌به‌کاراکتر تولید می‌کند. دیکودینگ مقید (Constrained decoding — درس 20 را ببینید) خروجی را فقط به عناوین معتبر محدود می‌کند؛ سازوکاری که ارتباط تنگاتنگی با درخت پیشوندیِ پایگاه دانش دارد. نوادگان امروزی این روش، REL-GEN و پیونددهی موجودیت‌ها با پرامپت و خروجی ساختاریافته در مدل‌های زبانی بزرگ هستند.

prompt = f"""Text: {text}
Mention: {mention}
List the best Wikipedia title for this mention.
Respond with JSON: {{"title": "..."}}"""

ترکیب این روش با یک فهرست مجاز (متد choice در Outlines)، ساده‌ترین پایپ‌لاین پیونددهی موجودیت‌ها برای راه‌اندازی در سال 2026 است.

گام 5: ارزیابی روی AIDA-CoNLL

مجموعه‌داده‌ی AIDA-CoNLL بنچمارک استاندارد EL است: 1,393 مقاله‌ی رویترز، 34k اشاره و موجودیت‌های متناظر در ویکی‌پدیا. در گزارش نهایی، هم دقت داخل پایگاه دانش (P@1) و هم نرخ تشخیص موجودیت‌های غایب (NIL) را بیاورید.

دام‌های رایج

  • مدیریت موجودیت‌های غایب (NIL): بعضی اشاره‌ها اصلاً در پایگاه دانش نیستند (موجودیت‌های جدید یا چهره‌های کمترشناخته‌شده). سیستم باید به جای حدس اشتباه، NIL را پیش‌بینی کند. این معیار را جداگانه می‌سنجند.
  • خطای مرز اشاره (Mention boundary errors): اگر مدل بالادستی NER بخشی از عبارت را جا بیندازد (مثلاً به جای «Bank of America» فقط «Bank» را برچسب بزند)، بازخوانی پیونددهی افت می‌کند.
  • سوگیری به سمت موارد پرتکرار (Popularity bias): مدل‌ها معمولاً به سمت پیشنهاد موجودیت‌های پرتکرار سوگیری دارند. اشاره به «Michael I. Jordan» در یک مقاله‌ی یادگیری ماشین، خیلی وقت‌ها به اشتباه به جردن بسکتبالیست وصل می‌شود.
  • پیونددهی چندزبانه (Cross-lingual EL): وصل کردن اشاره‌های درون متنی چینی به موجودیت‌های ویکی‌پدیای انگلیسی. این کار یک انکودر چندزبانه یا مرحله‌ی ترجمه می‌خواهد.
  • کهنگی داده در پایگاه دانش (KB staleness): شرکت‌ها، اتفاق‌ها و چهره‌های جدید در نسخه‌ی سال گذشته‌ی ویکی‌پدیا نیستند. پایپ‌لاین‌های پروداکشن به چرخه‌ی به‌روزرسانی منظم نیاز دارند.

کاربرد عملی

استک ابزارها در سال 2026:

موقعیت انتخاب مناسب
انگلیسی عمومی + ویکی‌پدیا BLINK یا REL
چندزبانه، پایگاه دانش = ویکی‌پدیا mGENRE
مدل‌های زبانی، تعداد کمِ اشاره در روز پرامپت دادن به Claude یا GPT-4 همراه با لیست کاندیداها و خروجی کنترل‌شده‌ی JSON
پایگاه دانش تخصصی (پزشکی، حقوقی) مدل BERT سفارشی با بازیابی مبتنی بر پایگاه دانش + فاین‌تیون روی داده‌های دامنه‌ی هدف به سبک AIDA
تأخیر بسیار کم (حیاتی) فقط پیشینِ تطابق دقیق (خط پایه‌ی Milne-Witten)
بالاترین دقت پژوهشی (SOTA) مدل‌های GENRE / ExtEnD / روش‌های زایشی مبتنی بر مدل زبانی

الگوی عملیاتی در سال 2026: اجرای NER ← تحلیل ارجاعات (Coref) ← اجرای EL روی هر اشاره ← ادغام خوشه‌ها در قالب یک موجودیت واحد برای هر خوشه. خروجی نهایی: یک شناسه از پایگاه دانش برای هر موجودیت کلی در متن، نه یک شناسه به ازای هر بار تکرار اشاره.

تحویل پروژه

در قالب فایل outputs/skill-entity-linker.md ذخیره کنید:

---
name: entity-linker
description: Design an entity linking pipeline — KB, candidate generator, disambiguator, evaluation.
version: 1.0.0
phase: 5
lesson: 25
tags: [nlp, entity-linking, knowledge-graph]
---

Given a use case (domain KB, language, volume, latency budget), output:

1. Knowledge base. Wikidata / Wikipedia / custom KB. Version date. Refresh cadence.
2. Candidate generator. Alias-index, embedding, or hybrid. Target mention recall @ K.
3. Disambiguator. Prior + context, embedding-based, generative, or LLM-prompted.
4. NIL strategy. Threshold on top score, classifier, or explicit NIL candidate.
5. Evaluation. Mention recall @ 30, top-1 accuracy, NIL-detection F1 on held-out set.

Refuse any EL pipeline without a mention-recall baseline (you cannot evaluate a disambiguator without knowing candidate gen surfaced the right entity). Refuse any pipeline using LLM-prompted EL without constrained output to valid KB ids. Flag systems where popularity bias affects minority entities (e.g. name-clashes) without domain fine-tuning.

تمرین‌ها

  1. ساده. ابهام‌زدای مبتنی بر «پیشین + بافت متن» را در فایل code/main.py روی 10 اشاره‌ی مبهم (مثل Paris، Jordan، Apple) پیاده کنید. موجودیت درست را دستی برچسب بزنید و دقت را اندازه بگیرید.
  2. متوسط. 50 اشاره‌ی مبهم را با یک ترنسفورمر جمله‌ای امبد کنید. توصیف هر کاندیدا را هم به امبدینگ تبدیل کنید. سپس ابهام‌زدایی مبتنی بر امبدینگ را با هم‌پوشانی ژاکارد بافت متن مقایسه کنید.
  3. پیشرفته. یک پایگاه دانش تخصصی با 1k موجودیت بسازید (مثلاً کارکنان و محصولات شرکت خودتان). پایپ‌لاین یکپارچه‌ی NER + EL را اجرا کنید و دقت (Precision) و بازخوانی (Recall) را روی 100 جمله‌ی تست بسنجید.

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

اصطلاح در گفت‌وگوها معنای دقیق فنی
پیونددهی موجودیت‌ها (EL) لینک کردن به ویکی‌پدیا نگاشت یک اشاره به یک مدخل منحصربه‌فرد در پایگاه دانش.
تولید کاندیداها چه گزینه‌هایی داریم؟ برگرداندن فهرست کوتاهی از مدخل‌های محتمل پایگاه دانش برای یک اشاره.
ابهام‌زدایی انتخاب گزینه‌ی درست امتیازدهی به کاندیداها با تکیه بر بافت متن و انتخاب بهترین گزینه.
نمایه‌ی نام‌های مستعار جدول جستجو نگاشت صورت ظاهری متن به کاندیداهای موجودیت.
غایب در پایگاه دانش (NIL) در پایگاه دانش نیست پیش‌بینی صریح این‌که هیچ مدخلی در پایگاه دانش با این اشاره همخوانی ندارد.
پایگاه دانش (KB) بانک دانش ویکی‌داده، ویکی‌پدیا، دی‌بی‌پدیا یا پایگاه دانش تخصصی شما.
بنچمارک AIDA-CoNLL داده‌ی ارزیابی معیار 1,393 مقاله‌ی رویترز همراه با پیوندهای برچسب‌خورده و قطعی به موجودیت‌ها.

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

خودآزمایی

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

  1. پیش از درساتصال موجودیت‌ها (Entity Linking) چه چیزی فراتر از NER اضافه می‌کند؟
  2. پیش از درسدو زیرمسئله‌ی اصلی در اتصال موجودیت‌ها (Entity Linking) کدام‌اند؟
  3. حین درسچرا بازخوانی اشاره‌ها (Mention Recall) باید در کنار دقت ابهام‌زدایی گزارش شود؟
  4. حین درسمدل GENRE چگونه اتصال موجودیت‌ها را انجام می‌دهد؟
  5. حین درسمدیریت NIL در اتصال موجودیت‌ها چیست؟
  6. پس از درسچرا سوگیری محبوبیت (Popularity Bias) به اتصال موجودیت‌ها در دامنه‌های تخصصی آسیب می‌زند؟
  7. پس از درسیک الگوی امن برای اتصال موجودیت‌ها با مدل‌های زبانی بزرگ (LLM-EL) در سال 2026 چیست؟
  8. پس از درسچرا مرزهای اشاره در شناسایی موجودیت‌های نام‌دار (NER) باید برای کارکرد درست اتصال موجودیت‌ها دقیق باشند؟

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

تفاوت NER با پیونددهی موجودیت‌ها (Entity Linking) چیست؟

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

مفهوم NIL در پیونددهی موجودیت‌ها چیست؟

شاخص NIL زمانی پیش‌بینی می‌شود که موجودیت مورد نظر در متن، هیچ مدخل متناظری در پایگاه دانش نداشته باشد تا سیستم از برچسب‌زدن اشتباه جلوگیری کند.

دو معیار اصلی برای سنجش کیفیت سیستم‌های Entity Linking چیستند؟

بازخوانی اشاره‌ها در تولید کاندیدا (Mention Recall) و دقت ابهام‌زدایی کاندیدای نهایی (Disambiguation Accuracy/F1).

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

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