Chatbot with Voice

مقدمه

چت بات در واقع یک نرم افزار هوش مصنوعی می باشد که می تواند یک گفت و گو با کاربر به زبان طبیعی را شبیه سازی کند. هدف از انجام این پروژه ایجاد  چت باتی بود که قادر به استفاده از  صوت است.  برای این هدف از  شبکه های از پیش آموزش داده شده استفاده شده است.

ادامه خواندن Chatbot with Voice

Connectionist Temporal Classification – CTC

CTC الگوریتمی است که در آموزش deep neural network ها در حوزه تشخیص گفتار و تشخیص دست خط و تشخیص عمل(action recognition) و  دیگر مسائل ترتیبی (sequence problems)  به عنوان loss function مورد استفاده قرار می گیرد. 

بطور کلی می توان گفت که CTC  قادر است تا خروجی deep neural network ها را گرفته و با محاسبه loss ، آموزش شبکه را ممکن سازد و همچین برای یک input sequence که تا به حال توسط شبکه رویت نشده خروجی تولید کند. بطور مثال برای یک ورودی صوتی بدون اینکه مشخص باشد چه کلمه ای بیان شده، کلمه را حدس بزند.

برای آشنایی  با  CTC در ادامه نحوه عملکرد آن بر روی صوت و دست نوشته بررسی خواهد شد

ادامه خواندن Connectionist Temporal Classification – CTC

تبدیل Affine و Perspective در OpenCV

get Perspective Transform

اگر بخواهیم یک تبدیل affine رو یک تصویر انجام بدهیم می توانیم از getPerspectiveTransform استفاده کنیم. به این صورت که مختصات چهار گوشه قسمتی از تصویر که می خواهیم تبدیل رو آن انجام شود را مشخص می کنیم (points_A) و همچنین مشخص می کنیم که می خواهیم این چهار نقطه رو چه نقاطی در تصویر جدید نگاشت شوند(points_B). تابع getPerspectiveTransform یک ماتریس 3*3 بر می گرداند که درواقع اگر هر کدام از چهار نقطه رو تصویر اصلی به فرم [xi, yi, 1] در این ماتریس ضرب شوند حاصل نقاط مورد نظر روی تصویر جدید خواهند بود که به فرم [ti*x’i, ti* y’i, ti] خواهد بود(مختصات تصویر جدید ‘x و ‘y می باشد و ti عدد ثابت است). حال برای اینکه تصویر جدید را ایجاد کنیم از getPerspectiveTransform استفاده می کنیم که به عنوان ورودی عکس اولیه و ماتریس تبدیل و اندازه عکس جدید را می گیرد و عکس جدید را برمی گرداند.

get Affine Transform

 

با استفاده از  getAffineTransform نیز می توان یک تبدیل affine انجام داد با این تفاوت که از سه نقطه استفاده می کنیم. طبق رابطه ی مشخص شده, حاصل getAffineTransform یک ماتریس 2*3 می باشد که اگر هر کدام از سه تقطه اولیه به فرم      [xi, yi, 1] در این ماتریس ضرب شوند حاصل نگاشت این نقاط در تصویر جدید به فرم [x’i, y’i] خواهد بود. با استفاده از warpAffine تصویر جدید به دست می اید که ورودی ان همان طول و عرض تصویر اصلی و تابع تبدیل(M) و تصویر اولیه می باشد.

مراحل یک پروژه یادگیری ماشین

در پست قبل با دسته‌بندی‌های اصلی الگوریتم‌های یادگیری ماشین آشنا شدیم. در این نوشته قصد داریم مطالب زیر را بررسی کنیم:

  • مراحلی که یک الگوریتم supervised و unsupervised باید طی کنند تا یادگیری آنها کامل شود
  • ارزیابی مدل حاصل از این الگوریتم ها
مراحل یک الگوریتم supervised machine learning:

  • Data acquisition(جمع آوری داده): جمع اوری داده های بسیار زیاد که شامل نامگذاری آنها نیز می شود.
  • Data cleaning(تمیز کردن داده): از بین بردن اختلال در داده

