blackrock-cio-say-bitcoin-could-reach-new-heights.jpg

“ตกลง Google!”— พูดเป็นข้อความใน Python พร้อมการเรียนรู้เชิงลึกใน 2 นาที

โหนดต้นทาง: 1866555

บทความนี้เผยแพร่โดยเป็นส่วนหนึ่งของไฟล์ Blogathon วิทยาศาสตร์ข้อมูล

บทนำ

คุณอาจใช้บ่อย Google ช่วย หรือแอปเปิ้ล สิริ หรือแม้กระทั่ง Amazon Alexa เพื่อค้นหาคำตอบอย่างรวดเร็วบนเว็บหรือเพียงแค่สั่งบางอย่าง ผู้ช่วย AI เหล่านี้เป็นที่รู้จักกันดีในการเข้าใจคำสั่งเสียงพูดของเราและทำงานที่ต้องการ พวกเขาตอบสนองต่อคำสั่งเสียงอย่างรวดเร็วเช่น "ตกลง Google เมืองหลวงของไอซ์แลนด์คืออะไร?” หรือ “เฮ้ สิริ ขอดูสูตรลาซานญ่าหน่อยค่ะ” และแสดงผลได้อย่างแม่นยำ คุณเคยสงสัยหรือไม่ว่าพวกเขาทำได้อย่างไร? วันนี้ เราจะสร้างระบบการรู้จำเสียงพูดที่เรียบง่าย ซึ่งใช้เสียงของเราเป็นอินพุต และสร้างข้อความที่เกี่ยวข้องโดยการฟังอินพุต

เสียงพูดเป็นข้อความ
1 รูปภาพ

TLDR แสดงรหัสให้ฉันดู!

หากคุณใจร้อนเหมือนฉัน นี่คือซอร์สโค้ดเต็มรูปแบบที่สามารถคัดลอก วาง และดำเนินการผ่านไฟล์ Python ได้อย่างรวดเร็ว ตรวจสอบว่ามีไฟล์ชื่อ 'my-audio.wav' เป็นคำพูดของคุณ ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งไลบรารีทั้งหมดแล้ว

ในส่วนหลังของบทช่วยสอน เราจะพูดถึงสิ่งที่แต่ละบรรทัดกำลังทำ

นี่คือรหัส!

นำเข้าไฟฉาย นำเข้า librosa นำเข้า numpy เป็น np นำเข้าไฟล์เสียงเป็น sf จาก scipy.io นำเข้า wavfile จาก IPython.display นำเข้าเสียงจากหม้อแปลง นำเข้า Wav2Vec2ForCTC, Wav2Vec2Tokenizer
tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
file_name = 'my-audio.wav'
data = wavfile.read(file_name) framerate = data[0] sounddata = data[1] เวลา = np.arange(0,len(sounddata))/framerate input_audio, _ = librosa.load(file_name, sr=16000) input_values = tokenizer (input_audio, return_tensors="pt").input_values ​​logits = model (input_values).logits ที่ทำนายไว้_ids = torch.argmax(logits, dim=-1) การถอดความ = tokenizer.batch_decode(predicted_ids)[0] พิมพ์ (ถอดความ)

ก่อนที่เราจะเริ่ม

อย่าลืมตรวจสอบซอร์สโค้ดแบบเต็มของบทช่วยสอนนี้ใน Github repo นี้.

Wav2Vec: โมเดลการปฏิวัติ

wave2vec | คำพูดเป็นข้อความ
2 รูปภาพ

เราจะใช้ เวฟทูเวค — แนวทางการรู้จำคำพูดที่ล้ำสมัยโดย Facebook

นักวิจัยที่ Facebook อธิบายแนวทางนี้ว่า:

มีภาษาพูดหลายพันภาษาทั่วโลก หลายภาษามีหลายภาษา ซึ่งถือเป็นความท้าทายครั้งใหญ่สำหรับการสร้างเทคโนโลยีการรู้จำเสียงพูดคุณภาพสูง เป็นไปไม่ได้เลยที่จะได้รับแหล่งข้อมูลสำหรับแต่ละภาษาและทุกภาษาจากขอบเขตที่เป็นไปได้มากมาย (คำพูดสำหรับการอ่าน คำพูดทางโทรศัพท์ ฯลฯ) wav2vec 2.0 รุ่นใหม่ของเรา ใช้การกำกับดูแลตนเองเพื่อขยายขอบเขตโดยการเรียนรู้จากข้อมูลการฝึกที่ไม่มีป้ายกำกับ เพื่อเปิดใช้งานระบบการรู้จำคำพูดสำหรับภาษา ภาษาถิ่น และโดเมนอีกมากมาย ด้วยข้อมูลการฝึกที่มีป้ายกำกับเพียงหนึ่งชั่วโมง wav2vec 2.0 มีประสิทธิภาพเหนือกว่ารุ่นก่อนหน้าในชุดย่อย 100 ชั่วโมงของเกณฑ์มาตรฐาน LibriSpeech โดยใช้ข้อมูลที่มีป้ายกำกับน้อยกว่า 100 เท่า

