راهنمایی در حوزه voice to text برای زبان پارسی

سلام به همگی دوستان
این روزها با اجرایی کردن یک ایده مشغولم که نیاز به نرم افزاری دارم که یک استریم صوتی فارسی (مثلا خروجی یک یا تعدادی شبکه های رادیویی) رو از ورودی بگیره و متن تحویل بدم
بعد از کلی جستجو، به نتیجه مطلوب نرسیدم
آیا راه حلی برای این موضوع سراغ دارید؟ پروژه موفقی در این مورد وجود داره ؟
اگر نه، کسی در موارد مشابه فعالیت کرده که راهنماییم کنه؟ (ابزاری که نیست رو شروع کنیم بسازیم)

2 پسندیده

این یکی از مباحث Machine Learning به اسم Speech Recognition که عموما توسط Deep Learning حل میشه

2 پسندیده

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

1 پسندیده

گوگل با API فارسی را پشتیبانی میکنه
https://cloud.google.com/speech-to-text/docs/languages

1 پسندیده

خوب گوگل نامرده دیتاست نمیده بهمون.

کمی بیشتر که گشتم نمونه ای مثل https://www.iotype.com/ را پیدا کردم که چیزی در مورد ابزاری که ازش استفاده میکنه نگفته

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

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


در مورد جمع کردن دیتاست واقعا هیچ ایده ای ندارم که اصلا یعنی چی؟!
ممنون میشم راهنماییم کنید، چون به صورت جدی میخوام روی این موضوع وقت بگذارم ولی داده هام در موردش خیلی کم هستش و نیاز به یادگرفتن بیشتر دارم،
در هر جستجو هم یک سری داده جدید پیدا میکنم که برای فهم موضوع کلی وقت برای یادگیری اونها صرف میکنم

1 پسندیده

خوب برای neural network training باید یه دیتاست (مجموع دیتا) داشته باشیم از یه تعداد انسان که یه سری کار رو چند بار انجام دادن. بعد اون دیتا رو میدیم به شبکه‌ی عصبی که طراحی کردیم و کامپیوتر یه ارتباط بین کاری که انسانها انجام دادن و جوابی که به دست آوردن پیدا میکنه. (خیلی کلی گفتم)

مثلا ما به ۱۰۰۰۰ نفر یه سری کاغذ میدیم میگیم اعداد ۰ تا ۹ رو روی قسمتهای مشخص شده‌ی این کاغذها بنویسن با خودکار مشکی.
بعد کاغذها رو اسکن میکنیم و با یه اسکریپت ساده اون تیکه‌ها (مثلا مربع‌هایی که اعداد داخلش نوشته شده) رو جدا میکنیم و این میشه دیتای ما. این عکسهای کوچیک رو label گذاری میکنیم و میشه دیتاست ما. (لیبل به این صورت که ۵۰۰هزارتا عکس داریم با لیبل 1 و ۵۰۰هزارتا با لیبل 2 و…)
توی این دیتاست مثلا از هر عدد ۵۰۰۰۰۰ تا داریم که با دستخطهای مختلف توسط انسانهای مختلف نوشته شده. یه سریاش دقیق و قشنگه. یه سریاش وسطش خودکار قطع شده. یه سریاش دوبار نوشته شده (پررنگه)، یه سریاش کج نوشته شده و…

برای اینکه بدونید شبکه‌های عصبی چطور کار میکنه و نمونه کد ببینید بهتره سرچ کنید. آرتیکل و ویدیو زیاد هست،‌خیلی بهتر از من توضیح میدن. (سعی کردم توضیح بدم اینجا ولی به نظرم اگه یه کم سرچ کنید به توضیحات بهتری میرسید)
خلاصه‌ی مطلب اینه که یه دیتاست این مدلی میدیم به شبکه‌ی عصبی که طراحی کردیم و یاد میگیره که ۱ چه شکلیه و ۲ چه شکلیه و…

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


پ.ن:
ساخت یه شبکه‌ی عصبی معمولی خیلی سادست. فقط کافیه یه دیتاست داشته باشیم و یه شبکه‌ی عصبی ساده درست کنیم با استفاده از کدهایی که از اینترنت کپی میکنیم (یا فریموورکهایی که برای اینکار ساخته شدن)
ولی ساخت یه شبکه‌ی عصبی خیلی خوب، کار خیلی سختیه.
البته ساخت یه شبکه‌ی عصبی بی نقص، غیر ممکنه.

2 پسندیده

من یک مدتی هست برای مشتریم یک افزونه آزمون آنلاین زدم به این صورت هست یک شعر یا یک متن به کاربر می دند طرف روی کاغذ می شینه می نویسه و عکسشو ارسال می کنه تاحالا هزار تا نمونه شده فقط

بعد یک نمونه از طرف استاد نوشته می شه و بر اساس اون به صورت دستی مدرسین نمره می دند.

ولی این فقط تصویر خام هست و مربوط به خوش نویسی خط تحریری با خودکار هست

3 پسندیده

تنها راه استفادش اینه که این دیتاست رو تبدیل کنیم به کپچا، بدیم مردم ۲تا ۲تا کلمه‌ها رو تایپ کنن برامون به سبک قدیم recaptcha :sunglasses:


صرفا جهت یادآوری و در ادامه‌ی مطلبی که بالاتر نوشتم:

