خب رفقا، این مقاله قراره یکم درباره هوش مصنوعی و پردازش گفتار عربی صحبت کنه؛ ولی نه خشک و رسمی، میخوام واستون راحت و خودمونی توضیح بدم که اصل ماجرا چیه!
ماجرا از این قراره که محققها اومدن صداهای خام و برچسبنخورده (یعنی هیچکس براش ننوشته این صدا اسمش چیه یا چی میگه) زبان عربی رو برداشتن و شروع کردن به بررسی.
اولین کاری که انجام دادن، استخراج طیف صدا و ساختن چیزی به اسم MFCC بوده. حالا MFCC یا همون Mel-frequency cepstral coefficients، یه نوع ویژگی خاص از صداست که خیلی تو پردازش صوت کاربرد داره. تو ایرانیا بعضی وقتا بهش مولفههای کپسترال هم میگن. خلاصه این MFCCها به ما کمک میکنن تا اطلاعات مهمی از صدای گفتاری رو دربیاریم.
مرحله بعدی داستان جذابتر میشه: الگوریتم خوشهبندی! تو این تحقیق از K-means استفاده شده که اگه بخوام ساده بگم یعنی دادههایی که به هم شبیه هستن رو تو دستههای جدا میذاره، بدون اینکه نیاز باشه از قبل بدونیم این دستهها چیاست. K-means میشه مثل یه آدم کنجکاو که فقط بر اساس ظاهر دوستاشو دستهبندی میکنه!
وقتی MFCCها رو خوشهبندی کردن، فهمیدن توی مجموعه صداهاشون چه جور تنوع و فراوانیای وجود داره. تو این مرحله، روشهایی مثل Dynamic Time Warping (DTW) و فاصله اقلیدسی (Euclidean Distance) هم به کار اومدن تا مقایسه و نمایش این صداها راحتتر بشه. مثلاً DTW رو اگه نشده باشین اسمشو بشنوین، یعنی یه جور راه برای مقایسه دوتا صدایی که سرعت حرف زدنشون فرق داره؛ باهاش میشه ببینی این دوتا صدا واقعاً شبیه همن یا نه.
تا اینجای کار همه چی ماشالله روی رواله، ولی تازه رسیده به قسمت جذابتر، یعنی دستهبندی یا همون Classification. اینجا سراغ مدلهایی مثل Decision Tree (درخت تصمیم)، XGBoost (که یه مدل قوی و پرسرعت جدیده واسه دستهبندی)، KNN یا همون K-نزدیکترین همسایهها (یه روشی که بررسی میکنه داده جدید به کدوم از دادههای قدیمی نزدیکتره)، و Random Forest (جنگل تصادفی، که کلی درخت تصمیمگیری کنار هم داره) رفتن تا ببینن چجوری میشه صداها رو برحسب دستههاشون منظم کرد.
حالا گل سرسبد داستان: استفاده از Deep Speech موزیلا واسه شناسایی گفتار عربی. Deep Speech یعنی یه مدل شبکه عصبی خیلی قوی (Neural Network یعنی همون مغز مصنوعی که کلی لایه و نورون داره و میتونه الگوهای پیچیده توی دادهها رو بفهمه). تو Deep Speech، چند ردیف Recurrent Neural Networks (RNN) استفاده شده که RNN مثل همون یادداشتبرداریه که کمک میکنه حتی وقتی یه چیزی یادت بره، دوباره بهش برگردی! این شبکه تلاش میکنه بفهمه چه ترکیبی از صداها به چه متنی ربط داره.
برای اینکه این مدلها رو آموزش بدن، اومدن کل دیتاست (مجموعه دادههای صوتی خوشهبندیشده، متن صحبتها و حروف الفبای عربی) رو به مدل Deep Speech بایدو دادن که آموزش ببینه و بعد هم تستش کردن.
برای اجرا و مدیریت کدهاشون، از نرمافزار PyCharm و ورژن 3.6 پایتون استفاده کردن. اگه با PyCharm کار نکردین، بدونین یه محیط برنامهنویسی باحاله که کدنویسی رو خیلی راحتتر میکنه. حتی ساختن و ویرایش Dockerfileها (یه جور فایل برای راه انداختن محیط مجازی اجرای کدها) هم توش آسونه!
نتیجه این کار چی شد؟! کیفیت شناسایی گفتار در زبان عربی فوقالعاده شد، خطاهاش پایین اومد؛ مثلاً میزان از دست دادن (Loss) به ۲۷۶.۱۴۷ رسید، درصد خطای واژه (Word Error Rate یا همون WER) فقط ۰.۳۷۲۰ و درصد خطای کاراکتر (Character Error Rate یا CER) هم شد ۰.۰۵۶۸! این یعنی دیگه ماشینی داریم که خیلی درست و دقیق میتونه عربی رو بفهمه و بنویسه.
جمعبندی کنم: این تکنیک باعث شد شناسایی خودکار گفتار عربی (ASR یا همون Automatic Speech Recognition یعنی سیستمی که حرف رو به نوشته تبدیل میکنه) با دقت بیشتری انجام بشه و بهبود جدی پیدا کنه. دیگه با این مدلها میشه گفت اگه عربی حرف بزنین، هوش مصنوعی هم میفهمه چه گفتین!
منبع: +