چرا بازیابی فارسی با انگلیسی فرق دارد
«میشود» و «ميشود» برای یک موتور جستجوی معمولی دو کلمهٔ کاملاً متفاوتاند. این یک جزئیات نیست — تفاوت میان یک دستیار کارآمد و یک اسباببازی است.
وقتی اولین نسخهٔ بازیابی را روی یک پایگاه دانش فارسی آزمایش کردیم، دقت حدود نیمی از چیزی بود که روی همان محتوا به انگلیسی میدیدیم. مدل بُرداری یکی بود، اندازهٔ قطعهها یکی بود، و حتی سؤالها ترجمهٔ تحتاللفظی هم بودند. مشکل جای دیگری بود.
یک کلمه، چند نوشتار
در متن فارسی وب، «ی» و «ک» به دو شکل نوشته میشوند: شکل فارسی (U+06CC و U+06A9) و شکل عربی (U+064A و U+0643). کاربر معمولی تفاوت را نمیبیند، اما توکنایزر میبیند. نتیجه این است که یک سند نوشتهشده با صفحهکلید عربی و پرسشی نوشتهشده با صفحهکلید فارسی، از نظر مدل دو دامنهٔ واژگانی جدا هستند.
- نرمالسازی «ي» و «ك» عربی به معادل فارسی، پیش از هر کار دیگری
- حذف اعراب و تشدید، که در متن وب اغلب ناسازگار بهکار میروند
- یکدستکردن نیمفاصله (U+200C) — نه حذف آن، که معنا را عوض میکند
- تبدیل ارقام عربی و فارسی به یک نمایش واحد برای مقایسه
قطعهبندی و طول جمله
جملهٔ فارسی بهطور میانگین بلندتر از جملهٔ انگلیسی است و علائم پایانی کمتری دارد. قطعهبندی مبتنی بر شمارش نویسه، مرتب وسط یک بند میشکند و نیمهٔ دوم را بیزمینه رها میکند. ما به قطعهبندی آگاه به ساختار سند رفتیم: مرز قطعه روی عنوان، بند و سلول جدول قرار میگیرد، نه روی نویسهٔ هزارم.
before: [ ...متن بند اول و نیمهای از بند دوم ]
after: [ عنوان + بند کامل ] [ عنوان + بند کامل ]نتیجه
با همین دو تغییر — نرمالسازی پیش از بُرداریسازی و قطعهبندی ساختاری — نرخ بازیابی قطعهٔ درست در ده نتیجهٔ اول از حدود ۶۱٪ به ۸۹٪ رسید، بدون تعویض مدل و بدون افزایش هزینه.