شبکه عصبی مارکوف (HMM/ANN) در تشخیص اتوماتیک گفتار (ASR) (2)

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

 

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




 

روند کلی

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

ایجاد توضیحات

اولین گام برای خلق توضیحات یک شناساگر و شرح چگونگی اطلاعات برای آموزش انتخاب خواهد شد. فایل‌های مورد نیاز برای ایجاد عبارتند از:

فایل corpora

یک فایل corpora.txt ایجاد کنید اگر یکی هنوز ایجاد نشده است. این فایل شامل یک لیست اصلی از هر نوشته و محل و فرمت فایل‌ها در نوشته است. فرمت این فایل در لینک http://www.cslu.ogi.edu/tutordemos/nnet_training/tutorial.html#corpora_file داده شده است. راه اتوماتیکی برای تولید این فایل وجود ندارد اما اصلاح آن به صورت دستی آسان است. همچنین corpora فایلی می‌تواند برای همه وظایف آموزش استفاده شود.

فایل‌هایinfo

فایل‌های info را برای آموزش، توسعه و آزمایش ایجاد کنید. این فایل‌های info بایستی به صورت دستی ایجاد شوند. فرمت آن‌ها در زیر آمده است. یک فایل info شامل همه اطلاعاتی است که برای پیدا کردن مثال‌های آموزش، توسعه و آزمایش مورد نیاز است. این فایل info شامل اطلاعات پارتیشن (آموزش-توسعه و آزمون)، چگونگی انتخاب داده برای پارتیشن مورد نیاز(به عنوان مثال پارامتر های فیلتر کردن که در بالا شرح داده شد)، نام پایه شناساگر، کمترین تعداد مثال‌های مورد نیاز برای هر دسته، و اطلاعات وابسته به نوشته است. یک فایل info برای هر وظایف آموزش،‌ آموزش دوباره با استفاده از همتراز اجباری، توسعه و آزمایش مورد نیاز است.

فایل grammer

ایجاد یک فایل گرامر که گرامر را مشخص می‌کند برای شناسایی کلمات استفاده خواهد شد. فرمت فایل گرامر یک اصلاحی از ABNF format published توسط w3C است. فرمت دقیق استفاده شده در اینجا در Statenet documentation شرح داده شده است.

فایل lexicon

ایجاد یک فایل ”lexicon” که تلفظ هر کلمه در گرامر را مشخص می کند. فرمت این فایل در لینک زیر آورده شده است. http://www.cslu.ogi.edu/tutordemos/nnet_training/tutorial.html#lexicon_file

فایل parts

ایجاد یک فایل parts که مشخص می‌کند چه تعداد قسمت‌هایی به هر آوا تقسیم شود و چه زمینه کلاستری استفاده شود. این فایل نیز باید به صورت دستی ایجاد شود و فرمت آن در لینک زیر آورده شده است:
http://www.cslu.ogi.edu/tutordemos/nnet_training/tutorial.html#5._File_Formats

یافتن داده

با توجه به فایل‌های ایجاد شده در بالا، اسکریپت استفاده شده به منظور پیدا کردن فایل‌های داده برای آموزش عبارتند از:
find_files.tcl
برای پیدا کردن فایل‌ها برای آموزش، توسعه و آزمایش از find_files.tcl استفاده می‌کنیم. این اسکرسپت بایستی برای هر مجموعه‌ای از اطلاعات فراخوانده شود. در این گام هر فیلتر اعمال شده و نوشته برای فایل‌هایی که برای پارتیشن داده شده مناسب است جستجو شده است.
gen_spec.tcl
از اسکریپت gen_spec.tcl برای تولید یک فایل خاص که شامل یک لیستی از دسته های مورد نیاز برای آموزش است استفاده می کنیم. این اسکریپت از فایل‌های اطلاعات، گرامر، لغت و اقسام برای ایجاد فایل spec استفاده می کند. فایل مشخصات ،‌علاوه بر دسته های استفاده شده توسط شناساگر برای آموزش و شناسایی ،‌اندازه فریم خاص، نرخ نمونه، محل کد استفاده شده برای پردازش ویژگی‌های آکوستیک، کلاستر های زمینه و نقشه ای از آواها را در بر می گیرد.
gen_catfiles.tcl
برای ایجاد دسته های هم تراز زمانی از رونوشت متنی یا از رونوشت های هم تراز آوایی از اسکریپت gen_catfiles.tcl استفاده می شود. این دسته ها برای جدایش فایل‌ها با توسعه ”cat.” که در زیر داریرکتوری هایی که ساختار دایرکتوری استفاده شده در نوشته‌ها را منعکس می کنند،‌ نوشته می شوند.
revise_spec.tcl
اول برای ارتباط دسته هایی که مثال‌های کافی ندارند به دسته هایی که مثال‌های مناسبی دارند و دوم برای به روز رسانی پارامتر های بیشینه و کمینه مدت زمان در هر دسته از اسکریپت revise_spec.tcl استفاده می‌شود.
اسکریپت gen_catfiles.tcl فایل‌های خروجی را که شماره مثال‌های در دسترس برای هر دسته را نشان می‌دهند به خوبی اطلاعات مدت زمان ایجاد می کنند. خروجی این اسکریپت یک فایل spec اصلاح شده است.

