Speech To Text : AWS Transcribe VS Google Cloud Speech API VS Microsoft Azure Cognitive

สวัสดีครับท่านอ่านทุกท่าน ในปัจจุบันเทคโนโลยีการแปลงเสียงเป็นตัวอักษร (Speech To Text) มีความแม่นยำจนถึงในระดับที่สามารถนำมาใช้งานได้จริง ไม่ว่าจะเป็น Automotive การสั่งงานเสียงในรถยนต์ให้ทำ function ต่างๆ เช่น การเปิดเพลง การรับโทรศัพท์ Healthcare ที่ได้เพื่อการใช้งานมีความสะดวกมากยิ่งขึ้น

การที่เราอยากใช้ function การทำงานดังกล่าว แต่ไม่อยากเสียเวลาพัฒนาระบบขึ้นมา หรือพัฒนาขึ้นมาแล้วอาจจะดีไม่เท่าการให้บริการที่มีอยู่ ดังนั้นเราจึงสนใจที่จะทดสอบการให้บริการ Speech-To-Text สำหรับผู้ให้บริการ cloud ที่มีอยู่ในปัจจุบัน โดยเราได้ทำการทดสอบ (Benchmark) โดยสมมุติให้เราเป็นบริษัทในไทยที่อยากใช้บริการ Speech to Text ผู้ให้บริการ Speech-To-Text 3 แหล่ง คือ Amazon, Google และ Microsoft


Speech Corpus

ข้อมูลที่เรานำมาทดสอบจะใช้จาก VoxForge ซึ่งเป็น open sources ซึ่งเราได้ทำการคัดเลือกข้อมูลที่จะนำมาใช้เป็นภาษา English ทั้งหมด 20 คน แบ่งออกเป็นชาย 10 คน หญิง 10 คน โดยจะมีสำเนียง (Pronounciation) ที่แตกต่างกันไป โดย 1 คนจะพูดประมาณ 10 ประโยค ประโยคละ 1 file เสียง

เริ่มมาดูที่ละ Cloud provider กันเลยครับบ ^_^


AWS transcribe

โดยในการทดสอบนี้เราจะสร้าง
1. EC2 (instance ของ amazon) อยู่ที่ Singapore 
2. Amazon transcribe (speech to text service) อยู่ที่ Sydney 
3. Amazon S3 (storage) อยู่ที่ Sydney

เริ่มจากต้องไปสร้าง account ของ aws ก่อนเลย (สมมุติว่าสร้างเสร็จแล้ว) Login แล้วมาที่หน้า AWS transcribe

Amazon Transcribe Website

Amazon Transcribe จะสร้างงานเพื่อแปลงเสียงเป็นตัวอักษรเรียกว่า trascription job โดยสามารถลองใช้ได้โดย กด Try Amazon Transcribe ได้

Create transcription job

โดยจะสังเกตเห็นว่าจะมีช่อง S3 input URL อยู่ด้วย ดังนั้นผู้ใช้งานจำเป็นจะต้องมี S3 ที่เก็บข้อมูลที่จะนำมาเป็นข้อมูลนำเข้า (input) สำหรับให้ AWS transcribe ใช้งาน โดย output จะถูกเก็บใน S3 ที่เราต้องตั้งค่าไว้ตามรูปด้านล่าง

Example output transcription job

โดยเราจะสร้าง script โดยใช้ภาษา python แล้วนำไปใส่ไว้ใน EC2 แล้วสั่ง run โดยใช้ script ดังนี้

หลังจากที่ run script เสร็จก็จะได้ transcription job พร้อมผลลัพธ์ที่อยู่ใน json format นำ json เหล่านั้นมา process ต่อโดยสร้าง script ที่รวม file + จัดการ format ของ file

โดยจะได้ผลลัพธ์ที่อยู่ใน format {‘ชื่อfile’ : “ผลลัพธ์จากการใช้ Amazon transcribe”} เพื่อนำไปใช้วิเคราะห์ต่อ


Microsoft Azure Cognitive Service

เช่นเดียวกับ Amazon Transcribe ก่อนที่เราจะทดสอบ เราต้องทำการสร้าง account ก่อน จากนั้นเราจะสามารถใช้งาน Cognitive Service ได้ผ่านทางหน้า Dashboard ของ portal โดยการกด All resources > Add ค้นหาคำว่า speech จากนั้นก็ทำการสร้าง speech service สำหรับการทดสอบกันเลย

จากนั้นเราจะสร้าง script สำหรับทดสอบโดย script นี้ได้มาจาก Speech SDK โดยการเข้าไปที่ Quick start ของ Speech service ที่เราสร้างมา

