داده کاوی 33 بازدید

شناسایی موجودیت های نام دار (Named Entity Recognition | NER) و دسته‌بندی آن‌ها (Classification)، فرآیند تشخیص واحدهای اطلاعاتی مانند اسامی افراد، سازمان‌ها و مکان‌ها، و همچنین بیانات عددی از متن ساختارنیافته است. هدف از این کار توسعه روش‌های کاربردی و مستقل از دامنه به منظور شناسایی موجودیت‌های نام‌دار با صحت بالا به صورت خودکار است.

تشخیص موجودیت‌های نام‌گذاری شده

شناسایی و دسته‌بندی موجودیت‌های نام‌دار (Named Entity Recognition and Classification | NERC) فرآیند تشخیص واحدهای اطلاعاتی مانند اسامی افراد، سازمان‌ها، موقعیت‌ها و بیانات ریاضی مانند زمان، تاریخ، پول و درصد در داده‌های ساختارنیافته است. هدف از این کار توسعه روش‌های کاربردی و مستقل از دامنه به منظور شناسایی موجودیت‌های نام‌دار، با صحت بالا و به صورت خودکار محسوب می‌شود.

در مطلب «شناسایی موجودیت نام دار با NLTK و SpaCy — راهنمای کاربردی»، مقدمه‌ای بر NLTK و SpaCy، مفاهیم موجودیت نام‌دار و چگونگی تشخیص آن با استفاده از دو ابزار بیان شده، مورد بررسی قرار گرفت. اکنون، یک گام به جلوتر رفته و مدل یادگیری ماشین برای NER با استفاده از کتابخانه Scikit-Learn آموزش داده خواهد شد.

داده

داده‌های مورد استفاده در اینجا مجموعه نوشته‌های مهندسی ویژگی شده با تگ‌های IOB و POS هستند که در «Kaggle» (+) وجود دارند. در تصویر زیر چند سطر اول این مجموعه داده مشهود است.

مجموعه داده متنی

اطلاعات اساسی پیرامون موجودیت‌ها:

  • geo = Geographical Entity (موجودیت جغرافیایی)
  • org = Organization (سازمان)
  • per = Person (شخص)
  • gpe = Geopolitical Entity (موجودیت ژئوپلتیکی)
  • tim = Time indicator (شاخص زمانی)
  • art = Artifact (مصنوعات)
  • eve = Event (رویداد)
  • nat = Natural Phenomenon (پدیده طبیعی)

IOB

«IOB» سرنامی برای عبارت «Inside–outside–beginning» است و یک روش تگ زنی متداول برای تگ زدن توکن‌ها محسوب می‌شود.

  • I: پیشوند پیش از آنکه تگ نشان دهد که درون یک بخش است.
  • B: پیشوندی که نشان می‌دهد یک تگ آغاز یک بخش است.
  • O: این تگ نشان می‌دهد که یک توکن متعلق به هیچ بخشی نیست (بیرون).

کل مجموعه داده در حافظه یک کامپیوتر جا نمی‌شود، بنابراین اولین 1۰۰۰۰۰ رکورد آن را انتخاب کرده و از الگوریتم‌های یادگیری حافظه خارجی (Out-of-core learning) به منظور «واکشی» (fetch) و پردازش داده‌ها استفاده می‌شود.

Out-of-core learning algorithms
Named Entity Recognition

پیش‌پردازش داده‌ها

همانطور که پیش‌تر مشخص شد، مقادیر NaN زیادی در ستون «# Sentence» وجود دارند و بنابراین باید این سلول‌ها را با مقادیر دیگری جایگزین کرد.

(4544, 10922, 17)

4۵44 جمله وجود دارد که شامل 1۰۹22 کلمه یکتا هستند و با 1۷ تگ، برچسب‌گذاری شده‌اند. این تگ‌ها به طور منظم توزیع نشده‌اند.

پیش‌پردازش داده‌ها

کد زیر تاریخ متن را با استفاده از «DictVectorizer» (+) و سپس تقسیم‌بندی آن به داده‌های «آموزش» (train) و «آزمون» (test) به بردار تبدیل می‌کند.

((67000, 15507), (67000,))

الگوریتم‌های یادگیری حافظه خارجی

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

پرسپترون (Perceptron)

الگوریتم‌های حافظه خارجی

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

پیش‌پردازش داده‌ها

پردازش داده‌ها

دسته‌بندهای خطی با آموزش SGD

دسته‌بندهای خطی با آموزش گرادیان کاهشی تصادفی (SGD)

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

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

دسته‌بند تهاجمی منفعل (Passive Aggressive Classifier)

