۱. مقدمه

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


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

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

نمونه ای از تشخیص زبان ورودی کیبورد توسط سایت گوگل

از جمله کارهای مرتبط دیگر می توان به Ninja Keyboard و Key Switcher اشاره کرد.این نرم افزار ها که بر روی ویندوز نصب می شوند، کلمات ورودی کاربر در برنامه های مختلف رو کنترل کرده و اگر کاربر فراموش کرده باشد که حالت صفحه کلید خود را تعویض کند، به صورت خودکار این کار را برای کاربر انجام می دهند.
اما دونکته قابل توجه وجود دارد : اولا اینکه این نرم افزارها از زبان فارسی پشتیبانی نمی کنند و به تعداد کمی از زبان ها محدود می شوند. ثانیا روش کار خود را برای پیاده سازی پروژه توضیح نداده اند و مشخص نیست که از چه روشی برای انجام پروژه ی شان استفاده کرده اند.

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


۳. حل مسئله

با توجه به اینکه مسائلی که به زبان طبیعی انسان و یا نوشتار مربوط هستند عموما با Language Modeling حل می شوند، به نظر می رسد برای حل این مسئله نیز باید از تکنیک های Language Modeling بهره گرفت. حال به تعریف مختصری از این عبارت می پردازیم 1 :
Natural Language Model:
به زبانی می گویند که بین انسان ها رایج است و انسان ها می توانند از آن برای ارتباط با یکدیگر به صورت های نوشتن،‌ حرف زدن، خواندن و ... استفاده کنند. وقتی می گوییم مدل سازی زبان طبیعی، یعنی بیاییم و روابط و قواعد زبان را به طور هدفمند،‌ ساده کنیم تا به ابزاری برسیم که بتوان از آن برای بررسی زبان و یا استفاده یا حتی تولید آن استفاده کرد. بسیاری از این مدل ها از یک پس زمینه ریاضی برخوردار هستند،‌مانند گراف، احتمالات و ... .
برای کسب اطلاعات بیشتر در این زمینه می توانید به اینجا یا اینجا مراجعه کنید.

یکی از مدل هایی که مبتنی بر زبان های طبیعی می باشد و می توان در این پروژه از آن استفاده کرد مدل n-gram 2 می باشد :
در این مدل، از آمار کلاسیک و احتمال بهره گرفته شده است. فرض کنید که یک سری اشیا یا نشانه ها و یا هر چیز دیگری داشته باشیم. هر کدام از این ها را به صورت یک رأس در گراف تصور کنید که می تواند به رأس دیگری یال جهت دار داشته باشد. این یال جهت دار، نشان دهنده یک نوع رابطه است که با توجه به مورد دلخواه ما می تواند معانی متفاوتی داشته باشد. مثلاً در مورد زبان، می تواند توالی دو کلمه باشد (اگر کلمه ای بعد از کلمه دیگری بیاید، یک یال از اولی به دومی وجود دارد). به یک توالی n تایی از این رأس ها، n-gram می گوییم (توالی های 3gram، 2gram و ... داریم). در این مدل، یک مجموعه داده های آماری بسیار بزرگ نیاز داریم که هر کدام مجموعه ای از این نشانه ها به همراه روابط بین آن ها است. برای مثال، در مورد یک زبان خاص، یک سری متن در آن زبان می باشد.
روابطی در این مدل تعریف می شود که می توان با استفاده از آن، درستی یک توالی خواص از این نشانه ها را بررسی کرد.
حال به توضیح مختصری در مورد روابط این مدل می پردازیم :
فرض کنید می خواهیم درستی عبارت

را بررسی کنیم. در این مدل، احتمال درستی به صورت یک عدد تعیین می شود که هرچه داده های آماری ما بیشتر باشد، نتیجه دقیق تر است. عبارت بالا را به اجزای زیر تقسیم می کنیم و تعداد تکرار هر کدام را در داده های آماری پیدا می کنیم :
اجزای عبارت
حال احتمال های 3gram ، 2gram و ... به صورت زیر تعریف می شوند :
توضیح تصویر
هر کدام از عبارت های بالا یعنی احتمال آمدن آخرین حرف مورد نظر بعد از حروف قبلی که مقدار آن برابر است با :
احتمال درستی یک عبارت
در عبارت بالا، تابع C یعنی تعداد تکرار توالی مورد نظر در داده های آماری.
در حالت کلی، احتمال درستی عبارت بالا در مدل n-gram به صورت رابطه زیر است :
حالت کلی احتمال درستی یک عبارت
در این جا، تنها یک مشکل باقی می ماند و آن هم این است که اگر تنها یکی از این احتمال ها صفر شود، احتمال کل صفر خواهد شد. در حالی که می دانیم داده های آماری ما محدودیت دارند و ممکن است بالاخره یکی از توالی ها، مخصوصاً اگر تعداد آن زیاد باشد، در داده ها وجود نداشته باشد. راه حل این است که به هر کدام، یک مقدار ثابت (مثلاً 1) اضافه کنیم.

برای آشنایی بیشتر با این مدل می توانید به اینجا مراجعه کنید.

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

۴. آزمایش ها

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


۵. منابع و مراجع

  • Third international joint on conference on Natural Language Processing , January 2008

  • Natural Language Processing , Raymond J. Mooney


  1. A general language model for information retrieval , Fei Song and W.Bruce Croft

  2. All our N-gram are belong to you , Alex Franz and Thorsten Brants

محمد عبدوس

با عرض سلام و آرزوی توفیق روز افزون. از زحماتی که در این فاز پروژه انجام داده اید تشکر میکنم. نکاتی را که باید در این فاز رعایت میکردید در زیر آورده شده است:
1- مراجعی را که گذاشته اید کامل نیست(قالب مرجع را ندارد مثلا سال، ژورنال و ...) و 2 موردی را که گذاشته بودید در مورد ngram , language model بود و اینکه از اینها باید به چه نحوی در پروژه استفاده شود صحبتی صورت نگرفته بود. بهتر بود مقالاتی را که در زمینه تشخیص زبان است مطالعه میکردید.
2- در مورد ابزار تشخیص زبان گوگل خیلی صحبت نکرده بودید و در مورد سایر ابزارها اینکه مشکلات این ابزارها چیست حرفی زده نشده بود(غیر از مشکل پشتیبانی نکردن از زبان فارسی).
3- روش انجام کار مربوط به مقاله ای میشد که عنوان آن مقاله مربوط به بازیابی اطلاعات میشد. بهتر بود مقالات بیشتری را مطالعه میکردید و روش انجام آنها را نیز بررسی میکردید.
4- بهتر بود برای توضیح ngram model اگر مطلب را از جایی برداشت کرده اید لینک آن را هم قرار میدادید(مثلا از اینجا http://ce.sharif.edu/~h_forghani/%D9%85%D8%AF%D9%84%20%D9%87%D8%A7%DB%8C%20%D8%B2%D8%A8%D8%A7%D9%86%20%D8%B7%D8%A8%DB%8C%D8%B9%DB%8C.htm)
5- در مورد چالشهایی که برای این کار وجود دارد صحبتی نکرده اید. این چالشها میتوانند چالشهای مربوط به زبان فارسی باشند(مثلا چسبیده بودن حروف، چند نوشتاری بعضی کلمات مانند اتاق یا اطاق و ...) یا چالشهای داده و ...
6- توضیحی در مورد چگونگی استفاده از داده آموزش نداده اید. اینکه آیا برای این کار نیاز به داده آموزش است یا خیر و اگر است چطور باید تهیه شود
از توجهتون ممنونم