انتخاب داده برای آموزش

هنگامی که یک فایل انتخاب می شود، فایل دسته ایجاد شده است و فایل desc درست است،‌ سپس می‌توان از اسکریپت های زیر و برنامه‌ها برای انتخاب فریم ها برای آموزش استفاده کرد:
pick_example.tcl
از این اسکریپت برای انتخاب مثال‌های آموزش استفاده می شود. خروجی این ااسکریپت یک فایل مثال است که مستقیماً توسط اسکریپت بعدی gen_examples.tcl استفاده می شود.
gen_examples.tcl
از این اسکریپت برای ایجاد بردار های ویژگی و اطلاعات دسته‌ای اختصاص داده شده به آن‌ها برای هر فریم که باید آموزش داده شود مورد استفاده قرار می گیرد. این اسکریپت یک فایل دودویی با بسط ”vec.” تولید می کند.(برای بردارهای ویژگی ها)
checkvec.exe
برای اطمینان از اینکه اطلاعات فایل vec. با‌ارزش باشند از checkvec استفاده می شود. این برنامه تعدادی از دسته ها و تعدادی مثال از هر دسته را چاپ می کند. تعداد دسته ها در زمان اجرای nntrain.exe مورد نیاز است.

آموزش و ارزیابی

nntrain.exe
برای آموزش تکرار های شبکه عصبی با استفاده از فایل بردار به عنوان داده‌های آموزش از nntrain استفاده می شود.
select_best.tcl
برای پیدا کردن بهترین تکرار از شبکه با استفاده از مجموعه فایل‌های توسعه از اسکریپت select_best.tcl استفاده می شود.

آموزش دوباره

ایجاد داده‌های همتراز اجباری با استفاده از بهترین تکرار شبکه که بایستی آموزش داده شود. برای انجام این، یک فایل info برای هم تراز اجباری ایجاد شده که یک دایرکتوری جدید مشخص می‌کند که برای گذاشتن فایل‌های دسته و اسکریپت همتراز اجباری برای ایجاد و استفاده از فایل‌های cat. جدید است. سپس از اسکریپت های find_files.tcl", "gen_spec.tcl" gen_catfiles.tcl و "revise_spec.tcl" برای تولید برچسب‌های هم تراز اجباری و خلق یک فایل spec. جدید استفاده می شود. سپس بخش 3.3 و 3.4 برای ایجاد یک شبکه آموزش بر روی داده‌های همتراز اجباری تکرار می شود.

ارزیابی مجموعه آزمون