ไปเลย! Wav2Vec เป็นรูปแบบการควบคุมตนเองที่มีจุดมุ่งหมายเพื่อสร้างระบบการรู้จำเสียงพูดสำหรับหลายภาษาและหลายภาษา ด้วยข้อมูลการฝึกอบรมเพียงเล็กน้อย (น้อยกว่าป้ายประมาณ 100 เท่า) โมเดลนี้จึงมีประสิทธิภาพเหนือกว่าเกณฑ์มาตรฐานที่ล้ำสมัยก่อนหน้านี้

โมเดลนี้ เช่น BERT ได้รับการฝึกฝนโดยการคาดคะเนหน่วยคำพูดสำหรับเซ็กเมนต์เสียงที่ปิดบัง ในทางกลับกัน เสียงพูดเป็นสัญญาณต่อเนื่องที่จับคุณลักษณะหลายอย่างของการบันทึกโดยไม่แบ่งกลุ่มเป็นคำหรือหน่วยอื่นๆ อย่างชัดเจน Wav2vec 2.0 แก้ไขปัญหานี้โดยการเรียนรู้หน่วยพื้นฐาน 25ms เพื่อเรียนรู้การเป็นตัวแทนตามบริบทในระดับสูง จากนั้นหน่วยเหล่านี้จะนำไปใช้เพื่อกำหนดลักษณะการบันทึกเสียงพูดที่หลากหลาย เพื่อเพิ่มความทนทานของ wav2vec ด้วยข้อมูลการฝึกที่มีป้ายกำกับน้อยกว่า 100 เท่า เราจึงสามารถสร้างอัลกอริธึมการรู้จำเสียงได้เหนือกว่าแนวทางแบบกึ่งควบคุมที่ดีที่สุด ด้วยการเรียนรู้ด้วยตนเอง Wav2vec 2.0 เป็นส่วนหนึ่งของโมเดลการเรียนรู้ของเครื่องที่พึ่งพาอินพุตที่มีป้ายกำกับน้อยกว่า การกำกับดูแลตนเองได้ช่วยในการพัฒนาระบบการจำแนกภาพ ความเข้าใจในวิดีโอ และระบบการเข้าใจเนื้อหา อัลกอริธึมสามารถนำไปสู่ความก้าวหน้าในเทคโนโลยีเสียงพูดสำหรับภาษา ภาษาถิ่น และโดเมนที่หลากหลาย รวมถึงระบบปัจจุบัน

การเลือกสภาพแวดล้อมและห้องสมุดของเรา

เราจะใช้ ไพทอร์ชซึ่งเป็นเฟรมเวิร์กแมชชีนเลิร์นนิงแบบโอเพนซอร์สสำหรับการดำเนินการนี้ ในทำนองเดียวกัน เราจะใช้ หม้อแปลง, ห้องสมุดประมวลผลภาษาธรรมชาติที่ล้ำสมัยโดย กอดหน้า.

ด้านล่างนี้คือรายการข้อกำหนดทั้งหมดที่คุณอาจต้องการติดตั้งผ่าน pip ขอแนะนำให้คุณติดตั้งแพ็คเกจเหล่านี้ทั้งหมดภายใน a สภาพแวดล้อมเสมือนจริง ก่อนดำเนินการต่อ

  1. โน้ตบุ๊ค Jupyter
  2. ไฟฉาย
  3. ลิโบรซา
  4. นัมปี้
  5. ไฟล์เสียง
  6. สคิปปี้
  7. ไอไพธอน
  8. หม้อแปลง

การทำงานกับรหัส

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

เมื่อโหลดสมุดบันทึกแล้ว ให้สร้างไฟล์ใหม่และเริ่มนำเข้าไลบรารี

นำเข้าไฟฉาย นำเข้า librosa นำเข้า numpy เป็น np นำเข้าไฟล์เสียงเป็น sf จาก scipy.io นำเข้า wavfile จาก IPython.display นำเข้าเสียงจากหม้อแปลง นำเข้า Wav2Vec2ForCTC, Wav2Vec2Tokenizer

