Tags:

โปรแกรมรู้จำเสียงอัตโนมัติ (Automatic Speech Recognition หรือ ASR) คือโปรแกรมที่รับข้อมูลนำเข้าเป็นเสียงและแปลงให้กลายเป็นข้อความ (text) แบบ real-time ปัจจุบันมีใช้กันแพร่หลายขึ้นมาก อย่าง Siri ของแอปเปิลก็สามารถพูดคุยโต้ตอบกันได้ หรืออย่างเครื่องใช้ไฟฟ้าบางยี่ห้อในปัจจุบันก็ได้เพิ่มฟังก์ชันการสั่งการด้วยเสียงแถมมาด้วย แต่จะเป็นไปได้ไหมถ้าเราจะสามารถสร้างเทคโนโลยีเหล่านี้ขึ้นมาใช้เองได้ ด้วยความสงสัยนี้ผมเลยคิดจะทดลองทำโปรเจคนี้ขึ้นมา

ในตอนแรก ผมคิดจะทำโปรเจคแบบที่พูดใส่คอมพิวเตอร์แล้วให้มันพิมพ์เป็นข้อความตามที่พูด แต่หลังจากประเมินเรื่องระยะเวลาแล้วคิดว่าเป็นไปได้ยาก จึงหันมาทำเรื่องที่ง่ายขึ้น คือการสร้าง device ควบคุมการทำงานของเครื่องใช้ไฟฟ้าด้วยเสียงอย่างง่าย โดยจะต้องใช้เสียงภาษาไทย โปรเจคนี้ไม่น่าจะซับซ้อนมากเพราะเคยเห็นตัวอย่างตามอินเทอร์เน็ตมาบ้างแล้ว แต่สิ่งที่ทำให้โปรเจคนี้น่าสนใจคือการใช้ open source ในการพัฒนา ผมใช้เวลาค้นคว้าสักพักจึงพบว่ามี open source ตัวหนึ่งที่น่าสนใจและมีการแนะนำกันค่อนข้างแพร่หลาย นั่นคือ CMUSphinx ซึ่งหลังจากนั้นมา ผมก็หันมาสนใจการพัฒนาโปรแกรมรู้จำเสียงด้วย CMUSphinx

สำหรับตอนที่หนึ่งนี้ ผมจะพูดถึงโปรแกรม CMUSphinx การสร้างโมเดลที่ใช้ในการสร้างโปรแกรมรู้จำเสียงอัตโนมัติ ซึ่งได้แก่ language model, phonetic dictionary และ acoustic model ครับ

CMUSphinx

CMUSphinx เป็นโปรแกรม automatic speech recognition ที่เป็น open source พัฒนาโดยทีมนักวิจัยจาก Carnegie Mellon University สามารถรู้จำเสียงได้หลายภาษา แต่ถ้าหากจะให้รู้จำภาษาอื่นๆ ที่ไม่มีในฐานข้อมูลของโปรแกรมเราก็สามารถให้คอมพิวเตอร์จำเสียงของเราเพิ่มเติมได้ผ่านการอ่านข้อความให้ฟัง เทคนิคนี้จะเรียกกันว่าการฝึกภาษา (training)

ปัจจุบัน CMUSphinx มีให้ใช้ด้วยกัน 2 แบบ

  1. Sphinx4 เป็น speech recognition ตัวล่าสุด มีความยืดหยุ่นสูง สามารถปรับแต่งได้ง่าย เขียนด้วยภาษา Java
  2. PocketSphinx เป็น speech recognition ที่พัฒนาให้ประมวลผลเร็วและใช้หน่วยความจำน้อย เหมาะสำหรับใช้ใน embedded device เขียนด้วยภาษา C โดยผมเลือกใช้ PocketSphinx ในการทำโปรเจค (เวอร์ชันปัจจุบันคือ 0.8) และพัฒนาบน Linux ครับ

สำหรับโปรแกรมอื่นๆ ที่จำเป็นในการทำ automatic speech recognition มีด้วยกัน 3 ตัว

  1. SphinxBase เป็นไลบรารี่ของ PocketSphinx ถ้าใช้ PocketSphinx อยู่ต้องติดตั้งตัวนี้ด้วย
  2. CMUclmtk เป็นเครื่องมือที่ใช้สร้าง language model ซึ่งเป็นไฟล์ที่จำเป็นมากสำหรับการฝึกคอมพิวเตอร์ให้รู้จำเสียง จะอธิบายรายละเอียดในภายหลัง
  3. SphinxTrain เป็นเครื่องมือที่ใช้ในการฝึกให้ PocketSphinx สามารถรู้จำเสียงที่เราต้องการได้ ซึ่งจะอธิบายวิธีการฝึกภายหลัง

