پروژه ترجمه ماشین

اعضای گروه : عاطفه ولی پور – المیرا قربانی

مقدمه

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

استفاده ی این ماشین هوشمند هیچگاه برای ترجمه مقاله و ترجمه تخصصی پیشنهاد نمیشود؛ دلایل عدم پذیرش ترجمه ماشینی (گوگل ترنسلیت) به شرح زیر میباشد :

1-ماشین ها توانایی فهم فرهنگ ها را ندارند :

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

2-ماشین ها توانایی برقراری ارتباط بین کلمات یک متن بر اساس محتوای اصلی آن متن راندارند :

در زبان های مختلف کلماتی وجود دارد که ممکن است دو یا چند معنی داشته باشند ، ماشین ترجمه توانایی تشخیص و استفاده ی معنای مرتبط با متن را ندارد. مثلا لغت “tears” در زبان انگلیسی میتواند سوراخ و یا درز معنی بگیرد همچنین در جای دیگر میتواند اشک ریختن ترجمه شود . برای یک مترجم ماشینی ترجمه ی یک کلمه که دو معنا ی متفاوت دارد مشکل است ونمیتواند به درستی معادل سازی کند. اگر یک ترجمه تخصصی با این نوع کلمات را از طریق مترجم ماشینی انجام دهید ، بدون شک با ترجمه های نادرستی روبه رو می شوید که جریان متن را مختل می سازد. این ترجمه مبهم خواهد بود و بیشتر جملات معنای منطقی ندارد.

3- ماشین ترجمه توانایی بومی سازی واژگان را ندارد :

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

4-ماشین ترجمه قادر به ایجاد سبک و لحن در متن نمی باشد :

شما یک متن را در نظر بگیرید که به دو مترجم مختلف داده شده است ، خیلی بعید به نظر میرسد که ترجمه های ارسال شده برای ما مشابه هم باشند، سبک نوشتار و لحن هر مترجم با  مترجم دیگر متفاوت است. یک متن میتواند سبک های مختلفی داشته باشد ممکن است شاعرانه باشد ،ممکن است خنده دار باشد و حتی ممکن است بسیار رسمی باشد.

5-حساسیت انسانی در امر ترجمه بسیار مهم است :

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

حال این سوال برای ما مطرح میشود که ایا ماشین میتواند به درک مناسبی از تمام یا درصدی از مواردی که به آن اشاره شد برسد؟

شاید این کار در قرن بیستم میلادی غیرممکن بود اما این روند امروزه در حال بهبود است. و با پیشرفت شبکه های عصبی ، یادگیری عمیق و پیدایش شبکه های عصبی بازگشتی ( RNNها) روز به روز به نتایج بهتری دست پیدا میکند.

پیش نیاز ها

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

چالش ها ی جمع آوری داده

برای به دست آوردن این مجموعه داده روش های مختلفی از جمله استخراج عبارات از کتاب ها و مقالات ترجمه شده، سایت های دوزبانه و یا زیرنویس های فیلم ها به ذهن میرسد .

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

بنابراین به سراغ گزینه ی سوم که استخراج از فایل های زیرنویس با فرمت srt که ساختار مناسبی دارند رفتیم.

در زیر نگاهی به ساختار یک نمونه فایل srt می اندازیم.

همانطور که مشاهده میکنید فایل های srt یک فرمت تکرار‌‌‌‌‌ پذیر و مشخص دارند که خط اول بلاک صرفا یک شمارنده است

در خط بعدی زمان شروع و پایان مدتی که عبارت خط های بعدی باید بر روی تصویر نمایش داده شود را نشان میدهد. و تا شمارنده ی بعدی تنها عبارت ها‌ی مربوط به آن زمان دیده می شوند .

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

پس از بدست آمدن دیکشنری ها برای هر دو زبان اکنون تنها کافیست عبارات با کلید یکسان در هر دو دیکشنری را به عنوان عبارات متناظر در نظر گرفته و در یک فایل ذخیره شود.

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

با این روش ما توانستیم در مجموع  ۱۰۸۷۹۴ جفت ترجمه بر روی تعداد زیادی فیلم و سریال به دست آوریم.

چالش بعدی تمیز کردن و پیش پردازش داده ها برای آموزش است. که مراحل آن به شرح زیر است:

