تشخیص زبان متن

تغییرات پروژه از ابتدا تا تاریخ 1396/08/29
در این پروژه الگوریتمی را پیاده‌سازی می‌کنیم که قادر به تشخیص توئیت‌های به زبان انگلیسی  از بین مجموعه توئیت‌ها به زبان‌های مختلف باشد.

# مقدمه

آیا اگر یک جمله یا جملاتی داشته‌باشیم، می توانیم به سادگی زبان آن را تخشیص دهیم؟ آیا اگر یک زبان را تا حد خوبی بلد نباشیم و توانایی مکالمه یا حتی فهم آن را نداشته‌باشیم می‌توانیم جملات آن زبان را از جملات زبان مشابهی تشخیص دهیم؟ واقعیت این است که تشخیص  زبان یک عبارت در زبانی خاص احتیاج به فهم آن زبان ندارد(بلکه می‌توان آن را به‌وسیله‌ی دسترسی به یک دیتاست خوب تشخیص داد!).
اهمیت مسئله از آنجایی مشخص می‌شود که قبل از هر پردازشِ زبانی شامل pars کردن، index کردن و حتی  مراحل بعدی شامل کاوش معنایی متن مثلا تشخیص عواطف یا علایق از روی یک متن (مثلا یک توئیت)، ابتدا لازم است زبان متن تشخیص داده‌شود. معمولا این کار توسط کارشناس انجام می‌شود اما مطلوب، شناسایی زبان متن بدون نیاز به کارشناس است. در اینجا سعی داریم مسئله‌ی تشخیص زبان متن توئیت‌ها را که نمودی از مسئله‌ی تشخیص زبان متن است، حل کنیم. 

# کارهای مرتبط

چندین روش برای تشخیص زبان یک متن ارائه شده‏‌است که به اختصار از آن‌ها نام می‌بریم:
1. براساس رشته‌های یکتای هر زبان[^Unique character strings] :
در هر زبان یک سری دنباله رشته‌ای خاص همان زبان وجود دارد که می‌تواند توسط یک کارشناس مشخص شده‌باشد یا از روی داده‌های آموزشی به‌دست‌آید. از اشکالات این روش این است که رشته‌های خیلی کوتاه با آن که خیلی راحت به‌دست‌می‌آیند، کمتر درستی تشخیص زبان متن مورد نظر را تضمین می‌کنند.(احتمال وجود رشته‌های کوتاه در سایر زبان‌ها زیاد است.) از طرفی هر چه طول رشته بیشتر باشد، با اطمینان بیش‍تری می‌توان زبان متن را تشخیص داد اما به همان نسبت رشته‌های یکتای طولانی در هر زبان کمیاب‌ترند. 

2. روش کلمات متواتر در هر زبان[^Frequent Words Method] :
 روش قابل استفاده دیگر برای تشخیص زبان یک متن بررسی کلمات متواتر هر زبان بر اساس داده‌های برچسب‌گذاری‌شده است.البته این روش اگر tokenization در یک زبان سخت باشد روش خوبی نخواهد بود.[1]

3. روش[^N-gram Method] ساخت مدل N-gram:
روش دیگر، تشخیص زبان با استفاده از مدل‌های زبانی بر پایه N-gram می باشد. N-gram در واقع قطعات N کارکتری از متن هستند. برای مثال رشته‌ی data دارای N-gram های زیر خواهد بود:
	unigrams: _,d,a,t,a,_
	bigrams: _d,da,at,ta,a_
	trigrams: _da,dat,ata,ta_
	quadgrams: _dat,data,ata_
	5-grams: _data,data_
	6-grams: _data_

![نمونه‌ای از دسته‌بندی یک رشته بر پایه N-gram ها[2]](https://boute.s3.amazonaws.com/252-p3.PNG)
	
در این روش رشته‌ها tokenize می‌شوند و از این token ها N-gram ها تولید می‌شوند. سپس بر اساس تواتر و تکرارشان مرتب شده و پرتکرارترین N-gram ها مدل زبانی ما ار خواهند ساخت. در نهایت با به‌دست‌آوردن فاصله‌ی مدل زبان مورد نظرمان نسبت به مدل‌های زبانی به‌دست‌آمده از داده‌های آموزشی زبان متن مورد نظر را پیش‌بینی می‌کنیم. [3] 

![نمونه‌ای از محاسبه‌ی فاصله‌ی زبان از مدل‌های به‌دست‌آمده[4]](https://boute.s3.amazonaws.com/252-p4.PNG)

4. روش[^Graph-based N-gram Method] ساخت مدل N-gram برپایه گراف:
در این مدل بین هر دو شی (مثلا بین دو کلمه) یک یال وجود دارد که نشان‌دهنده‌ی توالی آن دو  خواهد بود. برای مثال دو عبارت is this a test در زبان انگلیسی و is dit een test در زبان هلندی را در نظر می‌گیریم. در این صورت تصویر زیر نشان‌دهنده گراف این دو عبارت خواهدبود.
![گراف حاصل با استفاده از  trigrams ](https://boute.s3.amazonaws.com/252-Capture.PNG)

این مدل بر اساس احتمال و آمار کلاسیک ساخته خواهد شد و بر اساس روابط موجود در یک مدل حاصل از زبان‌های موجود در داده‌های آموزشی زبان یک متن جدید قابل پیش‌بینی خواهد بود.[5]  

# آزمایش ها


# کارهای آینده 


# منابع و مراجع

[1] M.Martino, R.Paulsen, Natural language determination using partial words. US Pat. 6216102B1,1996
[2] www.slideshare.net/shuyo/language-detection-library-for-java
[3] William B. CAVNAR,  John M.TRENKLE,  N-Gram-Based Text Categorization,In Proceedings of SDAIR-94, 3rd Annual Symposium on Document Analysis and Information Retrieval , 1994
[4] Tomáš ÖLVECKÝ,N-Gram Based Statistics Aimed at Language Identification
[5] Erik TROMP ,Mykola PECHENIZKIY, Graph-based n-gram language identification on short texts, Proc. 20th Machine Learning conference of Belgium and The Netherlands, 2011

# پیوندهای مفید
+ [ Evaluating language identification performance](https://blog.twitter.com/engineering/en_us/a/2015/evaluating-language-identification-performance.html)
+ [Deep Learning for Supervised Language Identification for Short and Long Texts!](https://medium.com/@amarbudhiraja/supervised-language-identification-for-short-and-long-texts-with-code-626f9c78c47c)