ซอฟต์แวร์ SphinxBase, และ PocketSphinx ผมใช้เวอร์ชันปัจจุบันที่เสถียรที่สุดคือ 0.8 ส่วน SphinxTrain ที่ใช้นั้นคือเวอร์ชัน 1.0.8 โดยสามารถดาวน์โหลดซอฟต์แวร์ทั้งหมดได้ที่ http://cmusphinx.sourceforge.net/wiki/download

การติดตั้งและคอมไพล์โปรแกรม

ลำดับการติดตั้งควรจะเป็นแบบนี้ครับ SphinxBase > PocketSphinx > SphinxTrain ส่วน CMUclmtk ผมคิดว่าไม่น่าจะเกี่ยวข้องกับโปรแกรมสามตัวที่เหลือ จะติดตั้งเมื่อไหร่ก็ได้ สำหรับวิธีการติดตั้งผมจะไม่พูดถึงนะครับ ให้ไปศึกษารายละเอียดเองที่ http://cmusphinx.sourceforge.net/wiki/tutorialpocketsphinx#installation

กระบวนการรู้จำเสียง

กระบวนการรู้จำเสียงของ CMUSphinx สามารถอธิบายได้คร่าวๆ ดังนี้ หลังจากที่ได้รับข้อมูลคลื่นเสียงมาแล้ว Sphinx จะทำการแยกออกเป็น utterances โดยใช้เสียงเงียบ (silence) เป็นตัวแบ่งและจะพยายามแปลคำว่าเสียงที่เปล่งออกมานั้นคือคำว่าอะไร (เรียกว่าการรู้จำหรือ recognition) การที่จะรู้จำได้นั้น โปรแกรมจะต้องเช็กคำทุกคำที่เป็นไปได้แล้วเอาแต่ละคำมาเทียบเสียงกับข้อมูลเสียงที่รับเข้ามาว่าตรงกันหรือไม่ ซึ่งการที่จะให้โปรแกรมเทียบเสียงได้นั้นต้องมีข้อมูลทางด้านโครงสร้างทางภาษา หรือข้อมูลสำหรับเสียงที่โปรแกรมใช้ช่วยในการตัดสินใจในการรู้จำข้อมูล เราเรียกกันว่า “โมเดล”

โมเดลที่ใช้ในกระบวนการรู้จำเสียงของ CMUSphinx

วิธีการหนึ่งที่จะทำให้โปรแกรมสามารถรู้จำเสียงได้นั้นจะต้องอาศัยโมเดลในการช่วยประมวลผลและตัดสินใจว่าเสียงที่เราพูดออกมาควรจะเป็นคำว่าอะไร โมเดลหลักๆ ที่จะต้องใช้ใน CMUSphinx มีอยู่ด้วยกัน 3 ตัว

  1. Acoustic Model เป็นโมเดลที่เก็บคุณสมบัติต่างๆ ของเสียง
  2. Phonetic Dictionary เป็นดิกชันนารีเสียงของคอมพิวเตอร์ คอมพิวเตอร์จะใช้ดิกชันนารีอันนี้เพื่อเช็กว่าคำนี้ควรจะออกเสียงอย่างไร
  3. Language Model เป็นโมเดลที่บอกว่าหากผู้ใช้พูดคำนี้แล้วคำต่อไปน่าจะเป็นอะไรได้บ้าง ตัวอย่างเช่น ผมพูดคำว่า “หิว” คำต่อไปก็ควรจะเป็น “ข้าว” หรือ “น้ำ” มากกว่า “โต๊ะ” เป็นต้น โมเดลนี้จะช่วยลดจำนวนของคำที่เป็นไปได้ให้คอมพิวเตอร์ ทำให้คอมพิวเตอร์ใช้เวลาค้นหาคำเพื่อเปรียบเทียบเสียงน้อยลง

สำหรับข้อมูลเพิ่มเติมตั้งแต่เรื่องของโครงสร้างเสียง กระบวนการรู้จำเสียง และโมเดลที่ใช้ในการรู้จำเสียงสามารถอ่านได้เพิ่มเติมที่ http://cmusphinx.sourceforge.net/wiki/tutorialconcepts