دسته‌بند Passive Aggressive
دسته‌بندی Passive Aggressive

هیچ یک از دسته‌بندهای بالا نتایج قابل قبولی تولید نمی‌کنند. واضح است که هیچ چیز به آسانی دسته‌بندی موجودیت‌های نام دار با استفاده از دسته‌بندهای متداول نیست ولی برای دریافت خروجی مناسب باید تلاش بیشتری کرد.

میدان تصادفی شرطی

«میدان تصادفی شرطی» (Conditional Random Field | CRF)، اغلب برای برچسب‌گذاری یا «تجزیه» (parsing) «داده‌های متوالی» (Sequential Data) مانند پردازش زبان طبیعی مورد استفاده قرار می‌گیرد و در «برچسب‌گذاری اجزای کلام» (Part-of-speech tagging)، شناسایی موجودیت‌های نام‌گذاری شده و دیگر موارد کاربرد دارد.

sklearn-crfsuite

یک مدل CRF برای شناسایی موجودیت‌های نام‌دار با استفاده از sklearn-crfsuite روی مجموعه داده موجود، آموزش داده می‌شود.

کد زیر به منظور بازیابی جملات با POS و تگ‌های آن‌ها مورد استفاده قرار می‌گیرد. (نکات لازم در این رابطه از اینجا (+) قابل مطالعه است.)

استخراج ویژگی

در این وهله، ویژگی‌های بیشتری (بخش‌های کلمه، تگ‌های POS ساده شده، فلگ‌های پایین‌تر/عنوان/بالاتر، ویژگی‌های کلمات موجود در نزدیکی) استخراج و به فرمت sklearn-crfsuite تبدیل می‌شوند. هر جمله باید به لیستی از احکام تبدیل شود. کد زیر از وب‌سایت رسمی sklearn-crfsuites (+) دریافت شده است.

جداسازی مجموعه‌های آموزش و آزمون

آموزش یک مدل CRF

Train a CRF model

ارزیابی

به نظر می‌رسد نتایج بهبود یافته است. بنابراین با استفاده از sklearn-crfsuite باید به اکتشافات بیشتری پرداخت.

دسته‌بند چه چیزی یاد گرفته؟

Named Entity Recognition

تفسیر: احتمال زیادی وجود دارد که شروع یک موجودیت جغرافیایی (beginning of a geographical entity | B-geo) با یک توکن درون موجودیت جغرافیایی (inside geographical entity | I-geo) دنبال شود. اما انتقال به داخل نام یک سازمان (inside of an organization | I-org) از توکن‌هایی با دیگر برچسب‌ها دارای سختی زیادی است.

بررسی ویژگی‌های وضعیت

named entity recognition

مشاهدات

  1. 5.183603 B-tim word[-3]:day: مدل می‌آموزد که کلمه‌ای که در نزدیکی قرار داشته «day» بوده، بنابراین توکن احتمالا بخشی از شاخص زمانی است.
  2. 3.370614 B-per word.lower():president: مدل می‌آموزد که توکن «president» احتمالا در ابتدای نام یک فرد قرار دارد.
  3. -3.521244 O postag:NNP: مدل می‌آموزد که اسامی خاص معمولا موجودیت‌ها هستند.
  4. -3.087828 O word.isdigit(): ارقام، موجودیت‌های احتمالی هستند.
  5. -3.233526 O word.istitle(): کلمات TitleCase موجودیت‌های احتمالی هستند.

ELI5

ELI5 یک بسته پایتون است که امکان بررسی وزن‌های مدل‌های sklearn_crfsuite.CRF را می‌دهد.

بازبینی وزن‌های مدل

named entity recognition

named entity recognition

مشاهدات

  1. این موضوع که I-entity باید B-entity را دنبال کند دارای معنا است، مثلا I-geo در اینجا B-geo را، I-org هم B-org را و I-per نیز B-per را دنبال می‌کند.
  2. می‌توان مشاهده کرد که یک سازمان درست بعد از نام یک فرد بیاید (B-org -> I-per دارای وزن منفی بسیار بالایی است).
  3. مدل وزن‌های منفی بزرگ را برای انتقال غیر ممکن مانند O -> I-geo ،O -> I-org و O -> I-tim می‌آموزد.

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

named entity recognition

و یا صرفا برخی از ویژگی‌ها برای همه تگ‌ها را مورد بررسی قرار داد.

named entity recognition

کد کامل انجام این کار با استفاده از sklearn-crfsuite و ELI5 در گیت‌هاب (+) موجود است.

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

^^

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

برچسب ها :

نظر شما چیست؟

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