ตอนนี้เรานำเข้าไลบรารีทั้งหมดสำเร็จแล้ว ให้โหลดตัวสร้างโทเค็นและโมเดลของเรา เราจะใช้แบบจำลองที่ได้รับการฝึกอบรมล่วงหน้าสำหรับตัวอย่างนี้ โมเดลที่ได้รับการฝึกอบรมล่วงหน้าคือโมเดลที่ได้รับการฝึกอบรมจากบุคคลอื่นซึ่งเราสามารถนำกลับมาใช้ใหม่ได้ในระบบของเรา โมเดลที่เราจะนำเข้านั้นได้รับการฝึกฝนโดย Facebook

tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")

อาจใช้เวลาในการดาวน์โหลด

เมื่อเสร็จแล้ว คุณสามารถบันทึกเสียงของคุณและบันทึกไฟล์ wav ถัดจากไฟล์ที่คุณกำลังเขียนโค้ดของคุณ คุณสามารถตั้งชื่อเสียงของคุณเป็น “my-audio.wav”

file_name = 'my-audio.wav' เสียง (file_name)

ด้วยรหัสนี้ คุณสามารถเล่นเสียงของคุณในสมุดบันทึก Jupyter

ถัดไป: เราจะโหลดไฟล์เสียงของเราและตรวจสอบอัตราตัวอย่างและเวลาทั้งหมดของเรา

data = wavfile.read(file_name) framerate = data[0] sounddata = data[1] time = np.arange(0,len(sounddata))/framerate print('Sampling rate:',framerate,'Hz')

ผลลัพธ์จากตัวอย่างนี้จะแตกต่างไปจากของคุณ เนื่องจากคุณอาจใช้เสียงของคุณเอง

อัตราการสุ่มตัวอย่าง: 44100 Hz

สิ่งนี้ถูกพิมพ์ออกมาสำหรับเสียงตัวอย่างของฉัน

เราต้องแปลงอัตราตัวอย่างเป็น 16000 Hz เนื่องจากโมเดลของ Facebook ยอมรับอัตราการสุ่มตัวอย่างในช่วงนี้ เราจะขอความช่วยเหลือจาก Librosa ห้องสมุดที่เราได้ติดตั้งไว้ก่อนหน้านี้

input_audio, _ = librosa.load(ชื่อไฟล์, sr=16000)

ในที่สุด เสียงอินพุตจะถูกส่งไปยังเครื่องโทเค็นซึ่งจะถูกประมวลผลโดยโมเดล ผลลัพธ์สุดท้ายจะถูกเก็บไว้ในตัวแปรการถอดความ

input_values ​​= tokenizer (input_audio, return_tensors="pt") .input_values ​​logits = model (input_values).logits ทำนาย_ids = torch.argmax(logits, dim=-1) การถอดความ = tokenizer.batch_decode(predicted_ids)[0] พิมพ์ (ถอดความ)

ผลลัพธ์:

'การเรียนรู้อย่างลึกซึ้งนั้นน่าทึ่ง'

นั่นคือสิ่งที่ฉันได้บันทึกไว้ในไฟล์ my-audio.wav

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

เกี่ยวกับผู้เขียน:

สวัสดี! ฉันชื่อ Akash และทำงานเป็นนักพัฒนา Python มานานกว่า 4 ปีแล้ว ในเส้นทางอาชีพของฉัน ฉันเริ่มเป็น Junior Python Developer ที่ไซต์พอร์ทัลงานที่ใหญ่ที่สุดของเนปาล มีโรจ็อบ. ต่อมา ฉันมีส่วนร่วมใน Data Science และการวิจัยที่บริษัทแชร์รถแห่งแรกของเนปาล ฟัน. ปัจจุบัน ฉันมีส่วนร่วมอย่างแข็งขันในด้าน Data Science รวมถึงการพัฒนาเว็บกับ Django

คุณสามารถค้นหาโครงการอื่นๆ ของฉันได้ที่:

https://github.com/akashadhikari

เชื่อมต่อกับฉันใน LinkedIn

https://www.linkedin.com/in/akashadh/

อีเมล: [ป้องกันอีเมล] | [ป้องกันอีเมล]

เว็บไซต์ (กำลังทำงานในบล็อก Data Science): https://akashadhikari.github.io/

แหล่งรูปภาพ:

ภาพที่ 1 – https://www.bullfrag.com/how-to-program-google-assistant-commands-type-ok-google-turn-off-the-lights-in-10-minutes/

ภาพที่ 2 – https://www.bullfrag.com/how-to-program-google-assistant-commands-type-ok-google-turn-off-the-lights-in-10-minutes/

หมายเหตุท้าย:

ขอขอบคุณสำหรับการอ่าน!

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

ที่มา: https://www.analyticsvidhya.com/blog/2021/09/ok-google-speech-to-text-in-python-with-deep-learning-in-2-minutes/

ประทับเวลา:

เพิ่มเติมจาก การวิเคราะห์ วิทยา