การใช้งาน "เครือข่ายความสนใจที่ได้รับข้อมูลระยะเวลาสำหรับการสังเคราะห์หลายรูปแบบ" (https://arxiv.org/pdf/1909.01700.pdf) กระดาษ
สถานะ : ปล่อยออกมา
ทุเรียนเป็นสถาปัตยกรรมเครื่องเข้ารหัสสำหรับงานการสังเคราะห์แบบข้อความเป็นคำพูด แตกต่างจากสถาปัตยกรรมก่อนหน้าเช่น Tacotron 2 มันไม่ได้เรียนรู้กลไกความสนใจ แต่คำนึงถึงข้อมูลระยะเวลาการออกเสียง ดังนั้นแน่นอนว่าการใช้โมเดลนี้ควรมีชุดข้อมูลที่มีการออกเสียงและระยะเวลา อย่างไรก็ตามคุณอาจลองใช้แบบจำลองระยะเวลาที่ผ่านการฝึกอบรมบนชุดข้อมูล LJSpeech (CMU DICT ที่ใช้) ลิงค์จะให้ไว้ด้านล่าง
แบบจำลองทุเรียนประกอบด้วยสองโมดูล: backbone synthesizer และตัวทำนายระยะเวลา นี่คือความแตกต่างที่น่าสังเกตมากที่สุดจากทุเรียนที่อธิบายไว้ในกระดาษ:
ทั้งการสังเคราะห์กระดูกสันหลังและแบบจำลองระยะเวลาได้รับการฝึกฝนพร้อมกัน สำหรับการใช้งานแบบจำลองระยะเวลาที่ง่ายขึ้นจะทำนายการจัดตำแหน่งมากกว่าจำนวนเฟรมสูงสุดคงที่ คุณสามารถเรียนรู้เอาต์พุตนี้เป็นปัญหา BCE ปัญหา MSE โดยการสรุปผ่านเฟรม-แกนหรือใช้การสูญเสียทั้งสอง (ยังไม่ได้ทดสอบสิ่งนี้) ตั้งค่าใน config.json การทดลองแสดงให้เห็นว่ากระบวนการเพิ่มประสิทธิภาพรุ่นเพียง BCE แสดงให้เห็นว่าตัวเองไม่เสถียรด้วยลำดับข้อความที่ยาวขึ้นดังนั้นจึงชอบใช้ MSE+BCE หรือ Just-MSE (ไม่รังเกียจถ้าคุณได้รับการจัดตำแหน่งที่ไม่ดีใน Tensorboard)
คุณสามารถตรวจสอบการ สาธิตการสังเคราะห์ wavfile (ได้รับมากก่อนการบรรจบกัน) ในโฟลเดอร์ demo (ใช้ Waveglow Vocoder)
ก่อนอื่นตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งแพ็คเกจทั้งหมดโดยใช้ pip install --upgrade -r requirements.txt รหัสถูกทดสอบโดยใช้ pytorch==1.5.0
โคลนที่เก็บ: git clone https://github.com/ivanvovk/DurrIAN
ในการเริ่มต้นการฝึกอบรมเวอร์ชันทุเรียนที่ใช้กระดาษใช้ python train.py -c configs/default.json คุณสามารถระบุเพื่อฝึกอบรมโมเดลพื้นฐานเป็น python train.py -c configs/baseline.json --baseline
เพื่อให้แน่ใจว่าทุกอย่างทำงานได้ดีในสภาพแวดล้อมในพื้นที่ของคุณคุณอาจเรียกใช้การทดสอบหน่วยในโฟลเดอร์ tests โดย python <test_you_want_to_run.py>
การใช้งานนี้ได้รับการฝึกฝนโดยใช้ชุดข้อมูล LJSpeech ตามระยะเวลาที่มีการจัดเรียงตามระยะเวลาพร้อมการลดระยะเวลาการสูญเสีย BCE คุณอาจพบได้ผ่านลิงค์นี้
ข้อเสียเปรียบหลักของโมเดลนี้ต้องใช้ชุดข้อมูลที่สอดคล้องกับระยะเวลา คุณสามารถค้นหาผู้ที่ใช้งาน LJSpeech ที่แยกวิเคราะห์ได้ในการฝึกอบรมการใช้งานปัจจุบันในโฟลเดอร์ filelists ในการใช้ข้อมูลของคุณตรวจสอบให้แน่ใจว่าคุณได้จัดระเบียบ filelists ของคุณในลักษณะเดียวกับที่ให้ ljspeech อย่างไรก็ตามเพื่อประหยัดเวลาและเซลล์ประสาทสมองของคุณคุณอาจลองฝึกอบรมโมเดลในชุดข้อมูลของคุณโดยไม่ต้องปรับระยะเวลาโดยใช้แบบจำลองระยะเวลา ljspeech จากจุดตรวจสอบโมเดลของฉัน (ไม่ได้ลอง) แต่ถ้าคุณสนใจจัดเรียงชุดข้อมูลส่วนบุคคลให้ทำตามส่วนถัดไปอย่างระมัดระวัง
ในการทดลองของฉันฉันจัดตำแหน่ง ljspeech กับเครื่องมือจัดตำแหน่งบังคับมอนทรีออล หากที่นี่มีบางสิ่งที่ไม่ชัดเจนโปรดทำตามคำแนะนำในเอกสารของ Toolkit เริ่มต้นด้วยการจัดตำแหน่งอัลกอริทึมมีหลายขั้นตอน:
จัดระเบียบชุดข้อมูลของคุณอย่างถูกต้อง MFA ต้องการให้อยู่ในโฟลเดอร์เดียวของโครงสร้าง {SOUTTERANCE_ID.LAB, SOUTTERANCE_ID.WAV} ตรวจสอบให้แน่ใจว่าข้อความทั้งหมดของคุณเป็นรูปแบบ .lab
ดาวน์โหลด MFA Release และปฏิบัติตามคำแนะนำการติดตั้งผ่านลิงค์นี้
เมื่อทำกับ MFA คุณต้องใช้พจนานุกรมชุดข้อมูลชุดข้อมูลของคุณด้วยการถอดความหน่วยเสียง ที่นี่คุณมีหลายตัวเลือก:
bin/mfa_generate_dictionary /path/to/model_g2p.zip /path/to/data dict.txt ขอให้สังเกตว่าการติดตั้ง MFA เริ่มต้นจะให้รุ่นที่ผ่านการฝึกอบรมภาษาอังกฤษโดยอัตโนมัติซึ่งคุณอาจใช้ เมื่อคุณเตรียมข้อมูลแล้วพจนานุกรมและโมเดล G2P ตอนนี้คุณพร้อมที่จะจัดแนวแล้ว เรียกใช้คำสั่ง bin/mfa_align /path/to/data dict.txt path/to/model_g2p.zip outdir รอจนกว่าจะเสร็จ โฟลเดอร์ outdir จะมีรายการคำศัพท์และโฟลเดอร์ที่มีไฟล์พิเศษของรูปแบบ .TextGrid ซึ่งจัดเรียงการจัดตำแหน่ง WAVS
ตอนนี้เราต้องการประมวลผลไฟล์กริดข้อความเหล่านี้เพื่อให้ได้ฟิล์มสุดท้าย ที่นี่คุณอาจพบว่ามีประโยชน์แพ็คเกจ Python TextGrid ติดตั้งโดยใช้ pip install TextGrid นี่เป็นตัวอย่างวิธีใช้:
import textgrid
tg = textgrid.TextGrid.fromFile('./outdir/data/text0.TextGrid')
ตอนนี้ tg คือชุดสองวัตถุ: วัตถุแรกมีคำที่จัดเรียงแล้วอันที่สองมีหน่วยเสียงที่อยู่ในแนวเดียวกัน คุณต้องการอันที่สอง แยกระยะเวลา (ในเฟรม! tg มีช่วงเวลาในไม่กี่วินาทีดังนั้นจึงแปลง) สำหรับชุดข้อมูลทั้งหมดโดยการวนซ้ำมากกว่าไฟล์ .TextGrid และเตรียมไฟล์ fileList ในรูปแบบเดียวกับที่ฉันให้ไว้ในโฟลเดอร์ filelists
ฉันพบภาพรวมของผู้จัดตำแหน่งหลายคน บางทีมันอาจจะเป็นประโยชน์ อย่างไรก็ตามฉันขอแนะนำให้คุณใช้ MFA เนื่องจากเป็นหนึ่งในผู้จัดตำแหน่งที่แม่นยำที่สุดเพื่อความรู้ที่ดีที่สุดของฉัน