«شناسایی موجودیت نام‌ دار» (Named entity recognition | NER) یکی از اولین گام‌ها در فرآیند استخراج اطلاعات است که منجر به شناسایی و دسته‌بندی موجودیت‌های دارای نام در متن، به دسته‌های از پیش تعریف شده مانند اسامی افراد، سازمان‌ها، مکان‌ها، بیان زمان‌ها، مقادیر، ارزش‌های پولی، درصدها و دیگر موارد می‌شود. NER در زمینه‌های گوناگون «پردازش زبان طبیعی» (Natural Language Processing | NLP) کاربرد دارد و می‌تواند در پاسخگویی به بسیاری از پرسش‌های جهان واقعی مانند مواردی که در زیر بیان شده کمک کند.

  • کدام سازمان‌ها در مقالات خبری مورد اشاره قرار گرفته‌اند؟
  • از چه محصولاتی در نقد و بررسی‌ها نام برده شده است؟
  • آیا اسامی افراد در توییت‌ها آورده شده؟ آیا توییت در برگیرنده موقعیت جغرافیایی فرد است؟

در این مقاله چگونگی ساخت شناساگر موجودیت‌های نام‌دار با «NLTK» (سرنامی برای عبارت Natural Language Toolkit) و «SpaCy» به منظور شناسایی اسامی نهادهایی که دارای نام هستند، مانند افراد، سازمان‌ها یا موقعیت‌ها در متن خام شرح داده شده است. اما پیش از آغاز کار دو ابزار بیان شده معرفی می‌شوند.

NLTK

«NLTK» سرنامی برای عبارت Natural Language Toolkit است. این عنوان برای اشاره به مجموعه‌ای از کتابخانه‌ها و برنامه‌های نوشته شده برای پردازش زبان طبیعی سمبلیک و آماری برای زبان انگلیسی به کار برده می‌شود که به «زبان برنامه‌نویسی پایتون» (Python Programming Language) نوشته شده‌اند. این ابزار توسط «استیون بِرد» (Steven Bird) و «ادوارد لوپر» (Edward Loper) در دپارتمان علوم کامپیوتر و اطلاعات «دانشگاه پنسیلوانیا» (University of Pennsylvania) ساخته و توسعه داده شده است. NLTK شامل ارائه‌های گرافیکی و داده‌های نمونه (sample data) می‌شود. این جعبه ابزار با کتابی که مفاهیم نهفته در پس وظایف پردازش زبان طبیعی پشتیبانی شده توسط این ابزار را تشریح می‌کند و یک کتاب راهنما همراه است.

SpaCy

«SpaCy» یک کتابخانه نرم‌افزاری «متن‌باز» (open source) برای پردازش زبان طبیعی پیشرفته محسوب می‌شود که به زبان‌های برنامه‌نویسی «پایتون» (Python) و «سایتون» (Cython) نوشته شده است. این کتابخانه تحت گواهینامه MIT منتشر شده و در حال حاضر دارای مدل‌های شبکه عصبی آماری برای زبان‌های انگلیسی، آلمانی، اسپانیایی، پرتغالی، فرانسوی، ایتالیایی، هلندی و شناسایی موجودیت‌های نام‌دار چند زبان و توکن‌سازی بسیاری از زبان‌های دیگر است.

برخلاف NLTK که به طور گسترده برای آموزش و پژوهش مورد استفاده قرار می‌گیرد، spaCy بر فراهم کردن نرم‌افزارهایی برای استفاده‌های تولیدی تاکید دارد. نسخه 1.۰ spaCy از جریان‌های کاری «یادگیری عمیق» نیز پشتیبانی می‌کند که امکان اتصال مدل‌های آموزش دیده شده با کتابخانه‌های یادگیری ماشینی مانند «تنسورفلو» (TensorFlow)، «کِراس» (Keras)، «سایکیت لِرن» (Scikit-learn) یا «پای تُرچ» (PyTorch) را فراهم می‌کند. کتابخانه یادگیری ماشین spaCy با نام «Thinc» به عنوان یک کتابخانه پایتون مجزا نیز موجود است.

ایمپورت کردن کتابخانه‌ها

برای ایمپورت کردن کتابخانه NLTK از قطعه کد زیر استفاده می‌شود:

استخراج اطلاعات

در ادامه، از جمله زیر که از نیویورک تایمز برداشته شده برای شرح مبحث استفاده می‌شود.

European authorities fined Google a record $5.1 billion on Wednesday for abusing its power in the mobile phone market .and ordered the company to alter its practices.

اکنون، «توکن‌سازی کلمات» (word tokenization) و تگ کردن «اقسام کلمه» «part of speech» صورت می‌پذیرد.
سپس، خروجی قطعه کد بالا مورد بررسی قرار می‌گیرد.
Word Tokenization

