چهارشنبه، مرداد ۱۵، ۱۳۹۳

یک برنامه - تشخیص دهنده زبان - Language identification


یکی از اولین ابزارهای مورد نیاز پروژه‌های پردازش زبان طبیعی چند زبانه،  تشخیص زبان محتوای داده شده است. روشهای مختلفی برای اینکار می‌توان استفاده کرد، که ساده‌ترین آن استفاده از مدل ngram  است. در ادامه این نوشته این مدل را توضیح داده و در نهایت یک برنامه پرل (Perl) براي استفاده شما معرفي می‌كنم.
مدلی که در اینجا معرفی می‌کنم یک مدل یادگیری بانظارت هست. به این معنی که برای استفاده از اون نیاز به داده برچسب خورده (labeled data) برای آموزش برنامه دارید. مثلا در مورد این پروژه می‌توانید از یک فایل متنی که در هر خط اون یک جمله باشه و آخرین کلمه هم نوع زبان  تعریف شده باشه. مثل نمونه‌ای که در زیر به اون اشاره شده:

this is a test. en
je suis contente. fr

داده
یک راه ساده برای آماده سازی چنین داده‌ای اینه که مجموعه‌ای از جملات انگلیسی را به مترجم گوگل داده و ترجمه اون به زبانهای مختلف را در یک فایل جمع‌آوری کنید. در نهایت باید فایل خودتون را به دو قسمت (بصورت تصادفی ۸۰-۲۰) تقسیم کنید تا بتوانید یک فایل برای آموزش داشته باشید و یکی هم برای ارزیابی نتیجه اون.

مدل
مدل استفاده شده در این برنامه character 3-gram هست. به این معنی که هر زبان بر اساس لیستی از رشته‌های ۳تائی از حروف پشت سر هم (3-gram) تعریف شده. این لیست از روی داده آموزشی برای زبان ساخته میشه. در زمان ارزیابی مدل، جمله داده شده به همین صورت تبدیل به حروف ۳تائی میشه و در نهایت فاصله برداری برین جمله داده شده و تمام زبانها اندازه‌گیری میشه. روشهای مختلفی  را می‌توان برای اندازه‌گیری فاصله بین دوبردار استفاده کرد. در این پروژه من از روش اندازه گیری بر اساس کسینوس زاویه بین دو بردار استفاده کرده‌ام که معمولا برای بیشتر مدلها جواب میده.

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


اگر مشکلی در متصل شدن به گوگل‌کد داشتید به من خبر بدین که برنامه را برای شما بفرستم.


هیچ نظری موجود نیست: