مترجم: حبیب الله علیخانی
منبع:راسخون




مقدمه

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

نصب

به منظور استفاده از اسکریپت های ذکر شده در این آموزش بایستی بسته ابزار CSLU را بر روی سیستم خود نصب کنید. این بسته ابزار فقط توسط محیط ویندوز پشتیبانی می شود. متغیر محیطی (با فرض ویندوز ایکس پی) باید با رفتن به مسیرزیر اصلاح شود:
Start » Settings » Control Panel » System
سپس با کلیک بر روی برگه Advanced و با کلیک بر روی دکمه Environment Variables و رفتن به سربرگ System variables متغیر path را انتخاب کنید. با کلیک بر روی دکمه Edit یک پنجره جدید به نام Edit System Variable باز می‌شود. در این پنجره جدید یک ناحیه ای برای Variable value وجود دارد. در حوزه ورودی های متناظر تعدادی مسیر که توسط سیمی کالن از هم جداشده اند وجود دارد. با فرض اینکه بسته ابزار CSLU را در مسیر پیش فرض نصب کرده اید (C:\Program Files\CSLU) مسیر های زیر را با جدا کردن توسط سیمی کالن به این لیست اضافه کنید:
C:\Program Files\CSLU\Tcl80\bin
C:\Program Files\CSLU\Toolkit\2.0\bin
C:\Program Files\CSLU\Toolkit\2.0\shlib
C:\Program Files\CSLU\Toolkit\2.0\script\sview_1.0
C:\Program Files\CSLU\Toolkit\2.0\script\training_1.0
با کلیک بر روی دکمه OK این پنجره، این تنظیمات را به پایان برسانید.
بسط .tcl می‌تواند با هر دو خط فرمان اسکریپت TCL یا یک اسکریپت GUI TK در ارتباط باشد. ارتباط پیش‌فرض با یک اسکریپت TK می باشد، اما این ارتباط باید برای اجرای خط فرمان یک اسکریپت TCL به صورت زیر اصلاح شود: با رفتن به مسیر:
Start » Settings » Control Panel » Folder Options
سپس با کلیک بر روی برگه File Type و با حرکت به سمت پایین تا زمانی که بسط TCL دیده شود و با تک کلیک بر روی بسط برجسته شده که باعث می‌شود پایین صفحه جزئیات Details for TCL Extension باز شود. سپس با کلیک بر روی دکمه Advanced که باعث می‌شود پنجره ای به نام Edit File Type باز شود و پس ازآن با تک کلیک بر روی برچسب Tclsh و سپس با کلیک بر روی دکمه Set Default به سمت راست و با کلیک بر روی دکمه Edit دقیقاً بالای دکمه Set default پنجره دیگری به نام Editing action for type: Tcl/Tk باز می شود. در این پنجره یک جعبه ورودی که برچسب Application used to perform action: دارد دیده می شود. بایستی اطمینان داشت که این جعبه ورودی مسیر زیر را داشته باشد (با فرض اینکه بسته ابزار CSLU بر روی دایرکتوری پیش‌فرض نصب شده باشد):
"C:\Program Files\CSLU\tcl80\bin\tclsh80.exe" "%1" %*%
(مخصوصاً به %*% در آخر توجه کنید ). بر روی OK کلیک کرده تا تنظیمات به پایان برسد.
این فرآیند آموزش، از فرمان‌هایی که در Dos Prompt وارد می‌شود استفاده می کند. می‌توان یک پنجره فرمان Dos بر روی ویندوز ایکس پی با رفتن به مسیر زیر یافت:
Start » Programs » Accessories » Command Prompt.
از آنجایی که از این پنجره بار ها استفاده خواهد شد، توصیه می‌شود که این پنجره را برای عرض ۸۰ کاراکتر و ارتفاع بافر صفحه نمایش برای ۲۰۰۰ خط، ارتفاع پنجره ۴۰ یا ۵۰ خط و رنگ فونت متن سفید برای دید بهتر تغییر دهید. یک پنجره فرمان می‌تواند به منوی Start برای دسترسی آسانتر اضافه شود.
به منظور دنبال کردن مثال‌ها در این آموزش، ممکن است بخواهید از همین فایل‌های اطلاعات استفاده کنید. این فایل‌ها در فایل ZIP گذاشته شده‌اند که شامل همه فایل‌های شکل موج و رونویسی می باشد. این فایل از مسیر (http://www.cslu.ogi.edu/tutordemos/nnet_training/CSLUexamplefiles.zip) قابل دانلود است. حجم این فایل فشرده ۷.۶ مگا بایت می باشد، و حجم فایل اطلاعات تقریباً ۱۰ مگا بایت است. به علاوه، فایل پیکربندی استفاده شده در این آموزش نیز در یک فایل فشرده گذاشته شده است. این فایل را نیز از مسیر(http://www.cslu.ogi.edu/tutordemos/nnet_training/tutorial_config_files.zip ) می‌توان دانلود کرد. تعدادی از این فایل‌های پیکربندی نیاز به اصلاح برای برگرداندن اطلاعات مسیر سیستم شما و اطلاعات مرتبط دیگر خواهند داشت.

اطلاعات بیشتر

در این سند، نماد های آوایی با استفاده از the American English subset of Worldbet که یک رمزنگاری اسکی برای الفبای آوایی بین‌المللی(IPA) می باشد، نشان داده می شود. این آموزش توسط یک NSF و جایزه کارآموزی تحصیلات تکمیلی (شماره گرانت 9354959) و شرکت های عضو CSLU پشتیبانی می شود.دیدگاه های مطرح شده در این آموزش لزوما دیدگاه های آژانس های حامی و شرکت های نمایندگی را نشان نمی دهد.

مفاهیم عمومی و یادداشت ها

گام های عمومی برای ساخت یک سیستم تشخیص گفتار HMM/ANN عبارتند از:
۱. مشخص کردن دسته بندی های زیر آوایی که شبکه عصبی را طبقه بندی می‌کنند.
۲. پیدا کردن مثال‌هایی از هر کدام از این طبقه بندی ها در اطلاعات گفتار.
اجرا کردن تعدادی از تکرارهای آموزش شبکه عصبی. خروجی هر شبکه عصبی یک تخمینی از احتمالات هر طبقه بندی مشخص شده در تک نقطه زمانی داده شده در داخل شبکه موج گفتار است. انتخاب بهترین شبکه عصبی (و تنظیم پارامتر های دیگر سیستم) توسط ارزیابی هر شبکه بر یک قسمت کوچک از اطلاعات گفتار که برای آموزش و تست استفاده نشده است، انجام می شود. ارزیابی توسط استفاده از احتمالات تخمین زده شده بدست آمده از یک شبکه عصبی در داخل چارچوب مدل مارکوف پنهان انجام می‌شود.
۳. ارزیابی بهترین شبکه انتخاب شده بر روی مجموعه تست گفتار

مرور سریع بر روی تشخیص گفتار بر پایه فریم

تشخیص گفتار مبتنی بر فریم دارای گام های زیر می‌باشد که در شکل ۱ نشان داده شده است:
۱. تقسیم شکل موج گفتار به فریم ها، که هر فریم یک بخش کوچکی از گفتار بوده که یک تعداد مساوی از الگو های شکل موج را در بر می گیرد. در این آموزش، اندازه فریم ۱۰ میلی ثانیه را فرض خواهیم کرد.
۲. محاسبه ویژگی های هر فریم. این ویژگی‌ها می‌توانند به عنوان یک نمایش از بسته طیفی از گفتار در آن فریم و در تعداد کمی از فریم های مجاور که پنجره زمینه نامیده می‌شوند در نظر گرفت.
۳. طبقه بندی ویژگی‌ها در هر فریم به دسته های مبتنی بر آوا با استفاده از شبکه عصبی. خروجی های شبکه عصبی به عنوان احتمالات هر دسته آوایی فرض می‌شوند که به گفتار در این فریم ویژگی می بخشند. زمانی که شبکه عصبی برای طبقه بندی همه فریم ها استفاده می‌شود یک ماتریسی از احتمالات با F ستون و C ردیف ساخته می‌شود. که F تعداد فریم ها و C تعداد دسته هاست.
۴. استفاده از ماتریس احتمالات، مجموعه‌ای از مدل های تلفظ، و اطلاعات قبلی درباره طول هر دسته برای تعیین کلمات با احتمال زیاد با استفاده از جستجوی ویتربی.
برای تشریح جزییات HMM ها و هیبریدهای HMM/ANN، یادداشت‌های سخنرانی در دسترس هستند. (http://www.cse.ogi.edu/class/cse552)

مشخص کردن دسته ها

به منظور تعیین دسته هایی که شبکه طبق بندی می کند، به سه چیز نیاز است:
۱. طراح شناساگر نیازمند تعیین تلفظات برای هر کلمه که شناخته خواهد شد، است. مدل های تلفظ دقیقتر عموما نرخ تشخیص بهتری را ارایه می دهد.
۲. اغلب،‌ مدل های آوا وابسته به زمینه مورد استفاده قرار می گیرد،‌ که این معنی را می‌دهد که مدل برای تغییرات آواها وابسته به آواهایی است که قبل از این آوا بوده و یا این آوا را دنبال می کنند. برای مثال، آوای /aI/ قبل از /w/ یک مدل متفاوت نسبت به آوای /aI/ قبل از /n/ است. زمینه‌های اطراف (/w/ و /n/ در این مثال) ممکن است آواهای خاصی یا گروهی از آواها باشند. گروهایی از آواها که در کلاستر های مشابه گنجانده می‌شوند توسط فرد طراح شناساگر تعریف می شود.
۳. نهایتاً، هنگام ساخت مدل های آوایی وابسته به زمینه، هر آوای شناخته شده به یک، دو یا سه زیر قسمت یا بخش تقسیم می شود. هر بخش زیرآوایی وابسته به یک دسته باید شناخته شود. اگر یک آوا به عنوان دارا بودن یک بخش مشخص شود،‌ بدون زمینه آواهای اطراف استفاده می شود. اگر یک آوا به عنوان داشتن دو بخش مشخص شود، بخش سمت چپ (دسته زیر-آوا) به آوای قبلی وابسته بوده و بخش سمت راست به آوای زیرین وابسته می باشد. یک آوایی که به عنوان داشتن ۳ بخش مشخص شود، بخش اول به آوای قبلی، بخش وسط مستقل از آواهای اطراف و بخش سوم وابسته به آوای زیرین است. اگر یک آوا به عنوان راست-وابسته مشخص شود،‌ فقط یک بخش داشته و این بخش زمینه وابسته به آوای زیرین می باشد. دسته های راست-وابسته معمولاً برای آواهای توقف دهانی استفاده می شوند. این روش‌ ساخت مدل های زمینه-وابسته تا حدودی متفاوت از مدل های بایفون یا تریفون استاندارد می باشند، این مدل ها بر روی وابستگی های زمینه مناطقی از آوا که بیشترین اثر را بر روی آن زمینه دارند متمرکز شده‌اند. تعداد قسمت‌ها برای جدا کردن هر آوا توسط فرد طراح شناساگر مشخص می شود.
شکل ۲ یک تصویر از این نوع مدل سازی وابسته به زمینه را نشان می دهد.در این شکل، یک مثال برای مدل سازی کلمه lines که در Worldbetبه صورت /l aI n z/نوشته شده، آورده شده است. در اینجا /l/ به دو بخش، /aI/ به سه بخش جدا، /n/ به دو بخش و /z/ با استفاده از یک بخش مدل می‌شود. هشت کلاستر یا گروه از آواها برای استفاده در زمینه ها وجود دارد. هر کلاستر، کلاس‌های گسترده ای از صدا را نشان می‌دهند. برای این شناساگر، آوای /l/ به کلاستر 'lat$' اختصاص داده شده( برای آوای جانبی)، همچنین آوای /aI/ به کلاستر kcb_r$ از صدای پشتی رخداده در زمینه دست راست و به کلاستر fnt_l$ از صدای جلویی رخداده در زمینه دست چپ اختصاص داده شده است و هر دو آوای /n/ و /z/ به کلاستر alv$ (حفره دار) اختصاص می‌یابد. (آوای /aI/ در حالتی که با یک صدای پشتی شروع شده و با یک صدای جلویی تمام می‌شود غیر عادی است بنابراین نمی‌توان فقط به یکی از کلاستر های bck$ یا fnt$ گروه بندی کرد. راه حل تعیین این مساله این است که آیا /aI/ در سمت چپ آوا رخ می‌دهد (یک زمینه چپ) که در این حالت همیشه یک صدای جلو است و یا در سمت راست آوا رخ می‌دهد (یک زمینه راست) که در این حالت یک صدای پشتی است. )
دسته های آوایی زمینه وابسته که شبکه آموزش خواهد داد میتوانند مدل های تلفظ صدا-سطح، گروه بندی آوا ها به داخل صدا های مشابه، و تعداد قسمت‌ها برای جدایش هر آوا به داخل آن را، تعیین کنند.

مثال‌های برای مشخص کردن دسته ها

برای آوردن مثال در مورد چگونگی این مدل های تلفظ، کلاستر کردن ها، و قسمت‌هایی که می‌تواند تعیین شود، ما از مثال‌هایی برای شناسایی کلمات جدا شده "three" ،" tea"، " 'zero' و "five" استفاده خواهیم کرد. (برای این مثال، کلمات جدا شده (کلماتی که توسط یک مکث یا سکوت احاطه شده اند) استفاده خواهند شد، بسته ابزار CSLU می‌تواندبرای تشخیص متناوب گفتار استفاده شود)
اول از همه،ما با تلفظات اولیه می پردازیم:

     word

pronunciation

     three

     T 9r i:

     tea

     tc th i:

     zero

     z i: 9r oU

     five

     f aI v

ممکن است ما بخواهیم این تلفظات را اصلاح کنیم، زیرا /:i/ در 'zero' غالباً نسبت به /:i/ در'three' و 'tea' به طور متفاوت تلفظ می شود. برای در نظر گرفتن این تفاوت در تلفظ، ما می‌توانیم از سمبل خودمان یعنی /i:_x/ برای نمایش صدای جلو استفاده کنیم. انجام این تغییرات مدل های تلفظ زیر را میدهد:

     word

pronunciation

     three

     T 9r i:

     tea

     tc th i:

     zero

     z i:_x 9r oU

     five

     f aI v

سپس، ما تعداد قسمت‌ها جهت استفاده برای هر آوا را تعیین خواهیم کرد. در جدول زیر ”1” به این معنی است که آوا زمینه-مستقل خواهد بود،”2” به این معنی است که آوا به دو قسمت جدا خواهد شد، ”3” به این معنی است که آوا به سه قسمت جدا خواهد شد و”r” به این معناست که آوا راست-وابسته خواهد بود:

     phone

parts

     T

1

     9r

2

     i:

3

     tc

1

     th

r

     z

1

     i:_x

2

     oU

3

     f

1

     aI

3

     v

1

     .pau

1

نماد /pau./ برای مکثی استفاده می شودکه فرض می‌شود در بین کلمات رخ می دهد. حال، اجازه دهید به صدای /:i/ در'three' و 'tea' در طیف نگار نگاهی بیندازیم. در این حالت صدای /:i/ یکی است اما وقتی قبل از /9r/ می‌آید در مقایسه با وقتی که قبل از /th/ می‌آید بسیار متفاوت است. (به شکل ۳ نگاه کنید)
در این حالت، ما ابتدا اولیه سوم /:i/ (از آنجایی که به سه قسمت جدا می شود) در حالت وابسته به رترفلکس قبلی (/9r/) و در حالت وابسته به صدای آلویولار قبلی (/th/ or /z/) را می سازیم. ما معمولاً آوا ها را در زمینه چپ و یا راست بر اساس دسته آوایی گروه بندی می‌کنیم، برای مثال گروه بندی زیر می‌تواند مورد استفاده قرار گیرد. (علامت دلار متغیری را نشان می‌دهد که صداهای لیست شده را گروه بندی می کند )

  group

  phonemes in group 

  description

  $bck

  oU

  back vowels

  $fnt

  i: i:_x

  front vowels

  $ret

  9r

  retroflex sounds

  $alvden

  T v th z

  dentals, labiodentals, and alveolars

  $sil

  .pau tc /BOU /EOU

  silence or closure

به دو نماد BOU/ و EOU/ در ستون 'آواها در گروه' توجه کنید. این دو نماد خاص توسط شناساگر تعریف می شوند. BOU/ ‌‌‌‌مخفف”beginning of utterance” یعنی آغاز سخن گفتن و EOU/ مخفف ”end of utterance” یعنی پایان سخن گفتن می باشد. آن‌ها نماد هایی نیستند که نیاز به آموزش داشته باشند اما در کلاستر های زمینه قرار می‌گیرند تا شناساگر بداند چه دسته زمینه-وابسته ای به آوای اول و آخر در گفتار اختصاص داده شود.
این طرح به طورکلی نسبتاً آسان است. هرچند، توجه کنید برای دسته بندی صدای های ترکیبی از جمله /aI/ مشکل خواهد شد ، زیرا آوا به عنوان صدای پشتی شروع شده و به عنوان صدای جلو خاتمه می یابد. راه حل اصلاح دسته ها با به صورت زیر است:

  group

  phonemes in group 

  description

  $bck_l

  oU

  back vowels to the left of a target phoneme

  $bck_r

  oU aI

  back vowels to the right of a target phoneme

  $fnt_l

  i: i:_x aI

  front vowels to the left of a target phoneme

  $fnt_r

  i: i_x

  front vowels to the right of a target phoneme

  $ret

  9r

  retroflex sounds

  $alvden

  T v th z

  dentals, labiodentals, and alveolars

  $sil

  .pau tc /BOU /EOU

  silence or closure

ابتدا، پسوند ”I_” و ”r_” به اسم متغیر ها در سؤال، برای نشان دادن اینکه آیا آواها در این گروه‌ها بر سمت راست یا چپ آوا های طبقه بندی شده رخ می‌دهند، اضافه شده است. سپس، به دلیل اینکه /aI/ زمانی که در زمینه راست-دست به نظر می رسد مشخصه صدای پشتی را دارد، در گروه $bck_r قرار داده شده است، همچنین به دلیل اینکه /aI/ دارای مشخصاتی از صدای جلو را در زمینه چپ-دست دارد /aI/ در گروه $fnt_l نیز قرار داده شده است. این روش از گروه بندی به زمینه چپ یا راست در شکل ۴ نشان داده شده است:
قالب برای اختصاص دسته های متفاوت به صورت [راست-زمینه][چپ-زمینه] است، بنابراین برای مثال برای /.pau/ دسته به صورت