با درود
امید دارم هر کجا هستید حالتان خوب و دنیا به کامتان باشد.
نامِ من مصطفی است. اگر چه هدف من از نگارشِ این نامه معرفی خودم نیست و بیشتر معرفی نرم افزار «تیهو» است. این نامی است که من برای این موتورِ «پردازش طبیعی زبان فارسی» انتخاب کردهام.
تیهو حاصل بیش از یکسال تلاش و کار من روی زبان فارسی است. من آنرا به صورت رایگان و تحت امتیاز «گنو نسخه ۳» انتشار دادهام. تیهو را میتوانید از آدرس اینترنتی زیر پیدا کنید:
https://github.com/tihu-nlp
معرفی تیهو:
ساختار زبان فارسی به گونهای است که نمیتوان از کارهای مشابه در زبانهای دیگر براحتی استفاده کرد. برخی از اجزای آن همچون چرخی است که باید دوباره برای زبان فارسی اختراع شوند. برای مثال تشخیص موقعیت «کسره و اضافه» در زبان فارسی مشابهی در زبانهای دیگر ندارد. شاید بهتر باشد نگاهی داشته باشیم به نحوه عملکرد تیهو. تیهو برای پردازش زبان فارسی مراحل مختلفی را به ترتیب زیر انجام میدهد:
- جداسازی کلمات (Tokenization) - اولین مرحله برای پردازش زبان نوشتاری جداسازی کلمات است که این امر در تیهو به صورت بررسی حرف به حرف صورت میگیرد چرا که برای جداسازی در زبان فارسی نمیتوان تنها به «فاصله» اکتفا کرد. بررسی حرف به حرف امکان بهینه سازی (normalization) حروف را هم میدهد. برای این منظور فهرستی از کاراکترهای یونیکد از پیش مهیا شدهاند که از مسیر زیر میتوانید آنها را مشاهده کنید:
- برچسب گذاری دستوری (Part-Of-Speech Tagging) - در این مرحله مجموعهای از وندها (پسوندها و پیشوندها) و یک مجموعه وسیع از دادگان در زبان فارسی استفاده شده است. من پیشتر از این دادگان برای تولید غلط یاب فارسی «لیلک» (به آدرس اینترنتی:https://github.com/m-o-s-t-a-f-a/lilak) استفاده کردم که به صورت رسمی در گوگل کروم مورد استفاده قرار گرفت. میتوانید از مسیرهای زیر این فایلها را بررسی کنید.
- ابهام زدایی (POS Disambiguation) موردی است که هنوز برای آن کاری در تیهو صورت نگرفته است چرا که نیاز به تحقیق و بررسی بیشتری دارد. کارهای مشابهی در این زمینه انجام شده است که بعضا به صورت رایگان و با حفظ امتیاز قابل دسترسی هستند. امید دارم بزودی دوستان عزیزی که در این زمینه آشنایی بیشتری دارند کمکی به این پروژه داشته باشند. اطلاعات بیشتر را از اینجا میتوانید بدست آورید:
https://en.wikipedia.org/wiki/Word-sense_disambiguation
- مشکل کسره اضافه. که البته مشکلی است کاملا بومی که باید خود ما فارسی زبانها برای آن فکری بکنیم. همه تحقیقاتی که تا کنون صورت گرفتهاند تقریبا در دسترس عموم نیستند. اگرچه من چند تا از مقالاتی را که به این موضوع اختصاص یافتهاند را خواندهام. تقریبا همگی مشکلاتی حل نشدنی دارند. خود من در نهایت به نظرم رسیده است که این مشکل را باید با کمک بررسی قواعد دستور زبان فارسی و نه الگوریتمهای یادگیری و هوش مصنوعی حل کرد. اگرچه خیلی هم از این لحاظ مطمئن نیستم. این بخش نیز هنوز پیادهسازی نشده است.
- پیشبینی آوا برای کلمات نامشخص (Letter-To-Sound). در نهایت همواره کلمات و واژگانی هستند که در دادگان تیهو موجود نیستند. برای این واژگان باید رشته آوایی مناسبی پیشبینی کرد تا در نهایت بتوان آن را به صوت رساند. من برای این منظور از کتابخانه g2p-seq2seq از آدرس اینترنتی زیر استفاده کردم:
برای آموزش مدل من از بیش از پنجاه هزار واژه فارسی استفاده کردم. این مدل را میتوانید در آدرس زیر پیدا کنید:
این کتابخانه مزایا و معایبی دارد. بنظر میرسد مهمترین مزیت آن این است که بروز میشود و از سوی گوگل هم پشتیبانی میگردد. اما مشکلاتی هم دارد. بسیار کند است. آموزش مدل خیلی زمان میبرد (تجربه من: بیش از یک شبانه روز، شاید باید تنظیمی را پیش از آموزش رعایت میکردم.) اما مهمترین مشکل آن این است که در حال حاضر برای سیستم عامل ویندوز نسخهای ندارند. البته گویا بزودی ویندوز را هم پشتیبانی خواهند کرد. در هر صورت برای این قسمت نگرانی زیادی وجود ندارد. چرا که جایگزینهای زیر هم موجود هستند:
- سنتر آواهای فارسی (Speech Synthesize) - تیهو برای سنتز آواهای فارسی از موتورMbrola استفاده میکند. اگرچه eSpeak هم قابلیت اجرا دارد. تولید موتور سنتز با کمک کتابخانه FestVox کاری است شدنی اما هزینه بسیار بالایی دارد و زمان اجرای آن طبق برآورد من تا شش ماه هم بالغ میشود. انتخاب فرد خوش سخن برای ضبط صدا هم مشکلی است مضاعف. تقریبا برای این بخش هم فعلا باید به همان Mbrola قناعت کرد. امید دارم در این بخش از تجربیات مشابه و کمک دوستان بتوان استفاده کرد.
یک مثال:
برای درک بهتر نحوه کارکرد تیهو، من یک متن نمونه را به عنوان یک مثال در پروژه قرار دادم و خروجی مراحل مختلف را در کنار آن قرار دادم.
متن نمونه بسیار ساده است: «بحران آب حیات تمدن ایرانی را تهدید میکند.» شما میتوانید از مسیر زیر این مثال و خروجیهای تیهو را بررسی کنید:
https://github.com/tihu-nlp/tihu/tree/master/example
سخن پایانی:
زبان فارسی از نداشتن کتابخانهای برای پردازش زبان نوشتاری و گفتاری بشدت رنج میبرد. معدود کارهایی هم که تا کنون صورت گرفتهاند، بیشتر تحقیقاتی بودهاند و نتیجه و حاصل کار هم در کتابخانه دانشگاهها در حال خاک خوردن است. از دیگر سو هیچ کار منسجم و هماهنگی هم تا کنون به صورت رایگان و متن باز منتشر نشده است.احساس کردم که باید از جایی شروع کرد و من امید دارم تیهو مسیری را مهیا کند تا افراد مستعد و علاقمند دور هم جمع بشوند. این نامه را از این جهت برای شما نگاشتم که بتوانم از کمک شما در جهت بهبود تیهو بهره ببرم. امیدوارم اگر شما هم فردی را میشناسید که میتواند کمکی به بهبود این پروژه داشته باشد به من معرفی کنید.
درست است که در ایران حق مولف (کپی رایت) به رسمیت شناخته نمیشود ولی این نباید باعث شود ما دین خود را به زبان فارسی نادیده بگیریم. هویت ما به این زبان گره خورده است.
در نهایت لازم میدانم که یادآور شوم که من در پروژه تیهو (همچون پروژه پیشین من لیلک) بدنبال هیچ گونه نفع شخصی نبودهام. هرچند که همه آن را در نهایت منفعتی میدانم برای زبان پارسی. در نهایت هم در نظر دارم نسخهای را برای نابینایان به صورت رایگان منتشر کنم.
تیهو حاصل بیش از یکسال کار و تلاش است. امیدوارم ابتر نماند.
با تشکر
مصطفی صداقت جو