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

برای مثال:
آدولف بورن، طراح، کاریکاتوریست و نقاش در شهر بودجویس از جمهوری چک به دنیا آمد.

آدولف B-PERSON

بورن I-PERSON

،

کاریکاتوریست

و

نقاش

در

شهر

بودجویس B-LOCATION

از

جمهوری B-LOCATION

چک I-LOCATION

به

دنیا

آمد

.

در این پژوهش روش‌های تضحیص خودکار موجودیت‌های نام‌دار در متن معرفی شده و یکی از آن‌ها برای زبان فارسی پیاده‌سازی و آزمایش خواهد شد.

۱. مقدمه

بسم الله ا لرحمن الرحیم

شناسایی موجودیتهای نامدار در پردازش زبان طبیعی به عملیاتی گفته میشود که در طی آن کلیه ی اسامی خاص موجود در متن و متعلق به مقوله های معنایی مختلف،شناسایی و استخراج میگردند و تحت کلاس های از پیش تعریف شده ای مانند اسم افراد ،سازمان ها ،مکان ها و ...
دسته بندی می شوند. در واقع مساله تشخیص موجودیت های نامدار در متن عموما به دو زیر مساله تشخیص و دسته بندی موجودیت ها تقسیم می شود .اسامی خاصی که تشخیص داده میشوند و همچنین قالبی که برای دسته بندی آنها به کار میرود وابسته به
نوع کاربرد آن خواهد بود. در سامانه های تشخیص موجودیتهای اسمی بیشتر روی پیدا نمودن اسامی
اشخاص، مکانها و سازمانهایی که در یک متن معمولی خبری ذکر شده است تمرکز میشود.
هدف ما معرفی روش های تشخیص خودکار موجودیت های نامدار در متن و پیاده سازی یکی از آن روش ها برای زبان فارسی است.

۲. کارهای مرتبط

در زیر ویژگی هایی که در اغلب سیستم های تشخیص موجودیت های اسمی استفاده می شود را مرور می کنیم. این ویژگی ها را می توان به سه قسمت تقسیم کرد: 1- ویژگی های کلمه ای 2- ویژگی های فهرستی 3- ویژگی های سندی

1- ویژگی های کلمه ای

