عکس

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

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

روش های انجام این کار و متدهای مختلف در ادامه به تفضیل شرح داده خواهند شد.

۱. مقدمه

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

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

عکس09

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

هدف از این پروژه، پیاده سازی کلی این تکنولوژی در موتور بازی سازی یونیتی است. بطوری که در بازی کنترل تمامی رخدادها را از طریق گفتار فارسی انجام دهیم.

عکس49

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

۲. کارهای مرتبط

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

به طور تخصصی تر یک سیستم شناسایی زبان باید به طور دقیق و جزئی جنبه های مختلف مربوط به اطلاعات گفتار را استخراج کند و از آن ها بهره برداری کند، آن ها باید به اندازه کافی انعطاف پذیر بوده تا خود را با تنوع گوینده های مختلف (مرد ، زن، بچه و ...) وفق دهند. برای استخراج ویژگی های مورد نیاز به طور معمول ابتدا سیگنال گفتار به پنجره های کوتاهی با طول مثلآ 20 میلی ثانیه که با هم همپوشانی دارند تقسیم میگردد. علت آن هم اینست که مشخصات سیگنال گفتار و مجاری گفتار در حین بیان یک گویش تغییر می کند. بنابراین، سیگنال گفتار سیگنالی غیر ایستا است و خواص آماری آن در طول زمان تغییر می کند. ولی از آنجا ?:7?7/ه اندام¬های گفتار به کندی تغییر حالت می دهند یا به عبارت دیگر انسان نمی تواند آنها را سریع تراز حد خاصی تغییر دهد، در بازه های زمانی کوچکی می توان آنرا سیگنال ایستان فرض کرد. به همین دلیل، سیگنال گفتار رابه فواصل زمانی کوتاه(20 تا 40) میلی ثانیه تقسیم می کنند و تحلیل سیگنال در این فواصل کوتاه بر روی سیگنال انجام میگیرد. این قطعات گفتاری را پنجره یا قاب می نامند. سپس در مرحله استخراج ویژگی، از هر قاب ویژگی های گفتاری استخراج می شوند.