داده هایی که در بخش قبل جمع آوری و پیش پردازش شد را به دوبخش تقسیم می کنیم:

 Train Dataset (مجموعه داده یادگیری): برای یادگیری و راه اندازی الگوریتم از این مجموعه داده استفاده می شود

 Test Dataset (مجموعه داده تست): بعد از یادگیری از این مجموعه داده استفاده می کنیم تا میزان کارایی الگوریتم را بسنجیم. مجموعه داده یادگیری و  تست، به این دلیل از هم جدا می شوند که شاید الگوریتم، مجموعه یادگیری را حفظ کند.

  • Train Model (مدل یادگیری): با استفاده از مجموعه داده یادگیری، ویژگی هایی که الگوریتم از داده ها یاد گرفته، بصورت یک مدل در می آید.
  • Evaluate Model (مدل سنجشی): با استفاده از مجموعه داده تست، مدلی که ایجاد شده، ارزیابی می شود. این فرایند بازگشتی است. به این معنی که وقتی ایرادات مدل یادگیری مشخص شد، این مدل دوباره تنظیم می شود تا ایرادات قبلی رفع شود.
یک مدل دیگر برای الگوریتم  supervised learning:

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

برای اینکه کارایی بدست آمده واقعی باشد. مجموعه داده خود را به سه قسمت تقسیم می کنیم:

(یادگیری)Train – (پیشرفت) Development – (تست )Test

اینبار برای تنظیم کردن پارامتر ها به کمک رابطه بازگشتی بین مدل یادگیری و مدل تست , از مجموعه داده پیشرفت استفاده می کنیم. و برای ارزیابی نهایی از مجموعه داده تست استفاده می کنیم.

مراحل یک الگوریتم unsupervised machine learning:

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

همچنین یادگیری در اینجا فرق دارد. زیرا در قسمت supervised با توجه به ویژگی هایی که مشخص شده بود، داده در یکی از گروه هایی که ما مشخص کرده بودیم جای می گرفت و کاملا مشخص بود که انتظار داریم بعد از پیش بینی داده در چه گروهی قرار بگیرد. ولی در unsupervised از آنجا که ما فقط ویژگی ها رو مشخص می کنیم و گروه ها را مشخص نمی کنیم، بعد از انجام پیش بینی باید بررسی کنیم که الگوریتم بر چه اساسی داده ها را دسته بندی کرده است.

Model Evaluation

در این قسمت به روش های ارزیابی الگوریتم هایی که در بالا توضیح داده شد می پردازیم.

ازیابی Supervised Learning:

Accuracy (دقت): تعداد پیش بینی درست از تعداد کل پیش بینی ها

Recall, Precision: در دقت پیش بینی انجام شده اینکه پیش بینی غلط واقعا مربوط به کدام نامگذاری است اهمیتی ندارد. ولی در Recall, Precision اهمیت دارد. مثلا برای تشخیص دادن غده ی سرطانی اینکه شخصی که سرطان دارد به اشتباه تشخیص داده شود که سرطان ندارد خیلی بدتر است تا اینکه حالت برعکس آن اتفاق بیفتد.

MAE, MSE, RMSE: برای regression(داده های پیوسته) استفاده می شود. نحوه کار آنها براساس میزان فاصله با جواب درست است. مثلا اگر بخواهیم قیمت یک خانه را با توجه به متراژ آن پیش بینی کنیم می توانیم از این معیار ها استفاده کنیم

ارزیابی Unsupervised Learning:

همانطور که گفته شد در قسمت supervised ارزیابی بسیار آسان تر است چون که دسته ها مشخص هستند و با توجه به این که دسته مشخص شده برای داده های تست درست است یا نه، می توانیم ارزیابی را انجام دهیم. ولی ارزیابی برای unsupervised آسان نیست. چون که الگوریتم با توجه به پارامتر هایی که خودش انتخاب می کند دسته بندی را انجام می دهد. شاید از نظر انسان همان داده ها بصورت دیگری دسته بندی شوند.

  می توان میزان کارایی را بصورت یک عدد تعریف کرد. برای مثال می توان تعیین کرد که فصله دلخواه ما برای یک داده از یک دسته یا فاصله دلخواه ما برای داده از عناصر موجود در دسته ای که داده به آن متعلق است چقدر باشد. با این روش می توان رابطه بازگشتی بین مدل یادگیری و مدل ارزیابی را ایجاد کرد تا مقدار عدد ذکر شده به مقدار دلخواه ما نزدیک شود.

در مثال بالا با توجه به اینکه چه معیاری تعریف کنیم دسته بندی متفاوتی بدست می آید.