از اسکریپت select_best.tcl برای ارزیابی بهترین عمل‌کرد شبکه بر روی داده‌های آزمون استفاده می شود. این‌ها نتایج نهایی هستند که برای چاپ قابل قبول می باشند.
مثال
برای نمایش روند توضیح داده شده در بالا،‌مثالی از آموزش یک شناساگر گفتار متناوب ارقام در این بخش آورده شده است. همه فرمان‌ها بایستی در پنجره فرمان DOS وارد شود. ابتدا مطمئن شوید محیط به درستی تنظیم شده باشد(شرح داده شده در بخش ۱-۱) متن های پررنگ فرمان‌هایی را که در پنجره فرمان تایپ می‌شوند را نشان می دهد. متن های با فونت fixed-width خروجی این فرمان را نشان میدهد. در DOS همه فرمان‌ها بایستی در یک خط وارد شوند. اگر یک بک اسلش در مثال‌های زیر برای ادامه فرمان در خط بعدی استفاده شده است ،‌این بایستی در DOS در یک خط بدون بک اسلش تایپ شود. پارامتر های هر اسکریپت و برنامه در بخش ۶ تشریح شده است. فایل‌های داده که در این مثال استفاده شده است در یک فایل فشرده قابل دسترس برای دانلود آورده شده است. (اطمینان حاصل کنید که ساختار دایرکتوری فایل‌ها را در یک فایل فشرده حفظ کنید). فایل‌های پیکربندی (و دو اسکریپت fa.tcl و remap_tutorial.tcl) در این آموزش در فایل ZIP گذاشته شده اند. شما ممکن است نیاز به تغییر مقداری از اطلاعات در این فایل‌ها برای انعکاس ساختار دایرکتوری تان یا اطلاعات دیگر داشته باشید. تغییراتی که مورد نیاز است به عنوان آموزش پیشرفت باید روشن شود. بخش ۵ قالب این فایل‌هایی که شما می‌توانید آن‌ها را به منظور آموزش وظیفه دیگر یا آموزش با استفاده از پارامتر های متفاوت دیگر تغییر دهید یا ایجاد کنید را شرح می دهد.
اگر شما با نسخه قبلی این فرآیند آموزش آشنایی دارید، توجه داشته باشید که چندین تفاوت وجود دارد. فایل vocab. توسط دو فایل جانشین شده است که یکی lexicon. و دیگری grammer. است. قالب فایل lexicon. شبیه آن است اما به منظور سازگاری بیشتر با سبک ABNF اندکی با قالب فایل vocab. تفاوت دارد. فایل‌های olddesc. و desc. با یک قالب جدید که یک فایل (specification)spec. نامیده می‌شود جانشین شده است. استفاده از hscript.exe نیاز نیست. تفاوت‌های اساسی دیگری نیز وجود دارد اما این تفاوت‌های دیگر ممکن است قابل توجه نباشد. اگر شما به صورت موفقیت آمیز از نسخه قبلی استفاده کرده اید. اما مشکلاتی با نسخه جدید دارید لطفاً دستورالعمل را به دقت بخوانید ممکن است تغییرات ظریفی در روش وجود داشته باشد.
[گام ۱]
در این گام اولیه،‌ ساختار دایرکتوری را که استفاده خواهید کرد نصب کنید. پیشنهاد می‌شود که برای هر پروژه یک دایرکتوری ایجاد کنید که یک پروژه شامل همه فایل‌هایی است که در طول آموزش یک شبکه ایجاد می‌شوند. برای مثال، ما از یک دایرکتوری پروژه که \tutorial\digit نامیده می‌شود استفاده خواهیم کرد. توجه داشته باشید بعضی فایل‌ها (مخصوصاً فایل‌های بردار) ممکن است حجم زیادی بگیرند. شما ممکن است بخواهید این فایل‌ها را پس از استفاده از آن‌ها حذف کنید. اکنون زمان خوبی برای اطمینان از مسیر شما که در برگیرنده محل اسکریپت های آموزش است و همچنین برنامه‌های C مستقل استفاده شده برای آموزش می‌باشد. برای بررسی این موضوع اگر در دایرکتوری پروژه تایپ شود gen_spec.tcl بایستی خروجی های زیر چاپ شود:

gen_spec.tcl
Usage: gen_spec.tcl <.info file> <.grammar file>
<.lexicon file> <.parts file> <.spec file>
[-start ]
where is the token at which compilation
of the grammar starts; default is '$grammar'.