อนึ่ง CMUSphinx ได้สร้างโมเดลสำหรับบางภาษาไว้ (เช่น ภาษาอังกฤษ ภาษาสเปน ภาษารัสเซีย) ซึ่งให้สามารถดาวน์โหลดเพื่อนำไปใช้ได้ผ่าน http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/ แต่เนื่องจากฐานข้อมูลที่ให้มานั้นไม่มีภาษาไทย เราจึงจำเป็นต้องสร้างโมเดลเหล่านี้ขึ้นมาเอง

การสร้าง Language Model

Language model สามารถอธิบายได้ 2 แบบ คือ อธิบายเป็นลักษณะแกรมม่ากับอธิบายในเชิงสถิติการเรียงตัวของคำ สำหรับในบทความนี้จะอธิบายเฉพาะการสร้าง language model เชิงสถิติเท่านั้น การสร้างโมเดลในลักษณะนี้จะใช้โปรแกรม CMUclmtk

อันดับแรกจะต้องหาบทความเพื่อใช้สร้างโมเดลให้ได้เสียก่อน โดยสามารถใช้บทความบนอินเทอร์เน็ตหรือข้อความสนทนาในชีวิตประจำวันได้ แล้วแต่ว่าจะสร้างโปรแกรมรู้จำเสียงเพื่อเอาไปใช้ในลักษณะไหน และไม่จำเป็นว่าจะต้องหาทุกๆ คำที่เกิดขึ้นบนโลก หาแค่ข้อความที่จำเป็นให้ครอบคลุมกับการใช้งานก็พอแล้ว

หลังจากนั้น จะต้องแปลงบทความให้ CMUclmtk สามารถนำไปประมวลผลได้ง่าย โดยทุกคำจะต้องแบ่งด้วย spacebar 1 ตัวเสมอ (เข้าใจว่าโปรแกรม CMUclmtk พัฒนาจากภาษาอังกฤษที่อาศัยการเว้นวรรคในการตัดแบ่งคำ ซึ่งภาษาไทยไม่มีการแบ่งคำ) และการแบ่งแต่ละประโยคออกจากกันจะต้องใส่แท็ก <s> และ </s> เสมอ หากมีคำภาษาอังกฤษควรจะแปลงให้เป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่เหมือนๆ กันหมด และไม่ควรมีเครื่องหมายวรรคตอนหรือตัวเลขใดๆ ปนมาเด็ดขาด

เช่น “แม่มาถึงบ้านแล้ว แมวร้องเหมียวๆ” เราจะต้องเขียนใหม่เป็น

หลังจากที่ได้บทความที่ถูกแปลงมาขั้นต้นแล้ว ก็ใช้โปรแกรมทำการแปลงบทความดังกล่าวให้เป็นโมเดลทางสถิติได้เลย language model ที่ได้จะเป็นฟอร์แมตของ ARPA (ไฟล์สกุล .arpa) ซึ่งจะต้องแปลงเป็นไฟล์สกุล .lm.DMP อีกที

สำหรับวิธีการแปลงทั้งหมดสามารถอ่านได้ที่เว็บนี้ http://cmusphinx.sourceforge.net/wiki/tutoriallm#building_a_statistical_language_model_using_cmuclmtk

การสร้าง Phonetic Dictionary