این ویژگی ها مربوط به نویسه های سازنده ی کلمه است و از روی شکل وظاهر خود کلمه استخراج می گردد . این ویژگی ها توصیف گر حالت کلمه ، نقش کلمه ، حالت عددی و مانند آن است. ویژگی های زیر از این دسته اند :(nadeau and sekine , 2007 (
ویژگی هایی که مربوط به بزرگ یا کوچک بودن حروف در کلمه است ، مانند : 1- شروع کلمه با حروف بزرگ 2- بزرگ بودن تمام حروف در کلمه 3- وجود حروف بزرگ در وسط کلمه مثل eBay
ویژگی های عددی کلمات مانند : الگوی اعداد به کار رفته(استفاده از 2 یا 4 عدد جهت نمایش تاریخ و مانند آن )
ویژگی های نویسه ی کلمات مانند : 1- ضمیر اول شخص 2- ضمیر ملکی 3- حروف یونانی
ویژگی های صرفی کلمات کانند : 1- پسوند 2- پیشوند 3-ریشه ی کلمات
و ...

2- ویژگی های فهرستی

یک سری دیگر از ویژگی هایی که برای کلمات یک جمله در سیستم های NER در نظر گرفته می شود ، ویژگی هاییست که از یک سری فهرست ها استخراج می گردد ؛ برای استخراج این ویژگی ها از فهرست هایی که شامل اسامی افراد ، مکان ها ، شهرها ، کشورها ، افراد و ... است استفاده می شود. وجود کلمه در هر یک از این فهرست ها ، نشان دهنده ی یکی از ویژگی های کلمه است . در بعضی موارد وجود یک کلمه در یک فهرست می تواند با اختمال طبقه ی آن کلمه را مشخص کند . ولی به دلید ابهام در نقش و جایگاه اسامی این امکان وجود دارد که اسمی در یک فهرست قرار داشته باشد ؛ ولی متعلق به طبقه ی آن فهرست نباشد. بزرگ بودن این فهرست ها باعث می شود تا ویژگی هایی با دقت بالاتری استخراج گردد؛ اما در بسیار ی از موارد ، محدودیت وجود دارد که نمی توان از فهرست هایی بزرگ استفاده کرد . به همین دلیل از یک سری روش ها در جستجو استفاده می شود تا فهرست ها بتوانند تعداد کلمات بیشتری پوشش دهند .(nadeau and sekine , 2007 (

3- ویژگی های سندی

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

  • وجود چند شکل از کلمه در سند : اگر یک کلمه در یک سند به چند شکل مختلف ظاهر شود ، مانند : boy و Boy آن گاه می توان نتیجه گرفت که شکل های دیگر کلمه مربوط به مسائل دیگری همچون شروع جمله است ، با استفاده از این نوع ویژگی می توان تا حدی از این ابهامات جلوگیری کرد .

  • ویژگی محلی : تعداد تکرار در متن یا پاراگراف ، موقعیت کلمه در متن یا پاراگراف

برای تشخیص موجودیت های نامدار چندین روش وجود دارد :

  • روش برمبنای قواعد :

در این روش سعی می شود قالب و شکل کلی موجودیت های اسمی را به صورت یک عبارت با قاعده نمایش داد تا سامانه اسامی خاص را بر مبنای این بارات تشخیص دهد.در واقع در این روش سیستم موجودیت های اسمی را به وسیله ی مولفه هایی که در ظاهر این عبارات ممکن است موجو باش تشخیص می دهد (ویژگی های کلمه ای که در قبل آورده شد. )
شکل ظاهری بعضی از موجودیتهای اسمی را میتوان به صورت یک عبارت باقاعده نمایش داد. برای مثال
نشانی ایمیل را میتوان به صورت عبارت باقاعده ی زیر نوشت

A-Za-z0-9)@([A-Za-z0-9]+)(([.-]?[a-zA-Z0-9]+)).([A-Za-z]{2,})

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

  • روش های مبتنی بر واژه نامه

در بسیاری از کاربردها، به نسبت ساده تر میباشد که یک لیست از موجودیتهای اسمی و نوع آنها تهیه شده و
موجودیتهای اسمی داخل متن با استفاده از این لیست تشخیص داده شود. برای مثال، اسامی مکانها در
فرهنگهای جغرافیایی که شامل میلیونها اسم مکان به همراه مشخصات جغرافیایی آن میباشد به عنوان یک
واژه نامه مناسب برای تشخیص اسامی مکانها قابل استفاده است.
در بعضی مواقع، تنها کافی است که به سادگی تمامی عبارات موجود در یک واژه نامه را که در متن ذکر شده اند
پیدا کرد. برای مثال نشریه نیویورک تایمز برای پیاده سازی صفحه سرفصلها ی خود از چنین روشی استفاده
مینماید. در این روش یک واژه نامه ی حاوی اسامی سرفصلها موجود است که به سادگی در هر متنی که یکی از
این اسامی یافت شود، این متن به سرفصل مربوطه ارجاع داده میشود. این رویکرد در بسیاری از موارد به درستی
عمل مینماید ولی در دو صورت با ابهام مواجه خواهد شد. یکی زمانی که واژه ی موجود در واژه نامه به صورت
کامل استفاده نشده باشد؛ مثلا اگر در واژه نامه کلمه ی "وزارت علوم، تحقیقات و فناوری" موجود باشد، این روش
قادر به تشخیص متنی که در آن تنها واژه ی "وزارت علوم" آورده شده است نخواهد بود. مورد دیگر ابهام در این
روش هم زمانی خواهد بود که یک واژه معانی متفاوتی داشته باشد و در واژه نامه به اشتباه به معنی دیگری مرتبط
شود. برای مثال ممکن است واژه ی "هما" در یک متن به عنوان اسم یک شخص استفاده شده باشد اما به اشتباه به
عنوان مخفف "هواپیمایی ملی ایران" تشخیص داده شود.

  • روش های آماری :

این روشها غالباً به عنوان روشهای اصلی جهت تشخیص اسامی خاص شناخته میشوند و سایر روشها به عنوان مکمل در کنار آن مورد استفاده قرار میگیرند.
خیلی از مسائل در پردازش زبان های طبیعی را میتوان به صورت مساله های پردازش طبیعی زبان بیان کرد، یعنی بیان احتمال وقوع حالت "الف" با محتوای "ب" که در مساله ما محتوا کلمات یا عبارات هستند .
در این روش ابتدا سامانه به وسیله ی پیکره ای از داده های آموزشی که به صورت دستی و به وسیله ی انسان
برچسب گذاری شده اند آموزش دیده، با یادگیری از طریق این داده ها به تشخیص خودکار اسامی خاص در متن
میپردازد، که در بخش ویژگی های سندی اشاره شد.
برای برچسبزنی داده ی آموزشی از روش برچسبزنی شروع-داخل- خارج استفاده میشود. در این روش، برای تشخیص موجودیتهای اسمی، کلمات متن را تک تک برچسبزنی مینماییم
به این صورت که همزمان با برچسبزنی هم متن را بر اساس کلمات قطعه بندی نموده و هم با برچسبزنی عبارات موجودیت اسمی را مشخص مینماییم.
برای این کار روش های مختلفی چون مدل پنهان مارکوف ،بیشینه بهم ریختگی ،نایو بیر و ...وجود دارد.

"سیستم شناسایی طبقه بندی اسامی فارسی "

در این سیستم یک متن ،به عنوان ورودی به سیستم ارائه می شود و اسامی به تفکیک طبقه ی مربوط به آن به عنوان خروجی سیستم به دست می آید . مراحل لازم جهت شناسایی و طبقه بندی اسامی یک متن عبارتند از :

1- یک متن به عنوان ورودی به سیستم ارائه می شود ، مانند جمله ی : " محمد جمعه به دانشگاه نرفت ."

2- با استفاده از یک نشان گذار ، کلمات در متن ورودی از هم دیگر جدا می شوند. (محمد/جمعه /به/ دانشگاه /نرفت)

3- با استفاده از برچسب زن دستوری نقش دستوری هر کلمه مشخص می شود(محمد/اسم| جمعه/اسم| به /حرف| دانشگاه/اسم| نرفت/فعل)

4- یا استفاده از برچسب دستوری کلمات ، اسامی شناسایی شده و از بقیه ی کلمات متن جدا می شوند .(محمد/جمعه/دانشگاه)

5-برای هر یک از اسامی بردار ویژگی لازم استخراج می شود.

6- با استفاده از یک دسته بند آماری ، اسامی در طبقات مربوطه طبقه بندی می شوند .

طبقه کننده های آماری :

-مدلهای پنهان مارکوف

مدلهای پنهان مارکوف یکی از قویترین ابزارها برای پردازش سیگنالها میباشند. انواع مختلف مدلهای پنهان
مارکوف علیرغم محدودیتهایی که دارند، هنوز پراستفاده ترین تکنیک در سیستمهای مدرن بازشناسی گفتار و
تشخیص متون هستند. مدل پنهان مارکوف، کل الگوی ورودی را به عنوان یک بردار ویژگی تکی مدل نمیکند،
بلکه رابطه بین بخشهای متوالی یک الگو را استخراج میکند، زیرا هر بخش نسبت به کل ورودی کوچکتر و
.( بنابراین مدلسازی آن ساده تر است (حاجی، 1384
یک مدل پنهان مارکوف را در واقع میتوان یک ماشین حالت محدود احتمالاتی به حساب آورد که هر حالت با
مدل در یک حالت است و با ،t یک تابع تصادفی مرتبط است. فرض میشود که در یک دوره ی گسسته ی از زمان
یک تابع تصادفی از آن حالت یک خروجی تولید میکند. بر مبنای احتمال انتقال حالت جاری، مدل پنهان مارکوف در زمان t+1 تغییر حالت میدهد. دنباله ی حالتهایی که مدل از آن میگذرد معمولا پنهان است، و تنها یک تابع احتمالاتی از آن آشکار است، که مشاهدات تولید شده به وسیله تابع تصادفی مربوط به حالتها است؛ به همین دلیل در نامگذاری این مدلها از صفت پنهان استفاده میشود. در واقع میتوان یک مدل پنهان مارکوف را یک فرآیند تصادفی به طور ناتمام مشاهده شده در نظر آورد. یک مدل پنهان مارکوف با عناصر زیر توصیف میشود:

1- N: تعداد حالتهای مدل

S = {s1,s2,…,sN}-2: مجموعهی حالتها

Π = {π i = P(si at t = 1)}-3: احتمالات حالت اولیه

A = {aij = P(sj at t+1 | si at t)}-4احتمالات تغییر حالت

M-5 :تعداد علائم قابل مشاهده (تولید شده)

V = {v1, v2, ..., vM}-6: مجموعه علائم قابل مشاهده

B = {bi(vk) = P(vk at t | si at t}-7احتمالات تولید علائم قابل مشاهده

Ot t -8: علامت مشاهده شده در زمان

9- T: طول دنباله مشاهدات

λ = (A, B, Π)-10: نماد خلاصهی برای مدل پنهان مارکوف

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

براساس ویژگی‌های ذاتی احتمال(به ویژه اشتراک احتمال) نایو بیز (به انگلیسی: Naive Bayes classifier) با دریافت تمرین اولیه نتایج خوبی ارایه خواهد کرد. تمرین دادن نایو بیز یک تمرین بانظارت (به انگلیسی: Supervised learning) است.

برای نمونه یک میوه ممکن است پرتغال باشد. اگر نارنجی و کروی با شعاع حدود ده سانتی متر باشد. اگر این احتمالات به درستی به همدیگر وابسته باشند نایو بیز در تخشیص اینکه این میوه پرتغال است یا نه بدرستی عمل خواهد کرد.

برنامه‌های کاربردی بسیاری هستند که پارامترهای نایو بیز را تخمین می‌زنند، بنابر این افراد بدون سروکار داشتن با تئوری بیز می‌توانند از این امکان به منظور حل مسایل مورد نظر بهره ببرند. با وجود مسایل طراحی و پیش فرض‌هایی که در خصوص روش بیز وجود دارد، این روش برای طبقه بندی کردن بیشتر مسایل در جهان واقعی، مناسب است.

-میدان تصادفی شرطی (CRF)

این مدل بیشتر برای تشخیص الگو (pattern recognition)و آموزش ماشین (machine learning) به کار گزفته میشود . به خصوص در کارهایی چون برچسب زنی (labelling ) و پارس کردن (parsing) در نتیجه برای مساله ما که از دسته ی مسائل برچسب زنیست بسیار مناسب می باشد . ایده ی کلی آن برچسب زنی با توجه به برچسبهای همسایه است . مثلا در مساله ما برای انتخاب برچسب یک توکن برچسبهای توکن های قبلی را نیز مد نظرر قرار می دهیم.

راه حل ما استفاده از sequential tagger های کتابخانه nltk هستند که برمبنای الگوریتم مدل های پنهان مارکوف کار می کند. و در قسمت آزمایش ها معرفی خواهد شد.

۳. آزمایش‌ها

در واقع مساله ما به صورت خلاصه این است که هر متنی را دریافت کنیم و به صورت BIO برچسب بزنیم. برچسب زنی BIO به این شکل است که هر کلمه در متن دارای برچسبیست . برچسب B به معنای شروع حوزه ی مورد نظر شماست ، I یعنی کلمه داخل حوزه مورد نظر قرار دارد و
O یعنی کلمه داخل حوزه مورد نظر نیست. حوزه مورد نظر مساله ما موجودیت های نامدار است . در این مساله علاوه بر چسبهای Bو I مشخص میکنیم که این کلمه از کدام دسته شخص (PER) ، مکان (LOC) و یا سازمان (ORG)است . (به عنوان مثال مجلس/B-ORG) .

بخشی از داده های فارسی که آموزش توسط آن انجام شده ، هر کلمه به همراه برچسب آن در یک خط قرار دارد:

اولین O
سیاره O
خارج O
از O
منظومه B-LOC
شمسی I-LOC
دیده O
شد O

هر متنی که به برنامه می دهیم نیز باید به همین شکل برچسب بخورد .

برای این کار ما از کتابخانهNLTKپایتون استفاده کردیم . این کتابخانه خودش شامل یکسری برچسب زن است . ما برای کار خود ازSequential Tagger های این کتابخانه استفاده کردیم . ما توابع Ngram این برچسب زن را توسط داده های فارسی که به صورت دستی برچسب خورده بودند آموزش دادیم. این داده ها شامل 201508 کلمه فارسی برچسب خورده بودند.که برچسب زن توسط 90% از آنها آموزش دید و 10% باقی مانده هم برای ارزیابی برچسب زن استفاده شدند.
برچسب زن ساخته شده از سه برچسب زن UnigramTagger , BigramTagger, TrigramTagger استفاده می کند . نحوه ی کار یک NgramTagger به این صورت است که در وقت آموزش دیدن هر توکن را به همراه n-1 برچسب قبلیش نگهداری می کند سپس در هنگام برچسب زدن برای هر توکن با بررسی برچسب های قبلیش برچسب مناسب را به آن اختصاص می دهد. بدیهیست UnigramTagger تنها توکن را نگهداری می کند وهنگام برچسب زدن اگر توکنی دید که در هنگام آموزش دیده بود ، همان برچسب را به آن اختصاص می دهد. وگرنه برچسب NONE را به آن می دهد. برای بهبود کارایی و جلوگیری از توکن های NONE از برچسب زن DefaultTagger استفاده کردیم . نحوه کار این برچسب زن به این صورت است که به تمام توکنها یک برچسب واحد اختصاص می دهد که در مساله ما برچسب O این برچسب واحد است. همین کار نتیجه را از 89% به 95% رساند. برنامه فایل داده های فارسی را دریافت می کند ، داده های آزمایشی و آموزشی را جدا می کند ، توسط دا ده های آموزشی آموزش می بیند و سپس هر متنی که به آن داده شود را برچسب زنی می کند و در فایل دیگری می نویسد.

برای ارزیابی کار از تابع nltk خود پایتون استفاده شد. نحوه کار این تابع به این صورت است که یک متن برچسب خورده را دریافت می کند ، برچسبهای آن را حذف می کند و خودش دوباره آن را توسط برچسب زن خودمان برچسب می زند سپس با مقایسه این دو امتیاز دقت برچسب زن به دست می آید.که درباره راه حل پیاده سازی شده ما 95% بود . یعنی متن برچسب خورده توسط سیستم 95% مشابه داده ی برچسب خورده اولیه بود.

تابع برجسب زنی که ساختیم ابتدا متن را توسط DefaultTagger برچسب می زند سپس از UnigramTagger استفاده می کند و سپس نتایج را به ترتیب توسط BigramTagger و TrigramTagger بهبود می بخشد.
ترتیب های مختلفی را برای این سه NgramTagger امتحان کردیم که ترتیب Unigram, Biagram , Trigram از همه بهتر بود گرچه اختلاف همه در حد نهایتا 1% بود.

لینک برنامه :tagger

۴. کارهای آینده

۵. مراجع

۶. پیوندهای مفید

تایید شده

نتایج آزمایش ها نشان می دهد که پیشرفت خوبی داشته، فقط قسمت اول پروژه مشکلات نگارشی و جا به جایی خط ها وجود دارد که باید اصلاح شود.
بهتر است برای کد پیاده سازی شده هم یک فایل read me اضافه شود و توضیحات کد در آن آورده شود.

رد شده
تایید شده

با سلام
پروژه ی خوبی بود ویژگی های تشخیص موجودیت در متن خوب توضیح داده شده بود.
نکاتی که به نظر من میرسه:
تیتر ها را اگر بزرگتر از متن می نوشتید خیلی بهتر بود.
کاش کاربرد پروژتون رو هم ذکر می کردید اینکه تشخیص این موجودیت ها چه کاربرد هایی میتونه داشته باشه؟
سعی کنید مرتب تر بنویسید.
بهتر بود کد راه های دیگری که برای تگ کردن از آن ها استفاده کردید را میگذاشتید که بشود مقایسه انجام داد.
موفق باشید.

تایید شده

روش های مختلف برای انجام پروژه به خوبی مطرح شده بود ولی این قسمت به شدت مشکل نگارشی داشت و اصلا خوب نمایش داده نشده بود
انگار که از جایی کپی شده اند و هیچ ادیتی روشون انجام نشده
قسمت آزمایش ها که مربوط به پیاده سازی این فاز است خوب بود ولی اصلا به جزییات پرداخته نشده بود و اساس کار الگوریتم و توابع لایبرری به کار رفته واضح نبود
روی قسمت برنامه نویسی ( لینک کد ) بسیار کم کار شده بود در صورتی که در این فاز انتظار میرفت قسمت عمده ی کار پیاده سازی انجام شود
من کد رو مطالعه کردم ولی اصلا متوجه نحوه ی کار آن نشدم چون داکیومنشیون بسیار ضعیف بود و کامنت های مفیدی در کد قرار داده نشده بود
به طور مثال در کد تابعی هست که نام فایل ورودی را میگیرد ولی هیچ جا ذکر نشده بود که فرمت فایل ورودی چه باید باشد یا خروجی داده شده چه چیز را مشخص میکند
به امید دقت بیشتر شما در فاز بعدی
موفق باشید

تایید شده

با عرض سلام و خسته نباشید.
پروژه تون تقریباً کامل و جامع به نظر میرسه. اما چند تا اشکال کوچک داره:

  1. متنی پروژه به هم ریخته است و خیلی از خطوط نیمه کاره است.

  2. بعضی از کلمات اشتباهاً به هم چسبیده اند.

  3. بخش آزمایش ها رو بهتر بود که بیشتر توضیح می دادید.مثلاً بهتر بود می گفتید که چرا با بعضی از تغییراتی که نام بردید, نتیجه بهبود یافته است.

محسن ایمانی

آزمایش برچسب‌زن‌های Sequential برای این فاز از پروژه شما کافی و مناسب بود.
اما به نظرم بهتر بود که با یک جدول به تفکیک precision و recall را برای هر کدام از برچسب‌زن ها به تفکیک و روی داده‌های فارسی و انگلیسی نشان می‌دادید تا کاربر بتواند با دیدن این جدول میزان دقت روش‌های مختلف و همچنین میزان اختلاف بین این روش‌ها در فارسی و انگلیسی را مشاهده کند.

همچنین استفاده از پیش‌پردازش مثل نرمال سازی و یا ریشه یابی شاید کار شما را در این زمینه ارتقا می‌داد که بهتر بود این نکته را هم آزمایش کرده و نتایج را گزارش می‌دادید.

برای فاز بعدی پروژه می‌توانید برچسب زن های Sequential دیگر از قبیل brill و یا TNT را امتحان نمایید. اما پیشنهاد بنده این است که به سمت آموزش یک برچسب زن با استفاده از مدل‌های Maximum Entropy و یا CRF بروید.

همانطور که دوستان اشاره کردند هم بزرگترین نقطه ضعف پروژه شما نامرتب بودن متن پژوهش‌نامه است که به تصحیح آن توجه داشته باشید.