و اگر در دایرکتوری پروژه تایپ شود checkvec ، بایستی خروجی زیر مشاهده شود:
checkvec
give vec file
اگر این جواب گرفته نشود، با فردی که بسته ابزار CSLU را نصب کرده است برای پیدا کردن محل دایرکتوری script\training_1.0 و دایرکتوری bin در داخل سلسله مراتب دایرکتور های بسته ابزار تماس حاصل کنید. محل های پیش‌فرض C:\Program Files\CSLU\Toolkit\2.0\script\training_1.0 و Files\CSLU\Toolkit\2.0\bin می‌باشد. مسیر متغیر های محیطی را برای داشتن مسیر های درست اصلاح کنید. (در بخش ۱-۱ توضیح داده شده است)
[گام ۲] ایجاد یک فایل corpora که corpora.txt نامیده می‌شود. برای این آموزش، فایل corpora.txt ممکن است به صورت زیر دیده شود. (با فرض اینکه داده‌های آموزش در مسیر \tutorial\data ذخیره شده باشند)

type corpora.txt
corpus: numbers
wav_path /tutorial/data/speechfiles
txt_path /tutorial/data/txtfiles
phn_path /tutorial/data/phnfiles
format {NU-([0-9]+)\.[A-Za-z0-9_]+}
wav_ext wav
txt_ext txt
phn_ext phn
cat_ext cat
ID: {regexp $format $filename filematch ID}

رشته format ،‌فرمت فایل‌ها در این نوشته را با استفاده از یک عبارت منظم مشخص می کند. پرانتز ها به صورت ترکیب با رشته :ID به منظور تعیین ID سخنگو اختصاص داده شده به یک فایل استفاده می شوند. (و ، به نوبه خود، ID سخنگو برای اطمینان از اینکه سه پارتیشن آموزش، توسعه و داده‌های آزمون مستقل از گوینده هستند، استفاده می شود). همچنین احتمالاً این ایده خوبی است که اطمینان پیدا کنیم که اسم فایل‌ها همان قالب فایل‌های corpora را داشته باشد. قالب به حروف حساس است بنابراین NU-78.zipcode.wav با nu-78.zipcode.wav متفاوت است. همچنین ، توجه داشته باشید که اسم مسیر ها توسط یک اسلش به جای بک اسلش مشخص می شود.
[گام۳] فایل info را برای آموزش،‌توسعه و آزمون ایجاد کنید. که آن‌ها را digit.train.info, digit.dev.info, و digit.test.info می نامند. ما فقط تا ۲۰۰ مثال در هر دسته را درخواست می‌دهیم زیرا این آموزش زمان زیادی برای اجرا نیاز ندارد. اگر کسی بخواهد دقت را افزایش دهد بهتر است تمامی مثال‌های در دسترس را استفاده کند. برای مشخص کردن تمامی مثال‌ها از کلید واژه ALL به جای ۲۰۰ رشته :want در digit.train.info استفاده کنید.
برای فایل digit.train.info مشخص است که ما داده‌های آموزش را از نوشته شماره ها می‌خواهیم و ما نشان های دسته هم تراز زمانی را در زیر دایرکتوری numbers_train خواهیم گذاشت. ( که در رشته‌های "partition:", "name:", و "cat_path:" نشان داده شده است) همچنین ما نیاز به حضور شکل موج، آواهای برچسب زده شده و فایل‌های رونوشت متنی به منظور انجام آن نیاز داریم(مشخص شده در رشته :require با w برای نیاز به شکل موج،‌p برای نیاز به فایل‌های آوایی نشان دار شده و t برای نیاز به فایل‌های رونوشت متنی سطح کلمه) و ما از ۳.۵ فایل‌های در دسترس (مشخص شده در رشته :partition که اولین {expr $ID %5} شناسه گوینده را به یکی از پنج مقدار (صفر تا چهار) اختصاص داده و قسمت دوم {2 1 0} مقادیر ۰، ۱ و ۲ برای آموزش انتخاب می کند) اما ما به تمامی کلمه های لغت در فایل متنی که تمامی کلماتی هستند که ما می‌خواهیم بشناسیم نیاز خواهیم داشت (مشخص شده در رشته :lexicon با فایل lexicon که همه کلمات مقصد را در بر می گیرد). ما فایل‌های آوایی دستی نشان دار شده را دوباره ( که می‌تواند یک درجه بالایی از ارزش در مشخصات آوایی استفاده شده برای نمایش یک کلمه باشد) به یک مجموعه منسجم از آواها با استفاده از اسکریپت remap_tutotial.tcl خواهیم کشید. (مشخص شده در رشته :remap که توسط اسکریپت remap_tutorial.tcl برای انجام این دوباره نویسی مشخص می شود). به علاوه ما مشخص می‌کنیم که فرکانس شکل موج نمونه ۸۰۰۰ هرتز بوده و شناساگر از نرخ فریم های ۱۰ میلی ثانیه ای استفاده خواهد کرد.(در رشته‌های"sampling_freq:" و "frame_size:" ). رشته :min_samp وقتی از یک نوشته استفاده می‌کنیم هیچ اثری ندارد … این رشته و تمامی رشته‌ها با جزئیات بیشتر در توضیحات فرمت فایل info تشریح شده است.