โครงสร้างของไฟล์ phonetic dictionary (ไฟล์นี้จะมีสกุล .dic) เป็นดังนี้ ในแต่ละบรรทัดจะประกอบไปด้วย 2 ส่วน คือ คำศัพท์ (ทั้งนี้คำจะต้องตรงกับไฟล์ language model ทุกคำ) เว้นวรรค แล้วตามด้วยการออกเสียงของคำศัพท์คำนั้น (phonetic transcription) โดยวิธีการเขียนจะอ้างอิงจาก ARPAbet ครับ (อ่านเพิ่มเติมได้ที่ http://en.wikipedia.org/wiki/Arpabet) ในหนึ่งบรรทัดจะมีคำศัพท์เพียงแค่คำเดียวเท่านั้น

ประเด็นสำคัญสำหรับการสร้าง phonetic dictionary ที่เป็นภาษาไทยคือ เท่าที่ลองค้นคว้ามา ผมไม่พบเว็บไหนที่อธิบายวิธีการเขียน phonetic transcription ภาษาไทยในรูปของ ARPAbet โดยตรง มีแต่รูปแบบของ IPA เท่านั้น (http://en.wikipedia.org/wiki/Help:IPA_for_Thai_and_Lao) แต่ในวิกิพีเดียของ ARPAbet นั้นกลับมีวิธีการแปลงจากการเขียนแบบ IPA มาเป็นแบบ ARPAbet ดังนั้น การสร้างไฟล์ phonetic dictionary อาจจะเดาเสียงเทียบเคียงกับภาษาอังกฤษแล้วเขียนเป็น ARPAbet หรือจะเขียนเสียงเป็น IPA ก่อนแล้วค่อยแปลงเป็น ARPAbet อีกทีก็ได้ครับ

ตัวอย่างการแปลงเช่น คำว่า “ปิด” สามารถเขียน phonetic transcription แบบ ARPAbet ได้เป็น P IH D ดังนั้น เมื่อนำมาเขียนลง phonetic dictionary สามารถเขียนได้เป็น

สำหรับฐานข้อมูลที่มีขนาดใหญ่มากๆ นั้น Sphinx อนุญาตให้ไม่ต้องเขียน phonetic transcription ก็ได้ ตัวอย่างเช่น คำว่า ONE กับ TWO ปกติแล้วจะต้องเขียน phonetic transcription แบบ ARPAbet ดังนี้

ถ้าฐานข้อมูลมีขนาดใหญ่มากก็อนุโลมเขียนแบบนี้ได้ ประสิทธิภาพของ CMUSphinx จะไม่ลดลงเท่าไหร่นัก

แต่ในกรณีที่ฐานข้อมูลมีขนาดเล็กมากนั้น จะต้องเขียน phonetic transcription ของแต่ละเสียงแยกออกจากกัน ตัวอย่างเช่น

การสร้าง Acoustic Model

ก่อนที่จะสร้าง acoustic model ของ SphinxTrain แต่ละครั้งให้คำนึงถึงสิ่งต่างๆ ต่อไปนี้

  • จำเป็นต้องสร้าง acoustic model จริงๆ หรือไม่ ทาง CMUSphinx เองมีโมเดลของบางภาษามาให้อยู่แล้ว เช่น ภาษาอังกฤษ ภาษารัสเซีย ถ้าจะใช้ก็ดาวน์โหลดมาได้เลย กรณีที่ต้องสร้าง acoustic model จริงๆ ส่วนใหญ่จะเกิดจากการที่ต้องสร้างภาษาใหม่ขึ้นมา หรือต้องการสร้างโมเดลเฉพาะทางซึ่งมีขนาดเล็ก ใช้กับคำสั่งง่ายๆ เช่น การสั่งเครื่องใช้ไฟฟ้าให้ทำงานอย่าง “เปิดไฟ” “ปิดจอเครื่อง” เป็นต้น

ในกรณีของโปรเจคผม CMUSphinx ไม่มีโมเดลภาษาไทย และผมเองก็ต้องการสร้างโมเดลรองรับแค่คำสั่งควบคุมเครื่องใช้ไฟฟ้าเท่านั้น ดังนั้น ผมจึงจำเป็นต้องสร้าง acoustic model ขึ้นมาใหม่อย่างหลีกเลี่ยงไม่ได้ครับ

  • ถ้าต้องการเพิ่มความแม่นยำในการรู้จำเสียง หรือต้องการให้ Sphinx สามารถรู้จำสำเนียงใหม่ของภาษาที่มีโมเดลรองรับอยู่แล้ว (เช่น อยากให้ Sphinx สามารถรู้จำภาษาอังกฤษสำเนียงไทย เป็นต้น) ไม่จำเป็นต้องสร้าง acoustic model ครับ ทาง CMUSphinx มีอีกช่องทางหนึ่งเรียกว่า acoustic model adaptation แทน ซึ่งสร้างง่ายกว่าการฝึก acoustic model ใหม่ทั้งหมด จะกล่าวถึงในตอนต่อไป

  • ข้อมูลเสียงต้องมีมากพอที่จะสร้าง acoustic model ได้ มากขนาดไหนดูการเปรียบเทียบของ CMUSphinx ครับ

    • ถ้าต้องการสร้าง speech recognition ที่รู้จำคำสั่งเฉพาะ และ

      • ใช้แค่คนเดียว จะต้องมีข้อมูลเสียงของคนๆ นั้นรวมกัน 1 ชั่วโมง
      • ใช้หลายคน จะต้องมีข้อมูลเสียงของคนอย่างน้อย 200 คน รวมกัน 5 ชั่วโมง
    • ถ้าต้องการสร้าง speech recognition ที่รู้จำภาษาทั้งหมด และ
      • ใช้แค่คนเดียว จะต้องมีข้อมูลเสียงของคนๆ นั้นรวมกัน 10 ชั่วโมง
      • ใช้หลายคน จะต้องมีข้อมูลเสียงของคนอย่างน้อย 200 คน รวมกัน 50 ชั่วโมง

จะเห็นได้ว่า การสร้าง speech recognition แต่ละครั้งต้องใช้ข้อมูลเสียงมหาศาลมาก แต่ในความเป็นจริงไม่จำเป็นต้องใช้เยอะมากถึงขนาดนั้นครับ อย่างโปรเจคของผมก็อัดเสียงรวมๆ กันประมาณครึ่งชั่วโมงก็เพียงพอแล้ว ฉะนั้น ถ้าลองสร้าง acoustic model แล้วโปรแกรม SphinxTrain เกิดขัดข้องไม่สามารถทำการสร้างได้ก็เป็นไปได้ว่าอาจจะต้องเพิ่มข้อมูลเสียงครับ

สำหรับการใช้งานของโปรเจคผม เนื่องจากผมมีคำสั่งง่ายๆ แค่ 4 คำสั่ง คือ “เปิดไฟ” “ปิดไฟ” “เปิดแอร์” “ปิดแอร์” ดังนั้น วิธีการอัดให้ได้ถึงครึ่งชั่วโมงคือต้องพูดคำเดิมซ้ำกันไปเรื่อยๆ แต่เปลี่ยนสภาพแวดล้อมที่ผู้พูดอยู่แทน

คุณสมบัติของข้อมูลเสียงที่ต้องใช้

ไฟล์ข้อมูลเสียงที่จะสามารถนำมาสร้าง acoustic model ได้นั้นต้องมีคุณสมบัติดังต่อไปนี้

  • เป็นไฟล์สกุล .wav หรือ .sph
  • มี sample rate 16 kHz 16 bit สำหรับ desktop application หรือ sample rate 8 kHz 16 bit สำหรับ mobile application
  • ใช้ระบบเสียงแบบ mono
  • ความยาวของข้อมูลเสียงแต่ละไฟล์ควรอยู่ที่ระหว่าง 5 - 30 วินาที
  • Silence (เสียงเงียบ) ตรงช่วงเริ่มต้นและสิ้นสุดของแต่ละไฟล์ไม่ควรเกิน 0.2 วินาที
  • ควรอัดในสภาพแวดล้อมที่ใช้งานจริง เช่น ถ้าใช้ในออฟฟิศก็ควรอัดที่ออฟฟิศเลยครับ

ทาง CMUSphinx แจ้งว่าปัญหาเรื่องของโปรแกรมที่ไม่สามารถสร้าง acoustic model ได้นั้นส่วนใหญ่มาจากการใช้ไฟล์ข้อมูลเสียงที่มีคุณสมบัติไม่ตรงตามสเปกที่กำหนด

เตรียมข้อมูลก่อนการทำ Acoustic Model

ก่อนที่จะกล่าวถึงการเตรียมข้อมูลจะพูดถึงกระบวนการสร้าง acoustic model

การสร้าง acoustic model จะประกอบด้วยสองส่วนคือส่วนการฝึกภาษา (training) ซึ่งก็คือการให้คอมพิวเตอร์พยายามจำว่าเราพูดคำอะไรไปบ้าง กับส่วนการทดสอบ (testing) ซึ่งก็คือการทดสอบว่าคอมพิวเตอร์สามารถบอกได้ว่าเราพูดอะไรไปได้ถูกต้องมากน้อยแค่ไหน ขั้นตอนนี้เป็นสิ่งที่ควรทำทุกครั้งหลังจากสร้าง acoustic model ครับ เพราะจะได้ประเมินว่าโมเดลที่เราสร้างมามีความเที่ยงตรงแค่ไหน เหมาะที่จะนำเอาโมเดลไปใช้จริงหรือไม่

สำหรับข้อมูลเสียงที่จะนำมาทดสอบ acoustic model นั้น ห้ามนำข้อมูลเสียงที่มาจากการฝึกเด็ดขาด (พูดง่ายๆ คือต้องสร้างข้อมูลเสียงสำหรับทดสอบแยกออกมาต่างหาก) ส่วนเรื่องของความยาว ทาง CMUSphinx บอกว่าความยาวรวมๆ กันใช้แค่ 1 ใน 10 ของข้อมูลเสียงที่ใช้ในการฝึกก็พอแล้ว และไม่ควรเกิน 4 ชั่วโมง

การสร้าง acoustic model จะต้องจัดไดเรกทอรีและไฟล์ไว้ดังนี้ (your_db คือชื่อ database ของเราครับ จะตั้งชื่อเป็นอะไรก็ได้)

รายละเอียดของแต่ละไฟล์

  • File_ids (for training and for testing) เป็นไฟล์ที่เก็บไดเรกทอรีของไฟล์ข้อมูลเสียงทั้งหมด โดยจะแยกกันระหว่างไฟล์ที่ใช้ในการฝึกกับไฟล์ที่ใช้ในการทดสอบ โดยจะเขียนที่อยู่บรรทัดละ 1 ไฟล์ และไม่ต้องเขียนสกุลของไฟล์ครับ จากตัวอย่างข้างต้นเราจะเขียนได้ดังนี้
  • Transcription file (for training and for testing) เป็นไฟล์ที่บอกว่าเสียงที่เราบันทึกไปนั้น เราพูดว่าอะไรไปบ้าง วิธีการเขียนก็คือให้เขียนไฟล์ละ 1 บรรทัด โดยเขียนเป็นคำที่เราพูดบันทึกไป ครอบด้วยแท็ก <s> กับ </s> ตามด้วยวงเล็บ ข้างในวงเล็บเขียนชื่อไฟล์ไม่ต้องใส่สกุลไฟล์ครับ ที่สำคัญ ลำดับของแต่ละไฟล์จะต้องตรงกับลำดับใน file_ids ห้ามสลับกันเด็ดขาด จากตัวอย่างข้างต้น สมมติ file_1.wav ผมพูดว่า “ปิดไฟ” ส่วน file_2.wav ผมพูดว่า “เปิดไฟ” ก็ให้เขียนแบบนี้ครับ
  • ไฟล์เสียงที่ใช้สำหรับฝึกภาษา (train) และทดสอบการรู้จำภาษา (test) คุณสมบัติต้องตรงตามที่ได้บอกไว้ครับ ให้เก็บไฟล์เหล่านี้ไว้ในโฟลเดอร์ wav/

  • Phonetic dictionary ไฟล์ดิกชันนารีเสียงซึ่งอธิบายไปแล้วข้างต้น

  • Language model ไฟล์โมเดลทางภาษาซึ่งอธิบายไปแล้วข้างต้น

  • Phoneset file เป็นไฟล์ที่เก็บรายการของเสียงแบบ ARPAbet ทั้งหมดที่มีอยู่ในไฟล์ phonetic dictionary และ filler dictionary วิธีการเขียนก็คือในหนึ่งบรรทัดเขียนตัว ARPAbet ที่ใช้ในไฟล์ phonetic dictionary หนึ่งตัว ซึ่งจะต้องเขียนให้ครบทุกตัว เช่น คำว่า “เปิด” กับ “ปิด” สามารถเขียน phonetic transcription แบบ ARPAbet ได้เป็น P ER D และ P IH D ตามลำดับ ดังนั้น เราก็สามารถเขียนไฟล์ phoneset file ได้ดังนี้

  • Filler dictionary ไฟล์ดิกชันนารีเสียงที่เป็นเสียงรบกวนหรือเสียงที่เป็น noise ครับ (ตัวอย่างเช่น เสียง อืม… เสียงหัวเราะ เสียงหายใจ หรือไม่มีเสียง) ลักษณะการเขียนจะเหมือนๆ กับตอนทำ phonetic dictionary เลยครับ ตัวอย่างต่อไปนี้จะใช้แท็ก <s>, </s> และ <sil> แทนการไม่มีเสียงในช่วงนั้น (SIL แทน silence)

สำหรับตัวอย่างนี้จะใช้ +um+ แทนเสียงอืม และ +noise+ แทนเสียงรบกวนครับ

การเขียน filler dictionary เท่าที่ผมเข้าใจนั้นปกติจะเขียนแค่ SIL ครับ แต่สำหรับเสียง noise ที่เป็น constant noise อย่างเสียง buzz จากไมค์หรือเสียงที่เป็นสภาพแวดล้อมนั้นไม่จำเป็นต้องเขียนในดิกชันนารีเพิ่มครับ อันที่จริง โปรเจคของผมใช้แค่สัญลักษณ์ SIL เท่านั้น นอกจากนี้ จะต้องเพิ่มตัว filler dictionary เข้าไปใน phoneset file ด้วยนะครับ เช่น ไฟล์ผมมีแต่คำว่า SIL ก็จะเพิ่มเสียงนี้เข้าไปใน phoneset file ครับ

หลังจากที่เตรียมไฟล์ครบทั้งหมดแล้วให้นำมาไว้ที่ไดเรกทอรีเดียวกันกับโปรแกรม SphinxTrain, SphinxBase และ PocketSphinx ครับ ตรงนี้จะไม่เหมือนกับที่บอกไว้ในเว็บ tutorial ของ CMUSphinx นะครับ เพราะผมลองทำตามใน CMUSphinx แล้วปรากฏว่าโปรแกรมไม่สามารถสร้างให้ได้เพราะหาไดเรกทอรี etc/ กับ wav/ ไม่เจอ

กระบวนการสร้าง acoustic model

สำหรับวิธีการฝึก acoustic model และรายละเอียดอื่นๆ สามารถดูได้เพิ่มเติมที่ http://cmusphinx.sourceforge.net/wiki/tutorialam

ตอนต่อไป ผมจะพูดถึงการทดสอบและค่าที่ใช้ในการวัดประสิทธิภาพของ speech recognition ที่ CMUSphinx ใช้ การนำ acoustic model, language model และ phonetic dictionary ไปใช้งานจริง การทำ adaptation acoustic model และการทำ voice activation ครับ

edit1: ผมแก้ไขเรื่องของ phoneset file กับ filler dictionary ไว้ในหัวข้อรายละเอียดของแต่ละไฟล์นะครับ

Get latest news from Blognone

Comments

By: panurat2000
ContributorSymbianUbuntuIn Love
on 3 July 2014 - 17:07 #718876
panurat2000's picture

โปรเจคนี้ไม่น่าจะซับซ้อนมากเพราะเคยเห็นตัวอย่างตามอินเตอร์เน็ตมาบ้างแล้ว

โดยสามารถใช้บทความบนอินเตอร์เน็ตหรือข้อความสนทนาในชีวิตประจำวันได้

อินเตอร์เน็ต => อินเทอร์เน็ต

PocketSphinx เป็น speech recognition ที่พัฒนาให้ประมวลผลเร็วและมีใช้หน่วยความจำน้อย

มีใช้หน่วยความจำน้อย ?

โปรแกรมจะต้องเช็คคำทุกคำที่เป็นไปได้แล้วเอาแต่ละคำมาเทียบเสียง

คอมพิวเตอร์จะใช้ดิกชันนารีอันนี้เพื่อเช็คว่าคำนี้ควรจะออกเสียงอย่างไร

เช็ค => เช็ก

เพราะผมลองทำตามใน CMUSphinx แล้วปรากฎว่าโปรแกรมไม่สามารถสร้างให้ได้

ปรากฎ => ปรากฏ

By: littletail
ContributorTraineeWindows
on 3 July 2014 - 17:54 #718888 Reply to:718876

เรียบร้อยครับ

By: tontan
ContributorAndroidSymbianUbuntu
on 3 July 2014 - 21:38 #718937
tontan's picture

น่าสนใจดีนะครับ


บล็อก: wannaphong.com และ Python 3

By: Kurozaku
Windows PhoneAndroidWindows
on 10 November 2014 - 14:44 #762392

มีเพื่อนชาวต่างชาติสนใจเกี่ยวกับ IPA - ARPABET conversion พอมีช่องทางให้ติดต่อหลังไมค์มั้ยครับ

By: nvpssp on 1 April 2018 - 18:47 #1041720

พอดีทำกลังฝึกใช้ pocketsphinx อยู่อ่ะค่ะ มีช่องทางติดต่อเพิ่มเติมมั้ยคะ