۱-گاهی اوقات مترجم توضیحاتی را در بین پرانتز برای مفهوم تر شدن موضوع  که اثری بر روی ترجمه ندارد قرار میدهد که این موارد باید از بین بروند.

۲- بسیاری از زیرنویس های اینگیلیسی به گونه ای تعبیه شده اند که به طور کامل برای ناشنوایان قابل فهم باشند و مواردی از قبیل صدای زنگ در ، خندیدن گروهی و … را معمولا بین دو براکت یا پرانتز مینویسند که برای داشتن ترجمه ای بهتر این موارد نیز باید حذف بشوند.

[SINGING] New York City has no power .نیویورک برق نداره

۳-  در ساختار این فایل ها گاها تعداد زیادی از تگ های html  مثل <font>,<i> و دیده میشود که برای استایل دادن به متن از آنها استفاده میشود که این موارد نیز باید همه گی حذف شوند.

<font color=”#de2504″>،یه فروشگاه کتابِ بزرگسال جدید</font>

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

MONICA: Okay, look. .اُه، آره-.باشه، ببین-

۵- به علت وجود یونیکد های مختلف در حروف فارسی و وجود تنها سه یونیکد مختلف برای حرف ‘ی’ یک مرحله نرمال سازی دیتا ضروری می باشد که به این منظور از کتابخانه ی هضم برای نرمال کردن دیتا استفاده شد.

روش آموزش مدل

بعد  از تهیه دیتاست برای آموزش مدل از نوت بوکی که اخیرا گوگل منتشر کرده , با استفاده  از یک مدل seq2seq برای ترجمه انگلیسی به فارسی با استفاده از tf.keras وtf.enable_eager_execution استفاده کرده ایم.توضیحات بیشتر در مورد آموزش مدل را اینجا میتوانید ببینید .

برای آموزش 108,794 داده به یک سخت افزار قدرتمند نیاز داشتیم به همین دلیل سعی کردیم از google colab  و کرنل kaggle استفاده کنیم اما به دلیل محدودیت حجم gpu سرویس کولب و محدودیت زمانی 6 ساعته سایت کگل نتوانستیم با تعداد ایپاک کافی مدل را آموزش دهیم .

ذخیره مدل

برای اینکه از مدل استفاده کنیم، برنامه‌ای لازم داشتیم تا متن را از کابر دریافت کرده و ترجمه را برگرداند. برای این منظور لازم بود مدل را ذخیره و  serve کنیم که کد زیر نوشته شد:

اما بخاطر وجود tf.enable_eager_execution  نتوانستیم مدل را serve کنیم به همین دلیل فایل های پوشه training_checkpoints را بارگذاری کردیم.

سرور پیش‌بینی

از آنجایی که برنامه بالا باید حتما به همراه متنی که قرار است پیش‌بینی شود در یک سیستم باشند و در واقع به صورت لوکال اجرا می‌شود، محدود بوده و نیازهای استفاده عملی از مدل را فراهم نمی‌کند. برای همین با استفاده از Flask API برنامه سرور زیر نوشته شد تا بتوان با دریافت متن از کاربر، نتیجه  ترجمه را مشاهده کرد.

برای آشنایی با فلسک و نحوه ایجاد یک برنامه سرور پست آموزش مقدماتی فلسک (Flask) را بخوانید.

برنامه به دو قسمت Client side و Server side تقسیم میشود . ابتدا متن را از کابر دریافت میکنیم ,سپس آن را به مدل میدهیم و نتیجه ترجمه را نمایش میدهیم . کابر میتواند خروجی را در قالب pdf,text و srt دریافت کند.

تصاویری از محیط برنامه :

Git Repository: https://github.com/ElmiiiRaa/machine-translation

فوتر سایت

اسلایدر سایدبار

درباره ما

درباره ما

ما گروهی از دانشجویان رشته کامپیوتر دانشگاه شهید رجایی هستیم که به راهنمایی و تدریس استاد علی‌رضا اخوان‌پور به دنیای یادگیری عمیق پا گذاشتیم و دوست داریم چیزهایی که در این مسیر یادمی‌گیریم رو به اشتراک بذاریم.

شبکه های اجتماعی