type digit.train.info
basename: digit;
partition: train;
sampling_freq: 8000;
frame_size: 10;
min_samp: 100;
corpus: name: numbers
cat_path: numbers_train
require: wpt
partition: "{expr $ID % 5} {0 1 2}"
filter: 1+1
lexicon: digit.lexicon
remap: remap_tutorial.tcl
want: 200;
type digit.dev.info
partition: dev;
basename: digit;
corpus: name: numbers
require: wt
partition: "{expr $ID % 5} {3}"
filter: 1+1
lexicon: digit.lexicon ;
type digit.test.info
partition: test;
basename: digit;
corpus: name: numbers
require: wt
partition: "{expr $ID % 5} {4}"
filter: 1+1
lexicon: digit.lexicon;

[گام ۴] ایجاد فایل grammer که digit.grammer. نامیده می شود. این فایل شامل گرامرهایی است که شناساگر استفاده می کند. در این حالت گرامر مشخص می‌کند که یک رقم در هر کلمه‌ای یکی از zero ، oh ، one و … nine نیست. همچنین مشخص می‌کند که گرامر سطح بالا (با استفاده از نمادgrammer$) اجازه یک کلمه جدا کننده اختیاری که *sep نامیده می شود (که ممکن است متوقف شده یا ذباله باشد)، که توسط یک یا دو تکرار ارقام سپس توسط جداکننده اختیاری و سرانجام با یک جداکننده اختیاری به اتمام می رسد.
type digit.grammar
$digit = zero | oh | one | two | three | four | five | six |
seven | eight | nine;
$grammar = [sep*%%] ($digit [sep*%%])<+> [sep*%%];
[گام ۵] ایجاد یک فایل lexicon که digit.lexicon نامیده می شود. این فایل شامل کلمات مقصد و تلفظاتشان می باشد. اینجا شما می‌توانید ببینید که کلمه *sep که می‌تواند به عنوان توقف توسط یک ذباله اختیاری و توقف های دیگر تعریف شده باشد. همچنین، اسکریپت دوباره نویس همه بخش‌های تکرار توالی آوایی (که در کلمه four اتفاق می افتد) /oU9r/ به نماد /r\” برای نمایش صدا و بی صدای نهایی در کلمه four باشد.

type digit.lexicon
zero = z I 9r oU ;
oh = oU ;
one = w ^ n [&] ;
two = tc th u ;
three = T 9r i: ;
four = f \>r ;
five = f aI v ;
six = s I kc kh s ;
seven = s E v (I | ^) n [&] ;
eight = ei tc [th] ;
nine = n aI n [&] ;
sep* = .pau [.garbage] .pau ;

[گام ۶ ] ایجاد یک فایل parts که digit.parts. نامیده می شود. این شامل تعداد قسمت‌هایی است که هر آوا به دو قسمت جدا خواهد شد، گروه بندی آوا ها به کلاستر های آواهای مشابه و دوباره نویسی از یک آوا به نماد دیگر است. در این حالت ، بسته های بی صدا /tc/و /kc/ به تک نماد /uc/ نوشته می‌شود که بدین وسیله یک بسته بی صدای generic را تعریف می کند. سپس نماد /uc/ را آموزش میدهیم اگرچه تلفظ کلمه را با استفاده از /tc/ و /tk / مشخص کرده ایم.