گوگل قدیما reCaptcha1 داشت که تیکه های متن اسکن شده‌ی کتابهای قدیمی رو نشون مردم میداد تا برای اینکه ثابت کنن انسان هستن، اون کلمه رو تایپ کنن، بعد از روی جوابهایی که دیگران داده بودن تشخیص میداد که درست جواب دادیم یا نه. (که اگه یه کلمه‌ی سخت رو اشتباه هم تایپ میکردیم بهمون گیر نمیداد چون احتمالا بقیه‌ هم خیلی اشتباه تایپ کرده بودن یا دیتاش کلا کم بود)

الآن اومده از دیتاهای street view استفاده میکنه برای reCaptcha2 و ما با اثبات اینکه انسان هستیم داریم به ماشین گوگل کمک میکنیم تا خوندن تابلو و پیدا کردن ویترین فروشگاه رو یاد بگیره.

اینهم یه جور درست کردن دیتاست هست.
با این تفاوت که گوگل نمیدونه کجای عکس تابلو وجود داره که اون تیکه رو جدا کنه، پس به ما نشون میده که اون قسمتی از عکس که تابلوی خیابون هست رو براش جدا کنیم.
بعد از اینکه اون عکس رو به ۱۰۰نفر (مثلا) نشون داد و مطمئن شد اونجای عکس یه تابلو‌ی خیابون وجود داره، اون عکس رو وارد دیتاستش میکنه برای یاد دادن به هوش مصنوعیش.

2 پسندیده

اینطوری کند نمیشه؟ 5000 تا دیتاست؟
واقعا چطوری کار میکنه!

1 پسندیده

خب خیلی کنده ولی به خاطر اینکه پردازش اصلی و ساخت شبکه‌ی عصبیمون بر اساس دیتا، از قبل انجام میشه، نه توی سیستم کاربر، پس کاربر چیزی حس نمیکنه.

من چندبار شبکه‌ی عصبی درست کردم. خیلی خفن نبوده و کار خفنی هم انجام نمیداده. در حد پردازش عکس صورت و پردازش اعداد ۰ تا ۹ و پیشبینی قیمت بیتکوین.
اونقدری که فکر میکردم طول نکشید درست کردنش ولی به هر حال ساختنش و بعد ادیت کردن تنظیمات و دوباره ساختنش تا رسیدن به یه چیز دقیق، خیلی طول میکشه. از طرف دیگه ساختن یه شبکه‌ی عصبی قوی که بشه بهش اعتماد کرد خیلی بیشتر از این حرفها طول میکشه و خیلی سختتره.

اگه درمورد voice میخواید بدونید، من تست نکردم هنوز. ولی اینطور که میگن بهتره یه کارت گرافیک قوی داشته باشیم و پردازش رو بندازیم روی اون. به cpu امیدی نیست!

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

ساده ترین شبکه‌ی عصبی میتونه سه ردیف node داشته باشه که اگه بخوام به شکل بصری توضیح بدم میشه این شکلی:

  • یک لایه نود، سمت چپ، که تعداد نودهای این لایه به اندازه‌ی دیتای ماست. یعنی مثلا به تعداد پیکسلهای تصویرمون
  • یک لایه نود وسط، تعدادش میتونه هرچقدر باشه. کم یا زیاد. باید تعدادشو کم و زیاد کنیم ببینیم چقدر به دردمون میخوره
  • یه لایه نود سمت راست، تعدادش به اندازه‌ی نتایجیه که میخوایم. مثلا اگه میخوایم عکس پردازش کنیم و بفهمیم این عکس «سگ» هست یا «گربه»، توی لایه‌ی سمت راست، ۲تا نود خواهیم داشت.

لایه‌ی سمت چپ و راست باید باشن و باید همین شکلی باشن. لایه‌ی وسط میتونه یک لایه یا ۱۰تا لایه باشه. تعداد نودهای هر لایه هم میتونه متفاوت باشه. هیچ قانون دقیقی برای انتخاب این تعداد این نودها وجود نداره و باید تست کنیم.
سیستم ما یه دیتاست لازم داره که عکسهاش labelگذاری شده باشن. یعنی بدونیم این عکس واقعا سگ هست.
بعد عکسها رو میدیم به لایه‌ی سمت چپ، جواب رو (سگ) میدیم به لایه‌ی سمت راست. سیستم سعی میکنه ارتباطی بین پیکسلها و «سگ» پیدا کنه.

اینکه چطوری اینکارو میکنه خیلی توضیحش زیاده و نمیتونم درست شرح بدم. شاید بهتر باشه به این مطلب نگاه کنید.

2 پسندیده

راستی اینم بگم که ۵۰۰۰تا واقعا عدد کمیه و اصلا به درد نمیخوره. شما باید به ملیون فکر کنید!
مثلا ۱۰ملیون عدد بین ۰ تا ۹ داریم که همگی label گذاری شدن. اینا رو میدیم به سیستممون و نتیجش میشه یه شبکه‌ی عصبی تقریبا درست تشخیص میده.
یه شبکه‌ی عصبی که توی تستهای ما اوکی هست ولی یهو بهش یه random art یا تصویر یه پنگوئن نشون میدیم که ربطی به اعداد نداره و با اطمینان 99.94درصد بهمون میگه این عدد ۵ هست :neutral_face:

مطالعه‌ی بیشتر:

2 پسندیده

دلش سوخته و از این لینک میتونید دیتاستشو دانلود کنید.

2 پسندیده

من قبلا انگلیسیشو دانلود کردم.
فارسیشم برای دانلود گذاشته؟

2 پسندیده

اره فارسیشم هست.البته اگه مردم کمک کنن یهترم میشه

1 پسندیده