۱. 0. تعریف کوتاه مسئله

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

۲. 1. مقدمه

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

۳. 2. کارهای مرتبط

الگوریتم پورتر (porter)
اکثر کلماتی که ما در زبان استفاده میکنیم مشتق کلماتی معمولا 3 حرفی به نام ریشه آن کلمه هستند. اگر کمی بازتر به این مسئله نگاه کنیم متوجه میشویم که بسیاری از کلمات را میتوان در یک مجموعه معنایی قرار داد. مثلا کلمات "همسایه" ، "همسایگی" ، "همسایگان" و ... همه تقریبا یک مفهوم را به شنونده منتقل میکنند و از آنجا که بررسی تک تک کلمات زبان کاری بسیار طولانی و درواقع ناممکن است، پس ما باید الگوریتمی داشته باشیم که تا حدی بتواند این کلمات را در یک قالب قرار دهد. الگوریتمی که کلمات زبان انگلیسی را stem میکند و ریشه آنها را برمیگرداند الگوریتم porter است. نمونه ای از کار الگوریتم porter در زیر نشان داده شده است.


بد نیست نگاهی به متون نوشته شده درمورد ریشه یاب های فارسی بیندازیم. ریشه یاب فارسی شبیه همان الگوریتم porter است. هر دوی آنها بر اساس ریخت شناسی کلمات و در نتیجه بر تکیه بر پیشوند کلمات پایه گذاری شده اند. البته به دلیل تفاوتهای زبان فارسی و انگلیسی تفاوتهایی در ریشه یاب‌های آنها وجود دارد. مثلا اینکه در زبان فارسی مصوتها نوشته نمیشوند اماتلفظ میشوند. نکته دیگری که وجود دارد در زبان فارسی حداقلی برای تعداد حروف ریشه یک کلمه درنظر گرفته شده است (حداقل 3 حرف). [1] [نظر نویسنده: البته این نظریه در برخی موارد میتواند اشتباه باشد. مثلا ریشه کلمه‌ی "روان" کلمه‌ی "رو" است که 2 حرف دارد.] این هم بخشی از DFA مربوط به ریشه یابی کلمات فارسی
DFA for Farsi Stemmer

ترتیب بندی کلمات با n-Gram
ترتیب کلمات نقش مهمی را در ساختار جمله بازی میکند. [2] n-Gramها نمایش آماری کلمات در یک دیتاست هستند به طوریکه درصد احتمال آمدن کلمه‌ی nام را بر حسب n-1 کلمه‌ی قبلی تعیین میکند. تحقیقات و آزمایشات بر روی n-Grams نشان داده هنگامی که n برابر 3 باشد الگوریتم در حالت بهینه خود قرار میگیرد. [3]

پیش بینی با روش Multinomial Naive Bayes
این روش از همان قانون بیز معروف الهام گرفته شده که احتمال آمدن کلمه ای در جمله را بیان میکند[4]:

P(T|G_i) = \frac {P(G_i)P(T|G_i)}{P(T)}

روش (TF (Term Frequency و (IDF (Invert Document Frequency نیز دو روشی هستند که میتوان به کمک آنها به تعداد کلمات پرتکرار در اسناد و تعداد کلمات پرتکرار در یک سند و یک سری اطلاعات دیگر دست یافت. تکیه بر این امر و این اطلاعات آماری ممکن است ما را به پاسخ صحیح نزدیک کند اما قطعا جواب مسئله ما نخواهد بود. برای بهبود پیش بینی انجام شده باید از سیستم های دانش لغوی و معنایی کلمات یک زبان بهره جوییم.[5]
این هم فلوچارت یک الگوریتم دیگر[6] که دیدنش خالی از لطف نیست:

فلوچارت

طی تحقیقات و جستجوهایی که انجام شد، بهترین و نزدیک ترین پروژه به موضوع پروژه من وب سایتی به نام phraseup با آدرس www.phraseup.com میباشد. همانطور که در ادامه تصاویری از این سایت مشاهده میکنید تحت یک textbox جمله ای از کاربر گرفته میشود که حداقل حاوی 2 کلمه مشخص شده است. سپس با گذاشتن علامت ستاره (*) به جای کلمات جاافتاده تمامی پیشنهادهای سایت برای پرکردن جای خالی به کاربر نشان داده میشود.[6]
هدف اصلی این سایت همانطور که در توضیحاتش گفته شده کمک به افرادیست که کلمه ای به اصطلاح "نوک زبانشان است" اما آن را فراموش کرده اند. همچنین برای کسانی که میخواهند انگلیسی را به عنوان زبان دوم خودشان (ESL) انتخاب کنند میتواند مفید باشد.
نمونه ای از حدس کلمه جاافتاده در سایت مذکور

نمونه ای دیگر

۴. 3. آزمایش ها

در فازهای بعدی تکمیل خواهد شد...

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

در فازهای بعدی تکمیل خواهد شد...

۶. 5. مراجع

[1] Kazem Taghva, Russel Beckley, Mohammad Sadeh; "A Stemming Algorithm for the Farsi Language"; Iformation Science Research Institute; Unversity of Nevada; Las Vegas; 2003
[2] Richard G.Freedman and Jingyi Guo; University of Massachusetts Amherst
William H.Turkett, Jr. and V.Paul Pauca; wake forest university
[3] Lesher, Moulton and Higginbotham; 1999
[4] Kevyn Collins-Thompson and Jamie Callen; "A Language Modeling Approach to Predicting Reading Difficulty"; Language Technologies Institute; Carnegie Mellon University 2001
[5] Masood Ghayoomi, Saeedeh Momtazi; "An OverView on the Existing Language Models for Prediction System as Writing Assistant Tools; Stanford University
[6] Masood Ghayoomi, Seyyed Mostafa Assi; "Word Prediction in a Running Text: A Statistical Language Modeling for the Persian Language" ; institute for Humanities and Cultural Studies, Tehran
[7] Website: www.phraseup.com
[8] Ciprian Chelba,Tomas Mikolov, Mike Schuster, Qi Ge, Thorsten Brants, Phillipp Koehn, Tony Robinson; "One billion Word Benchmark for Measuring Progress in Statistical Language Modeling"; "GOOGLE" ; University of Edinburgh

محسن ایمانی

کار شما در این فاز در کل قابل قبول است. اما نقاط ضعفی هم دارد که باید برای فازهای آینده آن‌ها را مرتفع سازید:

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

  • مراجع شما مقداری قدیمی می‌باشد، همچنین مراجع را اصلا درست ارجاع ندادید. مثلا ارجاع دوم شما اصلا نام ندارد.

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

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

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