type digit.parts
i: 3 ;
I 3 ;
E 3 ;
u 3 ;
^ 3 ;
& 2 ;
ei 3 ;
aI 3 ;
oU 3 ;
\>r 3 ;
9r 3 ;
w 2 ;
n 2 ;
T 2 ;
f 2 ;
s 3 ;
v 2 ;
z 3 ;
th r ;
kh r ;
uc 1 ;
.pau 1 ;
.garbage 1 ;
$sil = .pau uc .garbage /BOU /EOU ;
$fnt_l = i: I E ei aI ;
$fnt_r = i: I E ei ;
$bck_l = u ^ & oU w ;
$bck_r = u ^ & oU w aI \>r ;
$ret_l = 9r \>r ;
$ret_r = 9r ;
$alv = n s z th ;
$den = f T v ;
$vel = kh ;
map uc = tc kc ;

[گام ۷] اجرای find_files.tcl به منظور پیدا کردن فایل‌های مناسب برای آموزش. خروجی در digit.train.numbers.files نوشته می شود. این اسم فایل از نام پایه،پارتیشن و نوشته‌ها ساخته می شود. دلیل این است که کاربر، خروجی نام فایل را بر روی خط فرمان که زمان استفاده از چندین corpora برای ایجاد چندین فایل خروجی ممکن است را مشخص نمی کند. به نظر می‌رسد تعیین نام فایل به صورت اتوماتیک آسانتر از این است که کاربر یک نام فایل را برای هر نوشته مشخص کند.

find_files.tcl digit.train.info corpora.txt
Basename: digit
Partition: train
Corpus: numbers
cat_ext: cat
txt_ext: txt
format: NU-([0-9]+)\.[A-Za-z0-9_]+
lexicon: digit.lexicon
partition: {expr $ID % 5} {0 1 2}
cat_path: numbers_train
txt_path: W:/digit/tutorial/tutorial/data/txtfiles
id: regexp $format $filename filematch ID
remap: remap_tutorial.tcl
phn_ext: phn
filter: 1+1
wav_ext: wav
name: numbers
phn_path: W:/digit/tutorial/tutorial/data/phnfiles
want: 200
wav_path: W:/digit/tutorial/tutorial/data/speechfiles
require: wpt
W:/digit/tutorial/tutorial/data/speechfiles...
W:/digit/tutorial/tutorial/data/speechfiles/0...
W:/digit/tutorial/tutorial/data/speechfiles/1...
W:/digit/tutorial/tutorial/data/speechfiles/10...
W:/digit/tutorial/tutorial/data/speechfiles/100...
W:/digit/tutorial/tutorial/data/speechfiles/101...
(etc)
NU-596.streetaddr.wav
NU-596.zipcode.wav
NU-597.streetaddr.wav
Final count of 552 files for this corpus
Done.

سپس برای پیدا کردن فایل‌های مناسب برای توسعه و آزمون برای دومین و سومین بار find_files.tcl اجرا می شود.