برای هر قاب ، سیگنال گفتار هر زبان، 39 ضریب مبتنی بر ضرایب (MFCC (Mel Frequency Cepstram Coefficients و سه ضریب مبتنی بر انرژی آن قاب استخراج شده اند.

۲.۰.۱. تصاویر spectrogram در صداهای مختلف :

عکس1

۲.۰.۲. نحوه استخراج ضرایب بردارهای ویژگی:

ضرایب MFCC الهام گرفته از خواص شنیداری گوش انسان در دریافت و فهم گفتار می باشد. جهت محاسبه ضرایب MFCC هر قاب، سیگنال مربوط به
هر زبان را ابتدا در پنجره همینگ ضرب کرده و سپس از سیگنال بدست آمده تبدیل فوریه گسسته FFT گرفته می شود . اندازه تبدیل فوریه گرفته شده، محاسبه شده وبرروی پوش طیف بدست آمده مراحلی را انجام می دهیم تا این ضراسب استخراج شود.

در نهایت هم از طریق شبکه های عصبی و مدل مخفی مارکوف (HMM(Hidden Markov Models پردازش می کنیم.

۳. روند دقیق کار و آزمایش

۳.۱. مقدمه ای بر مدلهای مخفی مارکف و جعبة ابزار HTK :

HTK یک جعبه ابزار برای ساختن مدل مخفی مارکف1 است. مدل مخفی مارکف برای مدل نمودن هر سری زمانی مورد استفاده قرار می گیرد. در ابتدای کار جعبه ابزار HTK برای ساخت ابزارهای پردازش گفتار مبتنی بر مدل مخفی مارکف طراحی گردید. به همین دلیل اغلب پشتیبانی های ساختاری در جعبه ابزار HTK به این کار اختصاص داده شده است. شکل (1) دو مرحله اصلی پردازش در این جعبه ابزار را نشان می دهد. در مرحله نخست (مرحله آموزش)، ابزار یادگیری2 HTK برای تخمین پارامترهای مجموعه ای از مدلهای مخفی مارکف برای واج های مجموعه آموزش و برچسب های انتساب یافته به آنها مورد استفاده قرار می گیرد. در مرحله دوم (مرحله آزمون)، واج های ناشناخته ، توسط ابزار بازشناسی HTK، برچسب دهی می شوند.

عکس111

۳.۱.۱. اصول اصلی مدل مخفی مارکف

سیستم های بازشناسی گفتار عموما فرض می کنند که سیگنال گفتار یک realization از پیام کد شده به صورت دنباله ای از یک یا چند سمبل است. برای به دست آوردن این دنباله از سمبل ها، با توجه به یک جمله ادا شده، شکل موج گفتار پیوسته، در ابتدا به رشته ای از بردارهای پارامتری گسسته هم فاصله تبدیل می شود. (فرض شده است که گفتار برای یک بردار منفرد، حدود 10 میلی ثانیه، ایستان در نظر گرفته می شود. اگرچه این فرض کاملا صحیح نیست، ولی منطقی و قابل توجیه است.)
در مقوله بازشناسی گفتار دو مسئله اهمیت دارد؛ نخست آنکه نگاشت میان سمبل ها به گفتار، یک نگاشت یک به یک نیست. یعنی سمبلهای متفاوت ممکن است به اصوات گفتاری یکسانی (واحدهای آوایی) نگاشته شوند. دوم آنکه، مرز میان سمبلها به سادگی از روی شکل موج گفتار قابل تشخیص نمی باشد. برای رفع این مشکل، یک راه حل ساده اولیه، انتخاب حیطه تشخیص کلمات مجزا3 می باشد. در ادامه ابتدا به این مقوله پرداخته شده است.

۳.۱.۲. تشخیص کلمات مجزا

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

عکس112

که ot بردار گفتار مشاهده شده در زمان t است. مسئله تشخیص کلمات مجزا، معادل است با محاسبة عبارت زیر:

عکس113

که wi، iامین کلمه از فرهنگ کلمات است. این احتمال توسط رابطه بیز به راحتی قابل محاسبه است:

عکس114

که (P(wi مقدار احتمال پیشین و (P(O|wi مقدار درست نمایی برای مشاهدات به شرط کلمه wi می باشد. محتمل ترین کلمه تنها به مقدار درست نمایی (P(O|wi بستگی دارد. در بازشناسی گفتار مبتنی بر مدل مخفی مارکف فرض شده است که رشته بردارهای گفتار مشاهده شده، متناظر با هر کلمه، توسط یک مدل مارکف تولید شده است. به شکل (2) توجه نمایید. این شکل نمونه ای از این فرایند را نشان می دهد. شکل از 6 وضعیت مختلف تشکیل شده است. در وضعیت های شروع و خاتمه، مشاهده ای صورت نمی گیرد. دنباله 1، 2، 2، 3، 4، 4، 5 و 6 چگونگی گذار میان وضعیت ها را نشان می دهد. در طول این گذار دنباله سمبل های o1 تا o6 تولید می شوند.

عکس115

مدل مخفی مارکف، یک ماشین حاوی تعداد حالات محدود است که وضعیت (state) آن، در هر واحد زمانی تغییر می کند. اگر در واحد زمانی t وارد وضعیت j شویم، یک بردار گفتار ot با توجه به توزیع احتمال (bj(ot تولید می شود. گذار از وضعیت i به وضعیت j نیز احتمالی بوده و با احتمال گسستة aij مدیریت می شود. در HTK، در حالت شروع و خاتمه، مشاهده ای انجام نمی شود. این دو حالت به منظور امکان ترکیب مدل ها و ساخت مدل های ترکیبی ایجاد شده اند. احتمال توام تولید بردار مشاهدات O توسط مدل M و گذار از وضعیتهای X، در شکل (2)، توسط رابطه زیر مشخص می شود:

عکس116

در عمل تنها رشتة مشاهدات O شناخته شده است و دنباله وضعیتهای X مخفی است. به همین دلیل است که این مدل، مدل مخفی مارکف نامیده شده است.
با فرض آنکه X ناشناخته است، مقدار درست نمایی با محاسبه حاصل جمع رابطه زیر بر روی تمام وضعیتهای ممکن ( X=x(1),x(2),x(3),…,x(T انجام می شود:

عکس117

که ( x(0 وضعیت شروع و (x(T+1 وضعیت خاتمه محسوب می شود. با در نظر گرفتن محتمل ترین رشته از وضعیت ها، رابطه زیر به صورت زیر تغییر می کند:

عکس118

در تمام مطالب بیان شده فرض شده است که {aij} و {bj(ot)} برای هر مدل Mi شناخته شده هستند. (در فاز آموزش یاد گرفته شده اند.) با توجه به مطالب گفته شده، مراحل استفاده از یک مدل مخفی مارکف، برای بازشناسی کلمات مجزا از هم به صورت زیر بیان شده اند. شکل (3) این مراحل را نشان می دهد.

عکس119

  1. یک مدل مخفی مارکف برای هر کلمه از فرهنگ لغت با استفاده از تعداد محدودی از نمونه های آن کلمه آموزش داده می شود.

  2. برای تشخیص کلمات ناشناخته، درست نمایی هر مدل برای تولید آن کلمه محاسبه می شود. محتمل ترین مدل، کلمه را بازشناسی می کند.

۳.۱.۳. نحوه انتخاب توزیع احتمالات در نظر گرفته شده در مدل

قبل از آنکه مسئله تخمین پارامترهای مدل مخقی مارکف با جزئیات توضیح داده شود، لازم است که شکل توزیع های خروجی {bj(ot)} مشخص شود. مانند اغلب سیستم های مدل مخفی مارکف با توزیع پیوسته، جعبه ابزار HTK نیز برای توزیع های خروجی، توزیع مخلوط گوسی را در نظر می گیرد. HTK اجازه می دهد که هر بردار مشاهداتی در زمان t، به S تا مجموعه داده Ost تقسیم شوند. فرمول لازم برای محاسبه( bj(ot به صورت زیر می باشد:

عکس120

که Ms تعداد مولفه های مخلوط گوسی در جریان s، Cjsm وزن mامین مولفه و توزیع گوسی چند متغیره با بردار میانگین و ماتریس کوواریانس می باشد که به صورت رابطi زیر بیان می شود:

عکس121

که n ابعاد بردار مشاهدات o را نشان می دهد.

۳.۱.۴. تخمین Baum-Welch

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

عکس122

اگر تنها یک حالت j در مدل مخفی مارکف وجود داشته باشد، تخمین میانگین و واریانس به سادگی توسط رابطه زیر انجام می شود:

عکس123

گرچه در عمل بیشتر از یک وضعیت وجود دارد و رشته وضعیت ها را نمی شناسیم، اما می توان حدس اولیه ای مبتنی بر آنکه در هر حالت چه مشاهده ای خواهیم داشت، انجام داده، دو رابطه بالا برای استفاده در هر وضعیت قابل استفاده خواهند بود. در HTK از دستور HINIT بدین منظور استفاده می شود. HINIT ابتدا بردارهای مشاهدات را به صورت مساوی بین حالتهای مختلف تقسیم نموده و سپس دو روابط بالا را برای به دست آوردن مقادیر اولیه برای هر وضعیت مورد استفاده قرار می دهد. سپس محتمل ترین رشته وضعیت ها با کمک الگوریتم ویتربی حاصل می شود. در ادامه بردار مشاهدات مجددا به وضعیت ها انتساب یافته، سپس با استفاده از دو رابطه بالا مقادیر اولیه بهتری حاصل می شود. فرایند تا زمانی ادامه می یابد که پارامترهای تخمین زده شده تغییر نکنند.
از آنجایی که درست نمایی کامل هر رشته از مشاهدات بر اساس حاصل جمع تمام رشته وضعیتهای محتمل است. به جای انتساب هر بردار مشاهده به یک وضعیت خاص، هر بردار مشاهده به تمام وضعیت ها منسوب می شود. بر اساس احتمال آنکه هنگام مشاهده آن بردار، مدل در آن وضعیت قرار داشته باشد. فرض کنید (Lj(t احتمال حضور در وضعیت j در زمان t باشد. آنگاه دو رابطه قبلی را می توان به صورت زیر نوشت:

عکس124

المان (Lj(t بر اساس پارامترهای الگوریتم Forward-backward مورد محاسبه قرار می گیرد.

عکس125

احتمال توام مشاهده سمبل های O1 تا Ot و قرار گرفتن در وضعیت j در زمان t است. در وضعیتهای 1 و N (دو حالت ابتدایی و انتهایی) هیچ مشاهده ای صورت نمی گیرد. شرایط اولیه برای رابطه بازگشتی فوق عبارتست از:

عکس126

برای محاسبه احتمال شرطی (Bj(t، احتمال شرطی مشاهده سمبل های Ot+1 تا OT به شرط آنکه در زمان t سمبل j مشاهده شده باشد، از رابطة backward زیر محاسبه می شود:

عکس127

روابط سوم و چهارم از روابط بالا شرایط اولیه به کارگیری الگوریتم backward و دو رابطه آخر نحوه محاسبة( Lj(t را بر حسب مقادیر محاسبه شده به صورت backward و forward ارائه می کند. الگوریتم ارائه شده بر اساس روابط بالا در HTK ، عبارت ، HRest نامیده می شود.

۳.۱.۵. بازشناسی و کدگشایی ویتربی

در فاز بازشناسی، ( P(O|Mi مانند الگوریتم backward-forward استفاده می شود. با این تفاوت که عمل جمع (summation) به عمل ماکزیمم گیری تبدیل می شود. فرض کنید ( Qj(t مشاهدات O1 تا Ot و حضور در وضعیت j در زمان t را نشان می دهد. داریم:

عکس128

در جعبه ابزار HTK، برای انجام مراحل فوق الذکر از دستورات Hvite و HNet و HRec استفاده می کنیم.

۳.۱.۶. بازشناسی گفتار پیوسته

برای انتقال از حالت بازشناسی کلمات کلیدی مجزا به حالت بازشناسی گفتار پیوسته، کافی است که مدلهای HMM را به یکدیگر متصل نماییم. واضح است که وضعیت های شروع و خاتمه هر مدل برای انجام این اتصالات مورد استفاده قرار می گیرد.
از مسائل مطرح در بحث بازشناسی گفتار پیوسته آن است که، داده آموزش برای گفتار پیوسته باید شامل جملات پیوسته بوده و در کل محدوده ای که سگمنت های گفتار را به هر مدل زیر کلمه ربط می دهد، شناخته شده نیست. برای رفع این مشکل در HTK از HErest که آموزش ادغام شده را انجام می دهد، استفاده می شود. آموزش ادغام شده از روال Baum-welch مشابه با حالت بازشناسی کلمات مجزا استفاده می کند. اما به جای آموزش هر مدل به صورت مستقل، تمام مدل ها به صورت موازی آموزش داده می شوند. مراحل هفتگانه الگوریتم عبارتند از:

  1. مقدار دهی اولیه انباره ها برای تمام پارامترهای HMMها

  2. دریافت عبارت آموزشی بعدی

  3. ساختن یک HMM ترکیبی با ترکیب دنباله HMM های متناظر با سمبل های هر عبارت آموزشی

  4. محاسبة احتمالات backward و forward برای ترکیب HMM ها.

  5. استفاده از احتمالات backward و forward به دست آمده از مرحله قبل، برای محاسبه احتمال اشغال هر وضعیت در هر زمان و به روز رسانی انباره ها

  6. تکرار از مرحله 2 تا زمانی که تمام عبارات آموزشی پردازش شوند.

  7. استفاده از انباره ها برای محاسبة تخمینهای پارامتری جدید برای تمام HMMها.

این مراحل تا زمانیکه الگوریتم به همگرایی مورد نیاز برسد، ادامه پیدا می کند. در HTK به جای الگوریتم ویتربی از Token Passing Model استفاده می شود. فرض کنید که هر وضعیت j از یک HMM در زمان t یک token را نگهداری کند. این token، یک انطباق جزئی بین رشته مشاهدات O1 تا Ot و مدل M، با توجه به این شرط که مدل در زمان t در وضعیت j است، نشان می دهد. مراحل اصلی الگوریتم به صورت زیراست:

  1. یک کپی از هر token در وضعیت i به تمام وضعیت های j متصل به وضعیت i پاس داده شده و مقدار احتمال کپی را با پارامتر[(( log[aij]+log[bj(o(t افزایش دهید.

  2. در هر وضعیت، همه tokenها به جز token دارای بالاترین احتمال را حذف نمایید.
    نکته مهم در ارتباط با الگوریتم token passing آن است که به سادگی به حالت بازشناسی گفتار پیوسته، تعمیم می یابد.

۳.۲. معرفی جعبة ابزار HTK

۳.۲.۱. جعبه ابزار HTK

ابزار HTK همانطور که در شکل(4) نشان داده شده شامل چهار مرحله اساسی آماده سازی اطلاعات، آموزش، آزمون و آنالیز می‌باشد.

عکس129

۳.۲.۲. ابزارهای آماده‌سازی اطلاعات

به منظور ساختن یک مجموعه از HMMها یک مجموعه از فایل‌های گفتار و برچسب‌های مربوط به آنها نیاز می‌باشد. قبل از اینکه دیتا‌بیس اطلاعات گفتاری بتواند قابل استفاده برای آموزش باشد، باید به شکل پارامتریک مناسب و فایل‌های برچسب مرتبط با آنها به فرمت صحیح تبدیل گردند. ابزار HCopy برای پارامتریک کردن سیگنال گفتار( استخراج ویژگی) مورد استفاده قرار میگیرد. HCopy برای کپی نمودن یک یا چند فایل مبدا به یک فایل خروجی مورد استفاده قرار می‌گیرد. به طور عادی HCopy کل ویژگیهای یک فایل را کپی می‌کند، اما مکانیسم‌های مختلفی برای استخراج قسمتی از فایل و متصل نمودن فایل‌ها در دسترس می‌باشد. به وسیله تنظیم مناسب متغیرهای پیکربندی، همه فایل‌های ورودی همانطور که خوانده می شوند، می توانند به فرم پارامتریک تبدیل شوند. بنابراین کپی نمودن هر فایل در این حالت، کدگذاری مورد نیاز را انجام می دهد. با استفاده از دستور زیر عمل استخراج ویژگیها انجام می‌گیرد:

>>> HCopy -A -T 1 -C confignist -C config -S wavtomfcc39.txt

سوئیچ A- باعث چاپ خط دستور مربوطه شده و سوئیچ T 1- باعث نشان دادن مراحل اجرای ابزار میگردند. این دو سوئیچ از سوئیچ‌های عمومی بوده و برای همه ابزارها قابل استفاده می باشند. از سوئیچهای عمومی دیگر V- ، برای چاپ اطلاعات مربوط به نسخه ابزار و D- ، برای نمایش تنظیمات مربوط به پیکربندی4 می‌باشد. در دستور فوق از این دو سوئیچ استفاده نکرده ایم. سوئیچ عمومیC- برای مشخص کردن نام فایل پیکربندی و سوئیچ عمومی S- برای مشخص کردن نام فایل اسکریپت5 می‌باشد. در ابزار HCopy از دو فایل پیکربندی با نام‌های Confignist و Config استفاده نموده‌ایم. فایل Confignist قالب فایل‌های ورودی را مشخص می نماید. به عنوان مثال اگر فرمت فایل‌های صوتی Nist باشد محتوای فایل پیکربندی به صورت زیر خواهد بود.

SOURCEFORMAT = NIST
فایل Config قالب فایل‌های خروجی را مشخص مینماید. محتوای این فایل که در ابزار HCopy استفاده شده به صورت زیر است.
TARGETKIND = MFCC_0_D_A_Z
TARGETRATE = 100000.0
SAVECOMPRESSED = T
SAVEWITHCRC = T
WINDOWSIZE = 250000.0
USEHAMMING = T
PREEMCOEF = 0.97
NUMCHANS = 26
CEPLIFTER = 22
NUMCEPS = 12
ENORMALISE = T
ZMEANSOURCE = T
USEPOWER = T
BYTEORDER = VAX

در TARGETKINDNنوع ویژگی را بر اساس جدول زیر مشخص می نماید. USEHAMMING نوع پنجره، TARGETRATE نرخ پرش پنجره و WINDOWSIZE طول پنجره را مشخص می‌نماید. عدد 250000.0 نشاندهنده طول پنجره همینگ یعنی 25 میلی‌ثانیه می‌باشد( HTK از واحد 100 نانو ثانیه استفاده می نماید.) در این مثال MFCC_0_D_A_Z و NUMCEPS=12 یعنی بردار ویژگی شامل 12 ضریب MFCC ، ضریب صفر کپسترال، مشتقات اول و دوم آنها و میانگین صفر ضرایب ثابت می باشد. همچنین USEHAMMING = T به معنی استفاده از پنجره همینگ می‌باشد. NUMCHANS = 26 تعداد کانال‌های فیلتربانک بکاررفته را نشان می دهد. این جدول نوع ویژگی و علامت اختصاری تعریف آن در پیکربندی HCopy را نشان می دهد.

عکس130

ما نیاز خواهیم داشت که فایل‌های برچسب را نیز آماده نماییم. به عنوان مثال برچسب‌های استفاده شده در فایل‌های برچسب اصلی به دلیل اختلاف در مجموعه واج های استفاده شده، دقیقا مطابق با خواسته ما نخواهند بود. همچنین آموزش HMM به برچسب های وابسته به متن نیاز دارد. ابزار HLed یک ویرایشگر برچسب می باشد که برای ایجاد تبدیلات مورد نیاز به فایل های برچسب طراحی شده است. فایل خروجی HLed می تواند یک فایل6MLF باشد که معمولا برای پردازش های بعدی بسیار مناسب می باشد. به عنوان مثال دستور Hled به صورت زیر فایل phone.mlf را که حاوی برچسب‌های مجموعه آموزش ما می باشد، را تولید می نماید.

>>>HLEd  -A  -T  1  -D  -n   tlist  -i  phone.mlf  -G  TIMIT  -S  labfiles_noisy_train.txt  .\LIB\timit.led

در دستور فوق اسکریپت timit.led به همه فایل‌های برچسب که اسامی آنها در فایل labfiles_noisy_train.txt وجود دارد، اعمال می‌شود. timit.led یک فایل متنی و حاوی دستورات HTK می‌باشد. به عنوان مثال در هنگام استفاده از دیتاست TIMIT ، 61 سمبل اصلی واج‌ها اغلب به 48 سمبل ساده از واج‌ها نگاشت می‌شوند. هدف از این نگاشت حذف همه‌ی توقف‌های حلقی7 ، جایگزینی همه پایان‌های قبلی یک توقف صدادار با یک پایان صدادار عمومی (vcl) ، همه پایان‌های قبلی یک توقف بی صدا با یک پایان بی صدای عمومی (cl) و انواع مختلف یک سکوت با یک سکوت عمومی (sil) می‌باشد. اسکریپت برای انجام این اعمال به صورت زیر می باشد.

>>># Map 61 Phone Timit Set -> 48 Phones
>>>SO
>>>DE q
>>>RE cl pcl tcl kcl qcl
>>>RE vcl bcl dcl gcl
>>>RE sil h# #h pau

دستور خط دوم (SO) یک دستور سراسری برای مرتب کردن برچسب‌ها است. دستور خط سوم (DE) یک دستور حذف می‌باشد. این دستور همه برچسب‌هایی را که در سمت راست آن می باشد، حذف می نماید. دستور خط سوم (RE) برچسب‌های (pcl,tcl,kcl,qcl) را با برچسب (cl) جایگزین مینماید. در زیر نمونه‌ای از فایل phone.mlf را می‌بینیم.

phone.mlf
"Timit/spc39/TRAIN/DR1/FCJF0/SA1.lab"
0 1906250 sil
1906250 2849375 sh
2849375 3576875 ih
3576875 4151250 hh
...
واحد زمان در فایل های MLF ، 100 نانو ثانیه می باشد.

۳.۲.۳. ابزارهای آموزش

دومین گام در ایجاد سیستم، تعریف توپولوژی مورد نیاز برای هر HMM به وسیله تعریف و نوشتن یک نمونه اولیه می باشد. HTK اجازه می دهد که HMMها با هر توپولوژی دلخواه ساخته شوند. تعاریف HMM به صورت فایل های متنی ساده قابل ذخیره سازی بوده و بنابراین با هر ویرایشگر متنی مناسب قابل ویرایش می باشند. هدف از تعریف نمونه اولیه مشخص نمودن همه خصوصیات و توپولوژی HMM می باشد. پارامترهای واقعی HMM توسط ابزارهای آموزش محاسبه خواهند شد. لازم است، مقادیر معقولی برای احتمالات گذار حاصل شود؛ لیکن فرآیند آموزش نسبت به این مقادیر خیلی حساس می باشد. یک استراتژی ساده و قابل قبول برای انتخاب این احتمالات این است که احتمالات گذار خروجی از هر حالت را مساوی در نظر بگیریم.
فرآیند آموزش واقعی در چند مرحله اجرا می شود. جزئیات بیشتر این مراحل در شکل(5) تفسیر شده است. در ابتدا، یک مجموعه اولیه از مدل ها باید ایجاد گردد. اگر اطلاعات گفتاری که محل مرزهای زیرکلمات8 ( مثلا فون ) آن علامت گذاری شده باشد، وجود داشته باشد، می تواند به عنوان اطلاعات خودراه انداز مورد استفاده قرارگیرد. در این مثال ابزارهای HInit و HRest با استفاده از اطلاعات برچسب خورده برای آموزش کلمات مجزا مورد استفاده قرار می گیرد. هر یک از HMMهای مورد نیاز به طور جداگانه ایجاد می گردند. HInit همه اطلاعات خودراه انداز را خوانده و نمونه واج های مورد نیاز را بریده و جدا می کند. سپس به صورت iterative یک مجموعة اولیه از مقادیر پارامتری با استفاده از یک الگوریتم segmental k-means محاسبه می نماید. در سیکل اول دیتای آموزش به صورت یک شکل قطعه قطعه شده، هر حالت از مدل با قطعه اطلاعات مربوطه متناظر می شود. و سپس میانگین ها و واریانس ها تخمین زده می شوند. چنانچه مدل های مخلوط گوسی آموزش داده شده باشند یک فرم تغییر یافته از الگوریتم کلاسترینگ مورد استفاده قرار می گیرد. در سیکل های متوالی دوم، قطعه قطعه نمودن یک شکل، توسط تراز ویتربی9 جایگزین می شود. مقادیر پارامتریک اولیه توسط HInit محاسبه شده و سپس به وسیله HRest باز تخمین زده می شود. دوباره از اطلاعات برچسب زده شده خودراه انداز استفاده می شود . اما در این مرحله الگوریتم segmental k-means با الگوریتم باز تخمین Baum-Welch توصیف شده در فصل قبل جایگزین می شود. زمانی که اطلاعات مربوط به برچسب ها در دسترس نباشد همه مدل ها به طور مشابه مقداردهی اولیه شده و میانگین و واریانس حالتها برابر با میانگین و واریانس کلی گفتار می باشد. در این حالت از ابزار HCompv برای محاسبه میانگین و واریانس کلی استفاده می شود. وقتی که مجموعه ای از مدل های اولیه ایجاد شده است ابزار HERest برای انجام آموزش درونی10 با استفاده از کل مجموعه آموزش استفاده می شود.

عکس131

همانطور که گفته شد دستور Hinit برای هر کلاس یک مدل اولیه ایجاد می نماید. به عنوان مثال قالب کلی دستور HInit بکاررفته در این مثال برای ایجاد مدل اولیه سکوت به شکل زیر می باشد.

>>>HInit  -A  -T  1  -l  sil  -o  sil  -M  \phone0  -S  train_mfc.scp  -I  labelfiles.mlf   proto

و دستور HRest یک باز تخمین برای هر یک از مدل‌های اولیه ایجاد شده توسط HInit، محاسبه می نماید. قالب کلی دستور HRest بکاررفته در این مثال، برای بازتخمین مدل اولیه سکوت به شکل زیر می باشد

>>>HRest  -A  -T  1  -S  train_mfc.scp  -I  labelfiles.mlf   -l  sil  -M  \phone1  \phone0\sil

در مرحله بعد با استفاده از دستورHCompv میانگین و واریانس کلی ویژگی ها را بدست می آوریم. شکل کلی این دستور به صورت زیر است:

>>>HCompv -A -T 1 -C config  -f  0.01 -m -S  train_mfc.scp  -M \phone1 -I  labelfiles.mlf  proto

خروجی این دستور فایل های vfloor و proto می باشد. فایل vfloor که حاوی واریانس ویژگی ها می‌باشد را به انتهای فایل macros می چسبانیم و در مسیر به آدرس phone1/ قرار می‌دهیم.
در مرحله بعد با استفاده از دستور HERest زیر، مشخصات کلیه مدل ها که به صورت فایل های جداگانه هستند تخمین زده شده و در فایل hmmdefs ذخیره می گردد.

>>>HERest -A -T 1 -d \phone1 -C config -I labelfiles.mlf -t 250.0 150.0 1000.0 –S train_mfc.scp –H…

phone1\macros -H \phone1\hmmdefs –M \hmm1 monophones0

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

>>>HERest  -A  –T  1  -C config  –I  lablefiles.mlf  –t   250.0 150.0 1000.0 -S train_mfc.scp  -H…

\hmm1\macros -H \hmm1\hmmdefs -M \hmm2 monophones0

۳.۲.۴. ابزارهای آزمایش

HTK ابزار آزمایش HVite را که از الگوریتم token passing استفاده می نماید برای انجام تشخیص گفتار مبتنی بر ویتربی ارائه نموده است. ورودی هایی این ابزار یک شبکه که دنباله مجاز کلمات را توصیف می نماید، یک دیکشنری که چگونگی ادای کلمات را تعریف می کند و یک مجموعه از HMMها می باشد. این با تبدیل شبکه کلمات به یک شبکه واج و سپس نسبت دادن HMM مناسب به هر یک از واج های نمونه، عمل می کند. با استفاده از این ابزار تشخیص بر روی فایل های گفتار ذخیره شده یا بر روی ورودی صوتی به طور مستقیم قابل انجام می باشد. شبکه کلمات مورد نیاز برای ابزار HVite معمولا لوپ های ساده ای از کلمات هستند که هر کلمه بتواند هر کلمه دیگر را دنبال نماید و یا گراف های جهت داری هستند که نقش یک گرامر حالت محدود را ایفا می نمایند. شبکه کلمات با استفاده از فرمت استاندارد HTK ذخیره می شوند. این یک فرمت متنی است و بنابراین با استفاده از یک ویرایشگر متنی قابل ایجاد می باشد. HTK دو ابزار برای ایجاد شبکه کلمات معرفی نموده است. ابتدا HBuild اجازه می دهد زیر شبکه ها با شبکه های سطح بالا ایجاد و استفاده شوند. اگرچه همان نوع سطح پایین استفاده می شود، از تعداد زیادی از تکرارها اجتناب می شود.
در این مثال با استفاده از دستور Hbuild زیر، یک شبکه کلمات را ایجاد می‌کنیم:

>>>HBuild -A -T 1 monophones0 wdnet_monophones0 

خروجی دستور فوق فایل wdnet_monophones0 بوده که حاوی شبکه کلمات می باشد.
برای مشخص نمودن شبکه کلمات به طور مستقیم یک نوع گرامر سطح بالا نیز می توان استفاده نمود. این نوع یادداشت مبتنی بر 11EBNF استفاده شده در کامپایلر مشخص بوده و با گرامر زبانی مشخص، استفاده شده در جدیدترین نسخه HTK سازگار می باشد. ابزار HParse برای تبدیل این نوع یادداشت به شبکه کلمات معادل آن استفاده می شود. قالب بکارگیری این ابزار در این مثال به صورت زیر است:

>>> HParse  net_monophones0  wdnet_monophones0

که فایل net_monophones0 گرامر زبانی مربوطه بوده و با استفاده از ابزار HParse تبدیل به شبکه کلمات معادل آن می گردد. برای مثال گرامر زبانی یک مثال دو کلاسه مانند VAD به صورت زیر می تواند باشد.

>>> H$phone = spe;
>>> ( sil <$phone> sil )

در نهایت قالب کلی استفاده از ابزار Hvite به صورت زیر می باشد.

>>> HVite -A -T 1 -H \hmm5\macros -H \hmm5\hmmdefs -S train_mfc.scp -i \result\recout.mlf …                           

-w wdnet_monophones0 dict_monophones0 monophones0

نمونه‌ای از خروجی Hvite به شکل زیر می باشد:
"c:/HTK_VAD/Timit/spc39/TRAIN/DR1/FCJF0/SA1.rec"
0 1900000 sil -1918.425659
1900000 2800000 sh -964.856140
2800000 3600000 iy -885.123413
3600000 4200000 hh -645.493408
4200000 5500000 ae -1363.288086
...

۳.۲.۵. ابزار آنالیز

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

>>> HResults    -A  -T  1  -I  labelfiles.mlf  monophones0  recout.mlf  >results.log 

ابزار فوق فایل recount.mlf را با فایل مرجع labelfiles.mlf مقایسه کرده و نتیجه این مقایسه را در فایل results.log ذخیره می نماید. نمونه ای از محتوای فایل خروجی results.log به صورت زیر می باشد.

HResults -n -A -T 1 -I labelfiles.mlf monophones0 recout.mlf

====================== HTK Results Analysis =======================
Ref : C:\HTK_VAD\Timit\little\labelfiles.mlf
Rec : C:\HTK_VAD\Timit\little\result\recout.mlf
------------------------ Overall Results --------------------------
SENT: %Correct=0.00 [H=0, S=380, N=380

4. WORD: %Corr=57.43, Acc=52.58 [H=6888, D=1653, S=3453, I=582, N=11994

نتیجه فوق در دو سطح جمله و کلمه می باشد. دو معیار که برای ارزیابی عملکرد تشخیص‌دهنده در سطح کلمه توسط این ابزار محاسبه می شود Corr و Acc می باشد. این دو معیار یعنی نرخ درستی واج12 و نرخ دقت درستی واج13 از روابط زیر بدست می آید:

عکس132

در این روابط N و H و I به ترتیب تعداد کل واج‌های گفتار و تعداد واج های درست تشخیص داده‌ شده و تعداد واج‌های درج شده می باشند. در ضمن D تعداد واج‌های حذف شده و S تعداد واج‌های جانشین‌شده می باشد. با استفاده از ابزار HResults می توان ماتریس کانفیوژن14 و معیار FOM را نیز بدست آورد.

۴.۱. دادگان گفتاری و نویز برای ارزیابی روشهای بازشناسی گفتار

۴.۱.۱. دادگان گفتاری TIMIT

دادگان TIMIT یک بانک اطلاعاتی از گفتار پیوسته انگلیسی است که توسط شرکت 15TI و دانشگاه [MIT16NIST) آن را تایید کرده است. این دادگان حاوی 6300 جمله است که توسط 630 گوینده و با 8 لهجه معمول آمریکای شمالی بیان شده اند. 70% گویندگان مرد و 30% آنها زن هستند. هر گوینده 10 جمله را ادا کرده است که 2 جمله از این 10 جمله توسط سایر گویندگان نیز ادا شده است. در مجموع 2432 جمله متمایز در TIMIT موجود است که شامل 2 جمله مشترک میان تمامی گویندگان، 450 جمله مشترک میان گروههای 7 نفری گویندگان و 1890 جمله تک گوینده است. کلیه کلمات و واج های موجود در جملات این بانک اطلاعاتی دارای برچسب زمانی هستند. بانک اطلاعاتی TIMIT به دو بخش آموزش و آزمون تقسیم شده است که بخش آموزش شامل 462 گوینده و بخش آزمون شامل 168 گوینده است و گویندگان و جملات ادا شده در هر یک از این دو بخش با یکدیگر متفاوتند.
دادگان TIMIT عاری از نویز است و معمولا برای ارزیابی نرخ بازشناسی واج ها در بازشناسی گفتار پیوسته مورد استفاده قرار می گیرد. هر چند که با وجود برچسب های زمانی برای کلمات و واج ها، برای ارزیابی نرخ بازشناسی کلمات مجزا نیز قابل استفاده است. برای کاربرد این دادگان در ارزیابی روشهای مقاوم سازی بازشناسی گفتار، باید نویز را بطور مصنوعی به این دادگان اضافه نمود.

۴.۱.۲. دادگان گفتاری TIDIGITS

دادگان TIDIGITS یک بانک اطلاعاتی گفتار انگلیسی است که در شرکت TI تهیه شده است. هدف از تهیه این دادگان طراحی و ارزیابی الگوریتم های بازشناسی مستقل از گوینده برای دنباله متصل اعداد17 بوده است. این دادگان حاوی گفتار 326 گوینده متشکل از 111 مرد، 114 زن، 50 پسر بچه و 51 دختر بچه است که هر یک از گویندگان 77 دنباله متصل عددی را بیان کرده اند. دنباله های عددی بیان شده با استفاده از 11 رقم زیر ساخته شده اند :
zero, oh, one, two, three, four, five, six, seven, eight, nine.
این دنباله های عددی بیان شده برای هر گوینده را می توان این گونه تقسیم کرد: 22 بار بیان اعداد مجزا ( 2 بار بیان برای هر عدد) و 11 مرتبه بیان برای هر یک از رشته های متشکل از 2، 3، 4، 5 و7 عدد که در مجموع 77 دنباله مذکور را برای هر گوینده شکل می دهند. تمامی این دنباله ها به دو زیر مجموعه دادگان آموزش و دادگان آزمایش تقسیم شده اند.
دادگان TIDIGITS نیز عاری از نویز است و برای ارزیابی روش های مقاوم سازی بازشناسی گفتار باید به آن بطور مصنوعی نویز اضافه نمود. اگرچه دادگان AURORA2 که با استفاده از TIDIGITS ساخته شده است، حاوی نسخه نویزی دنباله های بیان شده در TIDIGITS با استفاده از نویزهای کانال و جمع پذیر است.

۴.۱.۳. دادگان گفتاری AURORA 2

دادگان گفتاری AURORA 2 برای ارزیابی دقت بازشناسی سیستم های بازشناسی گفتار در محیط های نویزی و به ویژه برای ارزیابی روشهای جبران ویژگی در شرایط نویزی متفاوت مورد استفاده قرار می گیرد. این دادگان با استفاده از گفتار بزرگسالان دادگان گفتاری TIDIGITساخته شده است، به این ترتیب که ابتدا نرخ نمونه برداری به 8 کیلو هرتز کاهش یافته است و سپس فیلتری برای شبیه سازی تاثیر کانال انتقال تلفنی بر روی دادگان اعمال گردیده است. برای شبیه سازی اثر خط تلفن، دو نوع فیلتر استاندارد مورد استفاده قرار گرفته اند که با نامهای G.712 و MIRS شناخته می شوند و پاسخ فرکانسی آنها مطابق شکل (6) است.

عکس133

گفتار حاصل از اعمال فیلترهای فوق، دادگان تمیز گفتاری را شکل می دهند. سپس به این دادگان تمیز نویزهای جمع پذیری با نسبتهای سیگنال به نویز 20، 15،10،5،0و 5- دسی بل اضافه می شوند. نویزهای جمع پذیر بکار رفته عبارتند از: نویزهای مترو ، همهمه ، ماشین ، نمایشگاه ، رستوران ،خیابان ، فرودگاه و ایستگاه قطار .
در دادگان AURORA2 دو مجموعه مجزای آموزش و آزمایش مشخص شده اند. داده های آموزش خود به دو گروه تقسیم می شوند: داده های آموزش تمیز و داده های آموزش مختلط ( هم تمیز و هم نویزی) است. این دو مجموعة آموزش به وسیله فیلتر G.712 فیلتر شده اند و شامل 8440 جمله می باشند. در دادگان آموزش مختلط 8440 جمله مذکور به 20 زیرمجموعه 422 جمله ای دسته بندی شده اند. این زیرمجموعه ها در برگیرنده 4 نوع نویز مترو، همهمه، ماشین و نمایشگاه با چهار نسبت سیگنال به نویز 20،15،10،5 دسی بل و همچنین چهار زیرمجموعه بدون نویز می باشند.
دادگان آزمایش نیز به سه مجموعه تقسیم می شوند که با نامهای A,B,C شناخته می شوند. دادگان آزمایش A شامل 4004 جمله فیلتر شده با فیلتر G.712 می باشند که به چهار زیرمجموعه 1001 جمله ای تقسیم شده اند. علاوه بر زیرمجموعه های جداگانه تمیز مذکور، به هر یک از آنها نیز نویزهای مترو، همهمه، ماشین و نمایشگاه با نسبتهای سیگنال به نویز 5-، 0، 5، 10، 15 و 20 دسی بل افزوده گردیده اند. دادگان آموزش B نیز مشابه با دادگان آموزش A ساختار دهی شده اند با این تفاوت که در آنها از نویزهای جمع پذیر رستوران، خیابان، فرودگاه و ایستگاه قطار استفاده شده است. برای مجموعه B عدم تطبیق میان داده های آموزش و آزمایش حتی برای دادگان آموزش مختلط نیز وجود دارد.، زیرا دادگان آموزشی مختلط تنها شامل نویزهایی است که به مجموعه A اضافه شده اند. دادگان آزمایش C شامل دو زیر مجموعه از چهار مجموعه 1001 جمله ای است. در این مجموعه داده های گفتار و نویز بوسیله فیلتر MIRS فیلتر شده اند و سپس نویزهای مترو و خیابان با نسبت های سیگنال به نویز 5-، 0، 5، 10، 15 و 20 دسی بل به گفتار افزوده شده اند. در این مجموعه نیز داده های تمیز بطور جداگانه وجود دارند. به این ترتیب مجموعه C برای آزمایش اثر کانالهای متفاوت مناسب است.

https://github.com/sjalalnezhad/speech_recognition

۵. مراجع

  • C. Cortes, V. Vapnik, "Support vector networks," Mach. Learn, vol. 20, pp. 273-297, 1995.

  • K.K. Paliwal. On The Use Of Fliter-Bank Energies As Fetures For Robust Speech Recognition, ISSPA,1999

  • X. Huang, A. Acero and H. Hon, SpokenLanguage Processing: A Guideo to Theory,Algorithm and System
    Development.Prentice Hall, 2001

  • Jayram, A.K.V.Sai, Ramasubramanian, V., Sreenivas, T.V. Automatic Language Recognition Using Acoustic
    Sub-word Units. Proc. ICSLP’02, pp. 81-84, 2002

  • E. Singer, P.A. Torres-Carrasquillo, T.P. Gleason, W.M. Campbell, and D.A. Reynolds. Acoustic, Phonetic,
    and Discriminative Approaches to Automatic Language Identification. Geneva.Switzerland.pp.1345-1348.2003

  • J.-julien Aucouturier and F. Pachet, “Improving Timbre Similarity : How high’s the sky?,” J. Negative Results
    Speech Audio Sci., vol. 1, 2004

  • LU Shi-Dan,Rong-Yi. An approchto content-independent feature exraction for Chinese-Korean spoken
    language identification. IEEE, 2011

  • Sudhamay Maity1, Anil Kumar Vuppala2, K. Sreenivasa Rao1, and Dipanjan Nandi. IITKGP-MLILSC Speech
    Database for Language Identification. IEEE,2012

  • Rania Chakroun, Yassine BenAyed.Automatic Language Identification in speech streams. IEEE,2012

  • Subhadeep Dey, Hema Murthy. Universal Syllable Tokeniser for Language Identification. IEEE,2012

  • david mayer.support vector machine.The interfrance to libsvm in package e1071,2012

  • Sadanandam Manchala • V. Kamakshi Prasad •V. Janaki. GMM based language identification system using
    robust features. Int J Speech Technol DOI 10.1007/s10772-013-9209-1.spriner 2013
    The 8th Symposium on Advances in Science and Technology (8thSASTech), Mashhad, Iran. 8thSASTech.khi.ac.ir

  • http://www.cs.cmu.edu/~tanja/GlobalPhone/index-e-wel.html

  • آزمایشگاه و مرکز پژوهش پردازش گفتار دکتر اکبری دانشگاه علم و صنعت ایران.
    با تشکر از روح الله عبدی پور - امین جولا و ...


  1. Hidden Markov Model (HMM)

  2. Training tools

  3. Isolated Word Recognition

  4. Configuration File

  5. Script File

  6. Master Label Files

  7. Glottal Stops

  8. Sub-Word

  9. Viterbi alignment

  10. Embedded Training

  11. Extended Backus Naur Form

  12. Correctness Rate

  13. Accuracy Rate

  14. ‍Confusion Matrix

  15. Texas Instruments

  16. 16 تهیه شده است و اداره استاندارد آمریکا( [^17

  17. Connected Digit Sequences

تایید شده

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

تایید شده

با سلام و خسته نباشید
پروژه بسیار خوب کار شده است و توضیحات بخش های مختلف جامع و کامل است. استفاده از عکس، جدول و قطعه های کد در کنار توضیحات به فهم آسان پروژه کمک بسیاری کرده است.
موفق باشید

رد شده

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

محمد غضنفری

در متن پروژه به خوبی مشخص نیست کدام قسمت ها کار خودتان است و کدام قسمتها از مراجع استفاده شده است.
در متن به توضیح جزئیات زیادی پرداخته اید. حس می شود بیشتر به توضیح کارهای انجام شده پرداخته اید تا اینکه خودتان ایده جدیدی بدهید.
در کل خوب و قابل قبول است.