همهٔ ترجمههای ماشینی را بررسی کردیم. همان بررسیها بودند که اشتباه از آب درآمدند.
زبانها
پیش از انتشار کیت ترجمهٔ خود، آن را روی یک اپ نمونهٔ کوچک اجرا کردیم: 70 رشته در شش قالب (JSON، Flutter ARB، Android، Apple .strings، gettext و Markdown) به زبانهای آلمانی، روسی، ژاپنی، عربی و اسپانیایی، با یک مدل باز 27 میلیارد پارامتری روی ماشین خودمان. هر رشتهٔ ترجمهشده پیش از ذخیرهسازی از بررسیها عبور میکند. 4 مورد از 350 رد شدند. هر چهار رد شدن اشتباه بود.
بررسیها به دنبال چه هستند
ترجمهای که اپ را خراب کند از نبود ترجمه بدتر است، پس هر رشته باید جاینگهدارهای خود (%1$s، {name}، {{count}})، تگها، شکستهای خط و URLها را حفظ کند؛ باید به خطِ زبان مقصد باشد؛ نباید خالی، بیقیدوشرط یا به انگلیسی باقی بماند؛ و شکلهای جمع باید دقیقاً همان دستهبندیهایی را پوشش دهند که زبان دارد. رشتهای که رد میشود با ذکر مشکل دوباره درخواست میشود، و اگر دوباره رد شد، حذف میگردد تا اپ برای آن یک رشته، انگلیسی نشان دهد.
چهار رد شدن
- «Backups» در آلمانی همان «Backups» بود. بررسی آن را ترجمهنشده خواند. آلمانی از کلمهٔ انگلیسی استفاده میکند. یک کلمهٔ یکسان اغلب درست است؛ دو یا چند کلمهٔ یکسان نه، پس اکنون همین قاعده است.
- یک خط روسی و یک خط ژاپنی با آدرس ایمیل در بررسی خط شکست خوردند: کمتر از 60٪ حروف سیریلیک یا ژاپنی بودند، زیرا
[email protected]با حروف لاتین نوشته شده است. اکنون آدرسها مانند جاینگهدارها رفتار میکنند: باید بدون تغییر بازگردند و بهعنوان حرف شمرده نمیشوند. - یک پیام جمع ژاپنی به صورت
{count, plural, =0{連続記録なし} other{{count}日連続}}بازگشت. شاخهٔ{連続記録なし}فاصله ندارد، بنابراین الگوی جاینگهدار آن را بهعنوان متغیری به نام 連続記録なし گرفت. حالا آکولادهای شاخه در پیامهای جمع ساختار هستند و نام جاینگهدارها باید ASCII باشد.
پس از اصلاح بررسیها، اجرای دوم فقط همان چهار رشته را از مدل خواست، زیرا بقیه در حافظهٔ ترجمه بودند، و هر 350 رشته را در 45 ثانیه نوشت.
بخشی که انتظار داشتیم شکست بخورد و نشکست
تبدیلهای جمع جایی است که ترجمههای سادهلوحانه به مشکل میخورند: انگلیسی دو حالت «یک» و «دیگر» دارد، روسی چهار حالت «یک»، «کم»، «زیاد» و «دیگر» دارد، عربی شش دسته دارد و ژاپنی تنها یک حالت دارد. ما دقیقاً دستهبندیهای زبان مقصد را خواستیم و جاینماهای (placeholders) هر حالت را بررسی کردیم. مدل برای روسی «1 день، 2 дня، 5 дней» را نوشت و هر شش حالت عربی را تولید کرد. همه تبدیلهای جمع اندروید در اولین تلاش در هر پنج زبان قبول شدند و همینطور همه پیامهای جمع بهجز پیام ژاپنی که چک ما آن را اشتباه خواند.
آنچه هیچ چکی نمیتواند بگیرد
سپس 22 رشته وبِ مثال را به تمام 42 زبانی که Polyglot میشناسد ترجمه کردیم: 924 از 924 رشته قبول شدند. هنگام مرور آنها، یکی برجسته بود. در زبان خمری، «You are offline» به جملهای برگشت که میگوید «شما آنلاین هستید». این یک جمله خمریِ درستساخت با خطِ صحیح است و هیچ چیزی از آن جا نیفتاده، بنابراین همه چکها آن را قبول کردند. چکها چیزهایی را میگیرند که اپلیکیشن را از کار میاندازند؛ اما برای معنای غلط، به کسی نیاز است که زبان را بخواند.
نکته کلیدی
چکهای خودکار روی خروجی ماشین، به خروجی واقعی برای تست نیاز دارند. تستهای واحد (Unit tests) با ترجمههای ساختگی قبول شدند؛ اما یک مدل واقعی که ژاپنی واقعی نوشت، در چند دقیقه شکافها را پیدا کرد. Polyglot با همین چکها، اصلاحشده و همراه با تستها برای هر چهار حالت، ارائه میشود.