find_files.tcl digit.dev.info corpora.txt
find_files.tcl digit.test.info corpora.txt
[گام ۸] اجرای gen_spec.tcl برای تعیین دسته های زمینه وابسته که توسط شناساگر طبقه بندی خواهد شد. فایل خروجی فایل spec است. این اختصاص فایل نه تنها شامل لیست دسته های وابسته زمینه بوده بلکه مقداری اطلاعات دیگر در مورد شناساگر که ما ایجاد خواهیم کرد را در بر می گیرد.
gen_spec.tcl digit.train.info digit.grammar digit.lexicon digit.parts digit.orig.spec
Basename: digit
Partition: train
Corpus: numbers
lexicon: digit.lexicon
partition: {expr $ID % 5} {0 1 2}
cat_path: numbers_train
remap: remap_tutorial.tcl
filter: 1+1
name: numbers
want: 200
require: wpt
There are 22 unique phonemes.
& (2) <- n
-> /EOU f T uc w oU .pau s z n ei
$alv<& &>$sil &>$den &>$bck_r &>$alv
&>$fnt_r
.pau (1) <- & .pau v n s {\>r} i: u oU uc th .garbage /BOU
-> /EOU f T uc w oU .pau .garbage s z n ei
<.pau>
(etc.)
{$alv<&} {&>$sil} {&>$den} {&>$bck_r} {&>$alv} {&>$fnt_r} <.pau> {$den<9r} {$fnt_l<9r} <9r> {9r>$fnt_r} {9r>$bck_r} {$alv {E>$den} {$alv {I>$sil} {I>$ret_r} {I>$alv} {$bck_l$ret_r} {$den<\>r} {<\>r>} {\>r>$sil} {\>r>$den} {\>r>$bck_r} {\>r>$alv} {\>r>$fnt_r} {$bck_l<^} {$den<^} <^> {^>$alv} {$den {aI>$den} {aI>$alv} {$alv {ei>$sil} {$bck_l$bck_r} {$ret_l {i:>$sil} {i:>$den} {i:>$bck_r} {i:>$alv} {i:>$fnt_r} {kh>$alv} {$bck_l$sil} {n>$den} {n>$bck_r} {n>$alv} {n>$fnt_r} {$bck_l {oU>$sil} {oU>$den} {oU>$bck_r} {oU>$alv} {oU>$fnt_r} {$vel {s>$sil} {s>$den} {s>$bck_r} {s>$fnt_r} {s>$alv} {th>$sil} {th>$den} {th>$bck_r} {th>$alv} {th>$fnt_r} {$alv {u>$sil} {u>$den} {u>$bck_r} {u>$alv} {u>$fnt_r} {$fnt_l$sil} {v>$den} {v>$bck_r} {v>$alv} {v>$fnt_r} {$bck_l$bck_r} {$bck_l {z>$fnt_r} <.garbage>

[گام ۹] اجرای gen_catfiles.tcl برای گرفتن لیستی از فایل‌ها برای آموزش (digit.train.numbers.files) و ایجاد برچسب‌های همتراز زمانی دسته های آموزش. فایل ورودی digit.train.numbers.files است. اگر در digit.train.info مشخص شد، اسکریپت رشته :remap استفاده خواهد شد و یا اسکریپت رشته‌های :force_cat و :force_phn استفاده خواهد شد. (در این حالت رشته‌های :force_cat و :force_phn استفاده نشده است زیرا ما هنوز از همتراز اجباری استفاده نکرده ایم). فایل‌های برچسب دسته که ایجاد شده‌اند در دایرکتوری که مشخص شده در digit.train.info در رشته :cat_path آورده شده اند. اسکریپت gen_catfile.tcl دو فایل خروجی دیگر نیز تولید می کنند. فایل dur و فایل counts. فایل dur شامل محدوده مدت زمان بیشینه و کمینه برای هر دسته می‌باشد که در فایل‌های برچسب دسته تعیین می شوند. فایل شمارش تعداد وقوع های هر دسته را (مدت زمان کل به میلی ثانیه) لیست می کند.
gen_catfiles.tcl digit.train.info digit.parts digit.orig.spec corpora.txt digit.train.dur digit.train.counts

Basename: digit
Partition: train
Corpus: numbers
cat_ext: cat
txt_ext: txt
format: NU-([0-9]+)\.[A-Za-z0-9_]+
lexicon: digit.lexicon
partition: {expr $ID % 5} {0 1 2}
cat_path: numbers_train
txt_path: W:/digit/tutorial/tutorial/data/txtfiles
id: regexp $format $filename filematch ID
remap: remap_tutorial.tcl
phn_ext: phn
filter: 1+1
wav_ext: wav
name: numbers
phn_path: W:/digit/tutorial/tutorial/data/phnfiles
want: 200
wav_path: W:/digit/tutorial/tutorial/data/speechfiles
require: wpt
READING digit.train.numbers.files
Created file NU-25.zipcode.cat
Created file NU-30.zipcode.cat
Created file NU-46.streetaddr.cat
Created file NU-47.zipcode.cat
Created file NU-51.other2.cat
Created file NU-51.other3.cat
Created file NU-51.zipcode.cat
(etc)
Created file NU-596.streetaddr.cat
Created file NU-596.zipcode.cat
Created file NU-597.streetaddr.cat
Sorting durations... taking lowest 2% and top 100% of durations
Done.

این اسکریپت ممکن است پیام زیر را تولید کند:
Merging 996 1094 .glot with right (oU)
یا
** Warning: phoneme '.tc' not known to recognizer
این‌ها پیام‌های ساده‌ای برای کاربر هستند که تعدادی برچسب زمانی که از برچسب‌های دستی به دسته ها تغییر یافته، ادغام شده یا حذف شده و یا چشم‌پوشی شده اند. این پیام‌ها از اسکریپت دوباره نویسی که در این حالت remap_tutorial.tcl است، آمده اند. نیاز به هیچ عملی توسط کاربر نیست. در پایان برای هر دسته مدت زمانی که در پایین صدک دوم از همه مدت زمان ها برای آن دسته به عنوان مدت زمان کمینه در فایل dur و مدت زمان طولانی‌تر دسته به عنوان مدت زمان بیشینه در فایل dur نوشته می شود. این محدوده به جستجوی ویتربی جهت خودداری از درج کلمات بسیار بلند یا بسیار کوتاه در طول زمان تشخیص کمک می کند.
]گام ۱۰] اجرای revise_spec.tcl برای اطمینان از اینکه تعداد مثال‌های کافی برای هر دسته آموزش خواهیم داشت و اضافه کردن محدوده مدت زمان به فایل .spec اگر تعداد مثال‌های کافی برای هر دسته وجود نداشته باشد، ‌این اسکریپت به ما اجازه می‌دهد تا این دسته هارا به دسته هایی که مثال بیشتری دارند مرتبط کنیم . این اسکریپت فقط یک اسکریپت تعاملی در کل فرآیند تشخیص و آموزش است. فایل‌های ورودی فایل‌های spec ورودی، فایل‌ شمارش و فایل dur هستند. خروجی این اسکریپت یک فایل spec جدید است که شامل اطلاعات ارتباطی دسته ها و اطلاعات محدوده مدت زمان است.
revise_spec.tcl digit.orig.spec digit.train.dur digit.train.counts digit.train.spec

minimum number of occurrences per category: 5
Available Categories:
$alv<& &>$sil <.pau> $den<9r $fnt_l<9r <9r>
9r>$fnt_r 9r>$bck_r $alv E>$den $alv<>
$den I>$sil I>$ret_r I>$alv $bck_l<>
$fnt_l$ret_r
$den<\>r <\>r> \>r>$sil \>r>$den \>r>$bck_r \>r>$alv
\>r>$fnt_r $bck_l<^ $den<^ <^> ^>$alv $den<>
$alv aI>$den aI>$alv $alv<>
$bck_l ei>$sil $bck_l<>
$ret_l$bck_r
$ret_l i:>$sil i:>$den i:>$bck_r i:>$alv
kh>$alv $bck_l<>
$ret_l$sil n>$den n>$bck_r n>$alv n>$fnt_r
$bck_l<>
oU>$sil oU>$den oU>$bck_r oU>$alv oU>$fnt_r
$vel<>
$den s>$sil s>$den s>$bck_r s>$fnt_r
s>$alv th>$sil th>$den th>$bck_r th>$alv $alv<>
u>$sil u>$den u>$bck_r u>$alv u>$fnt_r
$fnt_l$sil v>$den v>$bck_r v>$alv
v>$fnt_r $bck_l<>
w>$bck_r $bck_l<>
z>$fnt_r
Tie '&>$den' ( 0 examples) to: &>$sil
Tie '&>$bck_r' ( 0 examples) to: &>$sil
Tie '&>$alv' ( 0 examples) to: &>$sil
Tie '&>$fnt_r' ( 0 examples) to: &>$sil
Tie '$den<>
Tie 'i:>$fnt_r' ( 4 examples) to: i:>$bck_r
Tie 'th>$fnt_r' ( 3 examples) to: th>$bck_r
Tie '$ret_l<>
Tie '$den<>

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

 



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