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

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

آدولف 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 تغییر حالت میدهد. دنباله ی حالتهایی که مدل از آن میگذرد معمولا پنهان است، و تنها یک تابع احتمالاتی از آن آشکار است، که مشاهدات تولید شده به وسیله تابع تصادفی مربوط به حالتها است؛ به همین دلیل در نامگذاری این مدلها از صفت پنهان استفاده میشود. در واقع میتوان یک مدل پنهان مارکوف را یک فرآیند تصادفی به طور ناتمام مشاهده شده در نظر آورد.

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

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

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

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

این مدل بیشتر برای تشخیص الگو (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پایتون استفاده کردیم . برای نصب این کتابخانه به ابن لینکرجوع کنید .این کتابخانه خودش شامل یکسری برچسب زن(nltk.tag pakages) است . ما در ابتدا برای کار خود ازSequential Tagger های این کتابخانه استفاده کردیم . ما توابع Ngram این برچسب زن را توسط داده های فارسی که به صورت دستی برچسب خورده بودند آموزش دادیم. (طبق مثال ذکر شده) این داده ها شامل 201508 کلمه فارسی برچسب خورده بودند.که برچسب زن توسط 90% از آنها آموزش دید و 10% باقی مانده هم برای ارزیابی برچسب زن استفاده شدند.
برچسب زن ساخته شده از سه برچسب زن UnigramTagger , BigramTagger, TrigramTagger به صورت ترکیبی استفاده می کند . نحوه ی کار یک NgramTagger به این صورت است که در وقت آموزش دیدن هر توکن را به همراه n-1 برچسب قبلیش نگهداری می کند سپس در هنگام برچسب زدن برای هر توکن با بررسی برچسب های قبلیش برچسب مناسب را به آن اختصاص می دهد. بدیهیست UnigramTagger تنها توکن را نگهداری می کند وهنگام برچسب زدن اگر توکنی دید که در هنگام آموزش دیده بود ، همان برچسب را به آن اختصاص می دهد. وگرنه برچسب NONE را به آن می دهد. برای بهبود کارایی و جلوگیری از توکن های NONE از برچسب زن DefaultTagger استفاده کردیم . نحوه کار این برچسب زن به این صورت است که بدون هیچ بررسی ای به تمام توکنها یک برچسب واحد اختصاص می دهد که در مساله ما برچسب O این برچسب واحد است. گرچه نحوه کار default tagger بسیار ساده است اما همین کار نتیجه را از 89% به 95% رساند. چرا که عموما اکثر کلمات یک متن موجودیت نامدار نیستند و برچسب O دارند.

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

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

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

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

بک نمونه از قوانین استخراج شده از داده آموزشی ما 'I_PERS' ا: O -> B-PERS if the tag of the following word is
این قانون بیان می دارد که هرجا tag بعدی ما I-PERS بود و tag فعلی O بود ، این tag به B-PERS تبدیل شود.

برای هر یک از این قوانین 4 مقدار score , fixed , broken , other محاسبه می شود .

fixed: برچسب نادرست به درستی اصلاح شده .
broken: برچسب درست به اشتباه به نادرست تبدیل شده.
other: برچسب نادرست به درستی اصلاح نشده و به برچسب نادرست دیگری تبدیل شده.
score: امتیاز هر قانون است که از تفاضل دو مقدار اول به دست می آید.

این مقادیر برای هر یک از قوانین محاسبه می شوند و در یک جدول نمایش داده می شوند .
به صورت زیر:

تصویر باز شکاری

brill tagger قوانین بسیار زیادی را تولید می کند(در حدود 22000) اما ما به تمام این قوانین احتیاج نداریم . استفاده از همه ی این قوانین هزینه بر است و حتی باعث بدتر شدن نتایج می شود چرا که بسیاری از این قوانین به درستی عمل نمی کنند . و نتیجه گیری هایی که برچسب زن انجام داده غلط بوده و منجر به تولید قوانین اشتباه می شود.پس برای این تابع ورودی ای به نام حداکثر قوانی (max_rules)تعریف می کنیم که حداکثر قوانین لازم را مشخص کنیم. زیاد کردن این مقدار باعث صرف هزینه زیاد و در بسیاری از موارد به همان دلیلی که قبلا ذکر شد منجر به نتایج غلط خواهد شد و لزوما زیاد کردن آن موجب بهبود نتایج نیست . ما در برچسب زن خود از 10 قانون استفده کردیم.(با تعداد قوانین 100و 50 و 20 هم کار کردم ، اما نتایج بهبود نیافتند)

ما با استفاده از این برچسب زن نتایج را از 95.41% به 95.45% رساندیم . بهبود نتیجه اصلا قابل توجه نیست . بنده برای توجیه این نتیجه این فرضیه را مطرح کردم که چون داده های آموزشی و آزمایشی ما هر دو از یک سری داده ی واحد مشتق شده بودند. پس قالبشان بسیار نزدیک هم بود و اکثر کلمات داده ی آزمایشی در داده ی آموزشی ما دیده شده بودند. پس sequential tagger ما به اندازه کافی از کارایی لازم برای این داده ی آزمایشی برخوردار بود. یکی از نکات مطرح در برچسب زنی همین است که داده ی آموزشی ما باید با داده ای که می خواهیم از آن در برنامه مان استفاده کنیم مطابقت داشته باشد.در نتیجه از این برچسب زن برای برنامه نهایی استفاده نکردم چرا که زمان زیادی هم میبرد اما لینک برنامه ای که از این برچسب زن استفاده کرده را در اینجا قرار دادم : brill tagger

برای بهبود نتایج بازهم از برچسب زن دیگری استفاده می کنیم . برچسب زن RegExpTagger . این برچسب زن براساس قوانین پیشوندها و پسوندها عمل می کند . مزیت این برچسب زن این است که این قوانین را خودمان می توانیم تعریف کنیم. به عنوان مثال در قانون (r'.*ستان$', 'B-LOC') تعریف می کنیم که هر کلمه ای پسوند "ستان " داشته باشد به عنوان "B-LOC " تعریف می شود.
پس از استفاده از این برچسب زن به این نتیجه رسیدم که برای زبان فارسی خیلی کارآمد نیست . چرا که کلمات زبان فارسی عموما ساختار یافته و قانون مند نیستند برخلاف زبان انگلیسی که در آن اکثر کلمات از ریشه شان طبق یک سری قوانین واحد ساخته می شوند. در نتیجه در زبان فارسی تعریف الگوهایی براساس پیشوندها و پسوندها کار مشکلیست . همچنین بخاطر سرهم نوشته شدن کلمات در زبان فارسی خیلی از پسوند ها به صورت جدا از کلمه نوشته می شوند . و گرچه کلمه یک کلمه واحد است اما سیستم آن را به عنوان دو کلمه جدا می بیند. مثل کلمه "حسین زاده "، اگرچه این کلمه از نوع اسم خاص است اما هریک از قسمتهای حسین و زاده به عنوان یک کلمه جداگانه در نظر گرفته می شون.ابتدا این برچسب زن را در آخر و پس از اینکه برچسب زن های دیگر کارشان را انجام می دادند استفاده کردیم اما نتیجه بهبودی نیات بنابراین آن را پس از default tagger قراردادیم و با استفاده از این روش و تعریف قوانین

(r'.*ستان$', 'B-LOC'),
(r'.*آباد$', 'B-LOC'),
(r'.*ی$', 'B-PERS'),
(r'.*پور$', 'B-PERS'),
(r'.*نژاد$', 'B-PERS'),
(r'.*زاده$', 'B-PERS'),

، نتیجه ر از 95.41 به 95.44 تغییردادیم. لینک برنامه با regexp

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

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

از دیگر راهکارهایی که برای بهبود نتایج به ذهنم رسید حذف تمامی کلمه های غیر اسم در اول برنامه است. برای این روش باید ابتدا تمامی کلمات تگ های نحوی بخورند تا نقش شان در جمله معلوم شود و سپس هر کلمه ای غیر از اسامی حذف شود . از آنجایی که موجودیت های نامدار تنها شامل اسامی می شوند با این کار دقت سیستم بالاتر می رود و زمان هم کاهش می یابد.
داده هایی که من از آنها استفاده میکردم خودشان برچسب نحوی خورده بودند به شکل :
گزارش N_SING O ، یعنی علاوه بر برچسب های BIO برچسب اجزای سخن هم داشتند.اما در صورتی که داده حاوی این گونه برچسب گذاری نبود به سادگی و با استفاده از کتابخانه هضم پایتون می توان این برچسب گذاری را انجام داد ، نمونه ای از برچسب گذاری با هضم :('ما', 'PR'), ('بسیار', 'ADV'), ('کتاب', 'N'), ('می‌خوانیم', 'V'). و پس از برچسب زنی تمام کلماتی که شامل تگی غیر از N هستند را حذف نمود.[ لینک برنامه قبلی با حذف کلمات غیر اسم]

در ادامه تحقیقاتم روی روش های برچسب زنی به استفاده از دو کتابخانه دیگر nltk به نام crf و hmm رسیدم.که توضیح این دو روش قبلا در روش های آماری ذکر شده بود.

۶. مراجع

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

رد شده

در این فاز زحمات بیشتری نسبت به مراحل قبل کشیده اند و پروژه خوبی است.
کامنت گذاری در کد هم بخوبی انجام شد ولی من موفق نشدم که اجرا کنم که مشکل از سیستم من است.
من برای این فاز نمره کامل می دهم ولی در مجموع کمتر!!!
موفق باشید

تایید شده

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

رد شده

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

رد شده

تقریبا از موضوع پروژه ی شما شناختی نداشتم ، امّا بعد از خواندن مطالب شما نسبت به موضوع دیدی پیدا کردم ، پس در انتقال اطلاعات موفق بودید .
از منابع متنوعی استفاده کردید .
در قسمت آزمایش و ارزیابی پیشنهاد من استفاده از جدول برای نمایش اطلاعات است (البته یه عکس آپلود کردید که برای من نمایش داده نشده ) .
اشکالات ویرایشی داشتید که یک قسمت آن مربوط به سایت بوته می باشد.

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

  • توضیحات مربوط به قسمت "کارهای مرتبط" کامل است و روشهای مختلف به خوبی توضیح داده شده اند.

  • توضیحات مربوط به کد پیاده سازی شده خیلی خوب بود و قرار دادن لینک کتابخانه های مورد نیاز کار بسیار خوبی بود.

  • بهتر بود حداقل یک مثال از داده آزمایشی قرار میدادید تا نتیجه خروجی بهتر دیده میشد.

  • عکس قرار داده شده باز نمیشود.

  • بهتر بود برای نمونه هایی که آزمایش انجام دادید جدولی درست میکردید و مثلا زمان اجرای برنامه، درصد درستی و میانگین آن را برای هر نمونه در آن جدول وارد میکردید.

  • قسمت بهبود نتایج توضیحات خوب و کامل است.

رد شده

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

رد شده

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

تایید شده

سلام
من با تگ گذار استنفورد و یک پیکره فارسی از Named Entity ها به دقت 80 درصد برای فارسی رسیدم. آیا این 95 درصد دقت شما برای متن فارسیه و درصد پیدا شدن Named Entity ها؟! متاسفانه نتونستم کد های شما رو ران کنم چون توضیحی در مورد نحوه ران شدن و شکل ورودی ها نداده بودید.

محسن ایمانی

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

  • می‌توانستید از مدل‌های Maximum Entropy و یا CRF برای بهبود نتایجتون استفاده کنید. ضمنا جا داشت که روی قواعد RegexpTagger بیشتر کار کنید و با استفاده از قواعد متنوع تر نتایج را بهبود بدهید.

  • بهتر بود نمونه‌هایی که سامانه اشتباه نادرست داده است را هم به عنوان مثال آورده و سعی کنید دلیل این که تشخیص اشتباه داده است را بررسی کنید.