یک لیست از تاپل‌های حاوی کلمات مجزا در جملات و قسم کلمه آن‌ها دریافت می‌شود. اکنون، بخش‌بندی «گروه اسمی» (noun phrase) به منظور شناسایی موجودیت‌های نام‌دار با استفاده از عبارت باقاعده حاوی قواعدی که نشان می‌دهد جمله چگونه باید بخش‌بندی شود پیاده‌سازی می‌شود.

بخش‌بندی برای شناسایی موجودیت نام‌دار

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

Chunk Parser

خروجی به صورت یک درخت یا سلسله مراتب با S در سطح اول و ادامه جمله قابل خواندن است.

chunk parser

تگ‌های IOB راه استاندارد برای ارائه ساختار بخش‌ها داخل فایل‌ها هستند و به فرمت زیر نیز قابل استفاده محسوب می‌شوند.

در این ارائه، یک توکن در هر خط با تگ قسم کلمه و تگ موجودیت نام‌دار خود وجود دارد. برپایه این واحد آموزش، می‌توان یک تگ‌کننده ساخت که برای برچسب‌گذاری جملات جدید مورد استفاده قرار بگیرد و از تابع ()nltk.chunk.conlltags2tree برای تبدیل توالی تگ‌ها در یک درخت بخش استفاده شود. تابع ()nltk.ne_chunk می‌تواند موجودیت‌های نام‌دار را با استفاده از یک دسته‌بند شناسایی و دسته‌بندی برچسب‌های دسته‌ها مانند ORGANIZATION ،PERSON و GPE را اضافه کند.

named entities recognition

«گوگل» (google) به عنوان یک شخص شناسایی شده و این واقعا ناامید کننده است.

استفاده از SpaCy

شناساگر موجودیت نام‌دار SpaCy بر فراز  «OntoNotes (+) آموزش داده شده و نوع موجودیت‌های ارائه شده در زیر را پشتیبانی می‌کند.

SpaCy’s named entity recognition

موجودیت

در اینجا نیز از همان جمله «European authorities fined Google a record $5.1 billion on Wednesday for abusing its power in the mobile phone market and ordered the company to alter its practices» استفاده می‌شود. به عنوان یکی از نقاط قوت Spacy می‌توان به این نکته اشاره کرد که یک بار اعمال NLP کافی است.

SpaCy’s named entity recognition

«European» یک NORP (ملت یا مذهب یا گروه سیاسی)، «Google» یک «سازمان»، «$5.1 billion» یک «مقدار پول» و «Wednesday» یک شی «تاریخ» است.

توکن

در طول مثال بالا، کار در سطح موجودیت انجام شده است. در مثال پیش رو، تفسیر در سطح توکن برای موجودیت‌ها با استفاده از شمای تگ‌گذاری BILUO به منظور توصیف مرزهای موجودیت انجام می‌شود.

 BILUO tagging scheme

 BILUO tagging scheme

«B» بدین معنا است که توکن یک موجودیت را شروع کرده، «I» یعنی توکن درون یک موجودیت است، «O» یعنی توکن خارج از موجودیت محسوب می‌شود و “” یعنی هیچ تگ موجودیتی تنظیم نشده است.

استخراج موجودیت نام‌دار از یک مقاله

اکنون در مساله‌ای جدی‌تر و شبیه‌تر به مسائل جهان واقعی، موجودیت‌های نام‌دار یکی از مقالات جدید نیویورک تایمز با عنوان «F.B.I. Agent Peter Strzok, Who Criticized Trump in Texts, Is Fired» (+) استخراج می‌شوند.

188 موجودیت در مقاله وجود دارد و این موجودیت‌ها با 1۰ برچسب یکتا نمایش داده شده‌اند.

Named Entity Recognition

در ادامه سه تا از مکررترین موجودیت‌ها مشخص شده‌اند.

Named-Entity-Recognition11

اکنون یک جمله به صورت تصادفی انتخاب می‌شود تا مساله شفاف‌تر باشد.

named entity recognition

در این وهله به منظور تولید نشانه‌گذاری خام، «displacy.render» باید اجرا شود.

named entity recognition

یکی از مواردی که به اشتباه دسته‌بندی شده FBI است. با استفاده از «displaCy visualizer» (+) توکار spaCy، جمله بالا و وابستگی‌های آن نمایش داده می‌شوند.

Named Entity Recognition

اکنون، به صورت کلمه به کلمه (verbatim)، قسم کلمه استخراج و این جمله مرتب‌سازی می‌شود.

Named Entity Recognition

استخراج موجودیت‌های نام‌دار به جز «F.B.I»، برای کلیه موارد صحیح است.

Named Entity Recognition

در نهایت، موجودیت کل مقاله تعیین می‌شود.

Named Entity Recognition

کد کامل این مطلب در گیت‌هاب (+) موجود است.

اگر مطلب بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شود:

^^

آیا این مطلب برای شما مفید بود؟

برچسب ها :

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *