تشخیص موجودیت نامدار یا NER، پیداکردن نامهایی مثل شخص، سازمان و مکان در متن و تعیین نوع آنهاست. برای ارزیابی، فقط فهرست نامها کافی نیست: باید بدانیم هر نام دقیقاً کجای متن است. دو بار آمدن یک نام، دو بازهٔ جدا ایجاد میکند؛ یک بازهٔ درست با برچسب غلط نیز پاسخ کاملاً درست نیست.
قرارداد برچسب و مرز را مشخص کنیم
در این تمرین، PER شخص، ORG سازمان و LOC مکان است. سیاست ما عبارت کامل «شرکت سپید» را نام سازمان میگیرد؛ سیاست دیگری ممکن است پیشوند «شرکت» را کنار بگذارد. پیش از نمرهدادن باید همین قاعده معلوم باشد. دربارهٔ بازههای همپوشان و تودرتو هم قرارداد لازم است؛ همهٔ مدلها یا ابزارها یک ساختار را پشتیبانی نمیکنند.
متن ساختگی ما: «مینا از شرکت سپید در شیراز با مینا دیدار کرد.» این جمله هویت یا رویداد واقعی را گزارش نمیکند و نسبت شخص یا سازمانی با اپرا را نشان نمیدهد.
مرجع بازهها در متن اصلی
| عبارت | start | end | نوع |
|---|---|---|---|
| مینا | 0 | 4 | PER |
| شرکت سپید | 8 | 17 | ORG |
| شیراز | 21 | 26 | LOC |
| مینا | 30 | 34 | PER |
قرارداد فایل همراه، اندیس از صفر، شروع شامل و پایان خارج از بازه است؛ بنابراین در Python باید text[start:end] دقیقاً همان عبارت را بدهد. اینها اندیس نویسهٔ Unicode در Python هستند، نه شمارهٔ توکن و نه تعداد بایت UTF-8. در متن دارای بعضی نویسهها مانند ایموجی، اندیس رشتهٔ JavaScript میتواند واحد دیگری داشته باشد؛ واحد را کنار داده ثبت کنید.
سه خطا را از هم جدا کنیم
پیشبینی فرضی را عمداً چنین ساختهایم: «مینا» اول با PER درست؛ فقط «سپید» با ORG؛ و «شیراز» با ORG. «مینا» دوم حذف شده است. اینها خروجی یک مدل واقعی نیستند. در تطبیق سختگیرانه، بازه و نوع هر دو باید برابر مرجع باشند: نام اول یک TP است؛ مرز کوتاهِ سازمان یک FP و یک FN میسازد؛ نوع غلط شیراز هم یک FP و یک FN؛ نام دومِ جاافتاده یک FN دیگر.
| معیار همین تمرین | مقدار |
|---|---|
| TP | 1 |
| FP | 2 |
| FN | 3 |
| Precision | 1/3 |
| Recall | 1/4 |
| F1 | 2/7؛ حدود۰٫۲۸۵۷ |
اگر فقط واژهها را بشمارید، ممکن است وجود نام دوم را از روی نام اول حدس بزنید و خطا پنهان شود. تطبیق بخشی میتواند معیار جداگانهای باشد، اما آن را با تطبیق دقیق قاطی نکنید و نام معیار را در گزارش بنویسید.
متن را بعد از ثبت بازهها دستکاری نکنیم
تبدیل «ي» به «ی»، حذف نیمفاصله، ادغام فاصلهها یا افزودن نشانه میتواند اندیسها را جابهجا کند. نسخهٔ متنِ مرجع را ثابت نگه دارید یا نگاشت بین متن اولیه و نرمالشده بسازید. پیداکردن نام با جستوجوی ساده نیز برای نام تکراری کافی نیست؛ باید رخداد درست را مشخص کنید.
در مستند spaCy، Span میتواند با اندیس توکن ساخته شود، در حالی که char_span با محدودهٔ نویسه سروکار دارد و در حالت سختگیرانه اگر با مرز توکن همخوان نشود، ممکن است None بدهد. این مقاله اجرای spaCy یا دقت NER فارسیِ آن را گزارش نمیکند. فایل Python همراه بدون مدل، همین بازههای ثابت و امتیازها را واقعاً کنترل کرده است.
آزمون واقعی را چگونه طراحی کنیم؟
جملههای مجاز با نام تکراری، نام چندکلمهای، سازمان شبیه مکان و نام نامطمئن بسازید. برای هر گروه خطا، نمونه و سیاست مرز داشته باشید. یک جمله برای نتیجهگیری دربارهٔ دقت یک مدل کافی نیست. نامِ پیداشده را هم بدون کنترل به هویت واقعی، حساب مشتری یا مجوز اقدام وصل نکنید.
برای استخراج ستونهای فاکتور، کنترل سند و عدد موضوع دیگری است؛ NER لزوماً تاریخ، مبلغ و همهٔ فیلدهای سند را استخراج نمیکند. مسیر عمومی یادگیری در صفحهٔ هوش مصنوعی است و این تمرین قابلیت داخلی محصول اپرا را ادعا نمیکند.
فایل تمرین و منبع
متن فارسی، مرجع بازهها و پیشبینی ساختگی؛ JSON · کد محلی کنترل بازه و امتیاز دقیق؛ Python
منابع در ۳ نوامبر ۲۰۲۶ خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.