เมื่อได้ script มาแล้ว จะมีฟังก์ชันให้เราใช้หลายฟังก์ชัน โดยเราใช้ SpeechContinuousRecognitionWithFile ให้เราใส่ Subscript Key, Region ของ Speech service ที่เราสร้างขึ้น และเปลี่ยนชื่อไฟล์เสียง

จากนั้นนำ script นี้ไปรันบน Microsoft Azure Virtual Machine ของเราจะได้ผลลัพธ์ออกมาของการทำ Speech to text เพื่อใช้ในการทดสอบต่อไป


Google Cloud Speech API

Provider เจ้าสุดท้ายที่เราจะทดสอบกันก็คือ Google Cloud Speech API นะครับ เริ่มแรกคือเราต้องไปเพิ่มบริการ Speech API ใน Google Cloud ก่อนครับ

จากในภาพนี้ก็คือตัวซ้ายสุดครับ พอสร้างเสร็จแล้วก็ทำสร้าง credential เพื่อขอใช้บริการ Speech API ตามสะดวกเลยครับ ซึ่งในการทดสอบนี้ เราเลือกใช้ API key ในการทำ authentication ครับ

ลำดับต่อไป ทุกอย่างเสร็จเรียบร้อยแล้ว เราก็ต้องเตรียมไฟล์เสียงของเราก่อนครับ ในงานนี้เราได้แปลงไฟล์ WAV เป็น FLAC ซึ่งเป็นการแปลงไฟล์ที่ไม่สูญเสียข้อมูลครับ เพื่อให้สามารถส่งได้ตามที่ได้บอกไว้ใน document ของ Google Cloud ครับ (https://cloud.google.com/speech-to-text/docs/reference/rest/v1/speech/recognize) ต้องขอขอบคุณเว็บไซต์ https://audio.online-convert.com/convert-to-flac ที่เป็นเครื่องมือสำหรับแปลงไฟล์เสียงด้วยครับ เราได้นำไฟล์เสียงที่แปลงมาแล้วมาเก็บในรูปแบบของเลขฐาน 64 เอาไว้ก่อน จากนั้นก็ใส่เข้าไปใน request ในการส่ง request นั้นที่จริงเราสามารถตั้งค่าสำเนียงของไฟล์ได้ด้วย แต่ในงานนี้เราได้ตั้งสมมติฐานว่าบริษัทในไทยที่สนใจนั้นไม่สามารถแยกสำเนียงของผู้ใช้ระบบได้ จึงใช้ option ‘en-US’ เป็นค่า default การตั้งค่านี้ส่งผลถึงความแม่นยำแน่นอนแต่ก็สามารถปรับปรังให้ดีขึ้นได้ถ้าเราตั้งสมมติฐานใหม่ว่าบริษัทเหล่านั้นสามารถจำแนกสำเนียงของผู้ใช้งานได้

นี่จะเป็นส่วนหนึ่งของโค้ดครับ สังเกตว่าในโค้ดมีการวนหา theBest ด้วย นั่นเป็นเพราะบางที Google อาจส่งกลับมาได้หลายคำตอบพร้อม confidence level ที่ต่างกันไป ในงานนี้ได้นำเอาค่า confidence ที่สูงที่สุดมาเป็นคำตอบครับ


Result

เราจะใช้ตัวชี้วัดทั้งหมด 3 อย่างนั้นก็คือ
 1. Accuracy
 2. Time
 3. Price

เราจะใช้ web tools เพื่อเปรียบเทียบผลลัพธ์ที่ได้จากการ process กับ ข้อมูลที่ถูกต้องจะได้ผลลัพธ์ดังภาพด้านล่าง

Compare Result

Removals คือ จำนวนที่ต้องเอาคำออก
Additions คือ จำนวนคำที่ต้องเพิ่ม เช่น
ผลลัพธ์ที่ได้มาคือ This is a computar แต่ที่ถูกต้องคือ This is a computer จะได้ Removals 1 Addition 1 เพื่อเอาคำ computar ออก แล้วนำคำ computer เข้ามาแทน ส่วน Amazon 92/200 คือ มีทั้งหมด 200 ประโยค แปลถูกทั้งประโยคโดยไม่ผิดเลย 92 ประโยค จากผลจะได้ว่า amazon มีความแม่นยำมากที่สุด

จะเห็นได้ว่าของ amazon ใช้เวลานานมาก ส่วนของ google จะเร็วมาก

ส่วนในเรื่องของราคาก็ตามรูปเลยครับ

Team: 
Chawit U-Viengchai
Natthapat Kanchanapraphat
Panayu Keelawat