Allosaurus เป็นผู้จดจำโทรศัพท์สากลที่ได้รับการฝึกฝนมาก่อน มันสามารถใช้ในการจดจำโทรศัพท์ในมากกว่า 2,000 ภาษา
เครื่องมือนี้ขึ้นอยู่กับการจดจำโทรศัพท์สากลของ ICASSP 2020 ของเราด้วยระบบ allophone หลายภาษา
Allosaurus มีให้บริการจาก PIP
pip install allosaurus
คุณยังสามารถโคลนที่เก็บและติดตั้งนี้ได้
python setup.py install
การใช้งานพื้นฐานนั้นค่อนข้างง่ายอินพุตของคุณคือไฟล์เสียง WAV และเอาต์พุตเป็นลำดับของโทรศัพท์
python -m allosaurus.run -i < audio >
ตัวอย่างเช่นคุณสามารถลองใช้ไฟล์ตัวอย่างที่แนบมาในที่เก็บนี้ เดาว่ามีอะไรในไฟล์เสียงนี้ :)
python -m allosaurus.run -i sample.wav
æ l u s ɔ ɹ s
คุณยังสามารถใช้ Allosaurus ได้โดยตรงใน Python
from allosaurus . app import read_recognizer
# load your model
model = read_recognizer ()
# run inference -> æ l u s ɔ ɹ s
model . recognize ( 'sample.wav' )
สำหรับคุณสมบัติและรายละเอียดทั้งหมดโปรดดูส่วนต่อไปนี้
อินเทอร์เฟซบรรทัดคำสั่งมีดังนี้:
python -m allosaurus.run [--lang < language name > ] [--model < model name > ] [--device_id < gpu_id > ] [--output < output_file > ] [--topk < int > ] -i < audio file/directory >
มันจะรับรู้โทรศัพท์แคบ ๆ ในไฟล์เสียง เฉพาะอาร์กิวเมนต์อินพุตเท่านั้นที่จำเป็นเท่านั้นตัวเลือกอื่น ๆ เท่านั้นที่สามารถเพิกเฉยได้ โปรดดูส่วนต่อไปนี้สำหรับรายละเอียดของพวกเขา
นอกจากนี้ยังมีอินเทอร์เฟซ Python อย่างง่ายดังนี้:
from allosaurus . app import read_recognizer
# load your model by the <model name>, will use 'latest' if left empty
model = read_recognizer ( model )
# run inference on <audio_file> with <lang>, lang will be 'ipa' if left empty
model . recognize ( audio_file , lang )
รายละเอียดของอาร์กิวเมนต์ในอินเทอร์เฟซทั้งสองมีดังนี้:
อินพุตสามารถเป็นไฟล์เดียวหรือไดเรกทอรีที่มีไฟล์เสียงหลายไฟล์
หากอินพุตเป็นไฟล์เดียวมันจะส่งออกเฉพาะลำดับโทรศัพท์ หากอินพุตเป็นไดเรกทอรีมันจะส่งออกทั้งชื่อไฟล์และลำดับโทรศัพท์ผลลัพธ์จะถูกเรียงตามชื่อไฟล์
ไฟล์เสียงควรอยู่ในรูปแบบต่อไปนี้:
มันควรจะเป็นไฟล์ WAV หากเสียงไม่ได้อยู่ในรูปแบบ WAV โปรดแปลงเสียงของคุณเป็นรูปแบบ WAV โดยใช้ SOX หรือ FFMPEG ล่วงหน้า
อัตราการสุ่มตัวอย่างอาจเป็นไปได้โดยพลการเราจะกลับมารวมกันโดยอัตโนมัติตามข้อกำหนดของโมเดล
เราถือว่าเสียงเป็นเสียงโมโนช่อง
เอาต์พุตเป็นค่าเริ่มต้น stdout (เช่นจะพิมพ์ผลลัพธ์ทั้งหมดไปยังเทอร์มินัล)
หากคุณระบุไฟล์เป็นเอาต์พุตเอาต์พุตทั้งหมดจะถูกนำไปยังไฟล์นั้น
ตัวเลือก lang
คือ ID ภาษา มันคือการระบุสินค้าคงคลังโทรศัพท์ที่คุณต้องการใช้ ตัวเลือกเริ่มต้นคือ ipa
ซึ่งบอกให้ผู้รู้จำได้ว่าใช้สินค้าคงคลังทั้งหมด (ประมาณ 230 โทรศัพท์)
โดยทั่วไปการระบุสินค้าคงคลังภาษาสามารถปรับปรุงความแม่นยำในการรับรู้ของคุณ
คุณสามารถตรวจสอบรายการภาษาเต็มด้วยคำสั่งต่อไปนี้ จำนวนภาษาที่มีอยู่ประมาณ 2,000
python -m allosaurus.bin.list_lang
ในการตรวจสอบสินค้าคงคลังของภาษาคุณสามารถใช้คำสั่งต่อไปนี้
python -m allosaurus.bin.list_phone [--lang < language name > ]
ตัวอย่างเช่น,
# to get English phone inventory
# ['a', 'aː', 'b', 'd', 'd̠', 'e', 'eː', 'e̞', 'f', 'h', 'i', 'iː', 'j', 'k', 'kʰ', 'l', 'm', 'n', 'o', 'oː', 'p', 'pʰ', 'r', 's', 't', 'tʰ', 't̠', 'u', 'uː', 'v', 'w', 'x', 'z', 'æ', 'ð', 'øː', 'ŋ', 'ɐ', 'ɐː', 'ɑ', 'ɑː', 'ɒ', 'ɒː', 'ɔ', 'ɔː', 'ɘ', 'ə', 'əː', 'ɛ', 'ɛː', 'ɜː', 'ɡ', 'ɪ', 'ɪ̯', 'ɯ', 'ɵː', 'ɹ', 'ɻ', 'ʃ', 'ʉ', 'ʉː', 'ʊ', 'ʌ', 'ʍ', 'ʒ', 'ʔ', 'θ']
python -m allosaurus.bin.list_phone --lang eng
# you can also skip lang option to get all inventory
#['I', 'a', 'aː', 'ã', 'ă', 'b', 'bʲ', 'bʲj', 'bʷ', 'bʼ', 'bː', 'b̞', 'b̤', 'b̥', 'c', 'd', 'dʒ', 'dʲ', 'dː', 'd̚', 'd̥', 'd̪', 'd̯', 'd͡z', 'd͡ʑ', 'd͡ʒ', 'd͡ʒː', 'd͡ʒ̤', 'e', 'eː', 'e̞', 'f', 'fʲ', 'fʷ', 'fː', 'g', 'gʲ', 'gʲj', 'gʷ', 'gː', 'h', 'hʷ', 'i', 'ij', 'iː', 'i̞', 'i̥', 'i̯', 'j', 'k', 'kx', 'kʰ', 'kʲ', 'kʲj', 'kʷ', 'kʷʼ', 'kʼ', 'kː', 'k̟ʲ', 'k̟̚', 'k͡p̚', 'l', 'lʲ', 'lː', 'l̪', 'm', 'mʲ', 'mʲj', 'mʷ', 'mː', 'n', 'nj', 'nʲ', 'nː', 'n̪', 'n̺', 'o', 'oː', 'o̞', 'o̥', 'p', 'pf', 'pʰ', 'pʲ', 'pʲj', 'pʷ', 'pʷʼ', 'pʼ', 'pː', 'p̚', 'q', 'r', 'rː', 's', 'sʲ', 'sʼ', 'sː', 's̪', 't', 'ts', 'tsʰ', 'tɕ', 'tɕʰ', 'tʂ', 'tʂʰ', 'tʃ', 'tʰ', 'tʲ', 'tʷʼ', 'tʼ', 'tː', 't̚', 't̪', 't̪ʰ', 't̪̚', 't͡s', 't͡sʼ', 't͡ɕ', 't͡ɬ', 't͡ʃ', 't͡ʃʲ', 't͡ʃʼ', 't͡ʃː', 'u', 'uə', 'uː', 'u͡w', 'v', 'vʲ', 'vʷ', 'vː', 'v̞', 'v̞ʲ', 'w', 'x', 'x̟ʲ', 'y', 'z', 'zj', 'zʲ', 'z̪', 'ä', 'æ', 'ç', 'çj', 'ð', 'ø', 'ŋ', 'ŋ̟', 'ŋ͡m', 'œ', 'œ̃', 'ɐ', 'ɐ̞', 'ɑ', 'ɑ̱', 'ɒ', 'ɓ', 'ɔ', 'ɔ̃', 'ɕ', 'ɕː', 'ɖ̤', 'ɗ', 'ə', 'ɛ', 'ɛ̃', 'ɟ', 'ɡ', 'ɡʲ', 'ɡ̤', 'ɡ̥', 'ɣ', 'ɣj', 'ɤ', 'ɤɐ̞', 'ɤ̆', 'ɥ', 'ɦ', 'ɨ', 'ɪ', 'ɫ', 'ɯ', 'ɯ̟', 'ɯ̥', 'ɰ', 'ɱ', 'ɲ', 'ɳ', 'ɴ', 'ɵ', 'ɸ', 'ɹ', 'ɹ̩', 'ɻ', 'ɻ̩', 'ɽ', 'ɾ', 'ɾj', 'ɾʲ', 'ɾ̠', 'ʀ', 'ʁ', 'ʁ̝', 'ʂ', 'ʃ', 'ʃʲː', 'ʃ͡ɣ', 'ʈ', 'ʉ̞', 'ʊ', 'ʋ', 'ʋʲ', 'ʌ', 'ʎ', 'ʏ', 'ʐ', 'ʑ', 'ʒ', 'ʒ͡ɣ', 'ʔ', 'ʝ', 'ː', 'β', 'β̞', 'θ', 'χ', 'ә', 'ḁ']
python -m allosaurus.bin.list_phone
ตัวเลือก model
คือการเลือกรุ่นสำหรับการอนุมาน ตัวเลือกเริ่มต้นคือ latest
มันชี้ไปที่รุ่นล่าสุดที่คุณดาวน์โหลด มันจะดาวน์โหลดรุ่นล่าสุดโดยอัตโนมัติในระหว่างการอนุมานครั้งแรกหากคุณไม่มีรุ่นท้องถิ่นใด ๆ
เราตั้งใจที่จะฝึกอบรมนางแบบใหม่และปล่อยอย่างต่อเนื่อง การอัปเดตอาจรวมทั้งไฟล์ไบนารีโมเดลอะคูสติกและคลังโทรศัพท์ โดยทั่วไปชื่อของโมเดลระบุวันที่ฝึกอบรมดังนั้นโดยปกติแล้วควรคาดว่า ID รุ่นที่สูงกว่าควรทำงานได้ดีขึ้น
ในการดาวน์โหลดรุ่นใหม่คุณสามารถเรียกใช้คำสั่งต่อไปนี้
python -m allosaurus.bin.download_model -m < model >
หากคุณไม่ทราบชื่อรุ่นคุณสามารถใช้ชื่อ latest
เป็นชื่อของรุ่นและจะดาวน์โหลดรุ่นล่าสุดโดยอัตโนมัติ
เราทราบว่าการอัปเดตเป็นรุ่นใหม่จะไม่ลบรุ่นดั้งเดิม ทุกรุ่นจะถูกเก็บไว้ภายใต้ไดเรกทอรี pretrained
ที่คุณติดตั้ง Allosaurus คุณอาจต้องการแก้ไขโมเดลของคุณเพื่อให้ได้ผลลัพธ์ที่สอดคล้องกันในระหว่างการทดสอบครั้งเดียว
หากต้องการดูว่ามีรุ่นใดในสภาพแวดล้อมท้องถิ่นของคุณคุณสามารถตรวจสอบด้วยคำสั่งต่อไปนี้
python -m allosaurus.bin.list_model
ในการลบโมเดลคุณสามารถใช้คำสั่งต่อไปนี้ สิ่งนี้อาจมีประโยชน์เมื่อคุณปรับแต่งโมเดลของคุณที่กล่าวถึงในภายหลัง
python -m allosaurus.bin.remove_model
รุ่นปัจจุบันที่มีอยู่คือสิ่งต่อไปนี้
แบบจำลองสากลทำนายโทรศัพท์ที่ไม่ขึ้นกับภาษาและครอบคลุมหลายภาษา นี่คือรุ่นเริ่มต้น Allosaurus จะพยายามดาวน์โหลดและใช้งาน หากคุณไม่พบภาษาของคุณในรูปแบบที่ขึ้นอยู่กับภาษาโปรดใช้โมเดลสากลนี้แทน
แบบอย่าง | ภาษาเป้าหมาย | คำอธิบาย |
---|---|---|
uni2005 | สากล | นี่เป็นรุ่น latest (ก่อนหน้านี้ชื่อ 200529 ) |
เรากำลังวางแผนที่จะส่งมอบแบบจำลองที่ขึ้นกับภาษาสำหรับภาษาที่ใช้กันอย่างแพร่หลาย แบบจำลองที่นี่ได้รับการฝึกฝนด้วยภาษาเป้าหมายโดยเฉพาะ ควรทำงานได้ดีกว่าแบบจำลองสากลสำหรับภาษาเป้าหมาย รุ่นเหล่านั้นจะไม่ถูกดาวน์โหลดโดยอัตโนมัติ โปรดใช้คำสั่ง download_model
ด้านบนเพื่อดาวน์โหลดและใช้ --model
ธงระหว่างการอนุมาน
แบบอย่าง | ภาษาเป้าหมาย | คำอธิบาย |
---|---|---|
eng2102 | ภาษาอังกฤษ (อังกฤษ) | รุ่นภาษาอังกฤษเท่านั้น |
device_id
ควบคุมอุปกรณ์ที่จะเรียกใช้การอนุมาน
โดยค่าเริ่มต้น device_id จะเป็น -1 ซึ่งระบุว่ารุ่นจะใช้ CPU เท่านั้น
อย่างไรก็ตามหากคุณมี GPU คุณสามารถใช้เพื่อการอนุมานได้โดยระบุ device_id เป็นรหัส GPU เดียว (โปรดทราบว่าไม่รองรับการอนุมาน GPU หลายครั้ง)
คุณสามารถดึงการประทับเวลาโดยประมาณสำหรับโทรศัพท์ที่ได้รับการยอมรับแต่ละเครื่องโดยใช้อาร์กิวเมนต์ timestamp
python -m allosaurus.run --timestamp=True -i sample.wav
0.210 0.045 æ
0.390 0.045 l
0.450 0.045 u
0.540 0.045 s
0.630 0.045 ɔ
0.720 0.045 ɹ
0.870 0.045 s
รูปแบบที่นี่ในแต่ละบรรทัดคือ start_timestamp duration phone
ซึ่ง start_timestamp
และ duration
จะแสดงในไม่กี่วินาที
โปรดทราบว่าการประทับเวลาปัจจุบันเป็นเพียงการประมาณ มันจัดทำโดยโมเดล CTC ซึ่งอาจไม่ถูกต้องในบางกรณีเนื่องจากลักษณะของมัน
อินเทอร์เฟซเดียวกันยังมีอยู่ใน Python ดังนี้:
model = read_recognizer ()
model . recognize ( './sample.wav' , timestamp = True )
บางครั้งการสร้างโทรศัพท์มากขึ้นอาจมีประโยชน์ การระบุ ARG-K Top-K จะสร้างโทรศัพท์ K ที่แต่ละเฟรมเปล่งแสง ค่าเริ่มต้นคือ 1
# default topk is 1
python -m allosaurus.run -i sample.wav
æ l u s ɔ ɹ s
# output top 5 probable phones at emitting frame, "|" is used to delimit frames (no delimiter when topk=1)
# probability is attached for each phone, the left most phone is the most probable phone
# <blk> is blank which can be ignored.
python -m allosaurus.run -i sample.wav --topk=5
æ (0.577) ɛ (0.128) ɒ (0.103) a (0.045) ə (0.021) | l (0.754) l̪ (0.196) lː (0.018) ʁ (0.007) ʀ (0.006) | u (0.233) ɨ (0.218) uː (0.104) ɤ (0.070) ɪ (0.066) | s (0.301) < blk > (0.298) z (0.118) s̪ (0.084) sː (0.046) | ɔ (0.454) ɑ (0.251) < blk > (0.105) ɹ̩ (0.062) uə (0.035) | ɹ (0.867) ɾ (0.067) < blk > (0.024) l̪ (0.018) r (0.015) | s (0.740) z (0.191) s̪ (0.039) zʲ (0.009) sː (0.003)
คุณสามารถบอกรูปแบบให้ปล่อยโทรศัพท์ได้มากขึ้นหรือน้อยลงโดยการเปลี่ยนอาร์กิวเมนต์ --emit
หรือ -e
# default emit is 1.0
python -m allosaurus.run -i sample.wav
æ l u s ɔ ɹ s
# emit more phones when emit > 1
python -m allosaurus.run -e 1.2 -i sample.wav
æ l u s f h ɔ ɹ s
# emit less phones when emit < 1
python -m allosaurus.run -e 0.8 -i sample.wav
æ l u ɹ s
คลังโทรศัพท์เริ่มต้นอาจไม่ใช่สินค้าคงคลังที่คุณต้องการใช้ดังนั้นเราจึงมีคำสั่งหลายคำเพื่อให้คุณปรับแต่งสินค้าคงคลังของคุณเอง
เราได้กล่าวว่าคุณสามารถตรวจสอบสินค้าคงคลัง (ค่าเริ่มต้น) ปัจจุบันของคุณด้วยคำสั่งต่อไปนี้
python -m allosaurus.bin.list_phone --lang < language name >
ไฟล์สินค้าคงคลังโทรศัพท์ปัจจุบันสามารถทิ้งลงในไฟล์ได้
# dump the phone file
python -m allosaurus.bin.write_phone --lang < language name > --output < a path to save this file >
หากคุณดูไฟล์มันเป็นเพียงรูปแบบง่าย ๆ ที่แต่ละบรรทัดแสดงถึงโทรศัพท์เดียว ตัวอย่างเช่นไฟล์ต่อไปนี้คือไฟล์ภาษาอังกฤษ
a
aː
b
d
...
คุณสามารถปรับแต่งไฟล์นี้เพื่อเพิ่มหรือลบ IPAs ที่คุณต้องการ แต่ละบรรทัดควรมีโทรศัพท์ IPA เดียวที่ไม่มีที่ว่างใด ๆ มันอาจจะง่ายกว่าที่จะแก้ไขข้อบกพร่องในภายหลังหากการจัดเรียง IPAs แต่ไม่จำเป็นต้องใช้
ถัดไปอัปเดตสินค้าคงคลังของโมเดลของคุณด้วยคำสั่งต่อไปนี้
python -m allosaurus.bin.update_phone --lang < language name > --input < the file you customized)
จากนั้นไฟล์ได้รับการลงทะเบียนในโมเดลของคุณเรียกใช้คำสั่ง list_phone อีกครั้งและคุณจะเห็นว่าตอนนี้ใช้สินค้าคงคลังที่อัปเดตของคุณ
python -m allosaurus.bin.list_phone --lang < language name >
ตอนนี้ถ้าคุณเรียกใช้การอนุมานอีกครั้งคุณสามารถเห็นผลลัพธ์ที่สะท้อนถึงสินค้าคงคลังที่อัปเดตของคุณ
แม้หลังจากการอัปเดตของคุณคุณสามารถสลับกลับไปใช้สินค้าคงคลังดั้งเดิมได้อย่างง่ายดาย ในกรณีนี้ไฟล์ที่อัปเดตของคุณจะถูกลบ
python -m allosaurus.bin.restore_phone --lang < language name >
นอกจากนี้คุณยังสามารถเปลี่ยนผลลัพธ์ได้ด้วยการปรับความน่าจะเป็นก่อนหน้าสำหรับโทรศัพท์แต่ละเครื่อง สิ่งนี้สามารถช่วยคุณลดโทรศัพท์ที่ไม่ต้องการหรือเพิ่มโทรศัพท์ที่ต้องการ
ตัวอย่างเช่นในไฟล์ตัวอย่างเราได้รับผลลัพธ์
æ l u s ɔ ɹ s
สมมติว่าคุณคิดว่าโทรศัพท์เครื่องแรกนั้นผิดและต้องการลดความน่าจะเป็นของโทรศัพท์นี้คุณสามารถสร้างไฟล์ใหม่ prior.txt
นี้ได้ดังนี้
æ -10.0
ไฟล์สามารถมีหลายบรรทัดและแต่ละบรรทัดมีข้อมูลสำหรับแต่ละโทรศัพท์ ฟิลด์แรกคือโทรศัพท์เป้าหมายของคุณและฟิลด์ที่สองคือคะแนนตามบันทึกเพื่อปรับความน่าจะเป็นของคุณ คะแนนบวกหมายความว่าคุณต้องการเพิ่มการทำนายคะแนนเชิงลบจะระงับการทำนาย ในกรณีนี้เราจะได้รับผลลัพธ์ใหม่
python -m allosaurus.run -i=sample.wav --lang=eng --prior=prior.txt
ɛ l u s ɔ ɹ s
ที่ที่คุณสามารถเห็น æ
ถูกระงับและสระอีก ɛ
แทนที่มัน
แอปพลิเคชั่นอื่นของก่อนหน้าคือการเปลี่ยนจำนวนโทรศัพท์ทั้งหมด คุณอาจต้องการเอาต์พุตโทรศัพท์มากขึ้นหรือส่งออกน้อยลง ในกรณีนี้คุณสามารถเปลี่ยนคะแนนสำหรับ <blk>
ซึ่งสอดคล้องกับโทรศัพท์ความเงียบ
คะแนนบวก <blk>
จะเพิ่มความเงียบมากขึ้นดังนั้นจึงลดจำนวนเอาต์พุตในทำนองเดียวกัน <blk>
เชิงลบจะเพิ่มเอาต์พุต ตัวอย่างต่อไปนี้แสดงสิ่งนี้
# <blk> 1.0
python -m allosaurus.run -i=sample.wav --lang=eng --prior=prior.txt
æ l u ɔ ɹ s
# <blk> -1.0
$ python -m allosaurus.run -i=sample.wav --lang=eng --prior=prior.txt
æ l u s f ɔ ɹ s
ตัวอย่างแรกลดโทรศัพท์หนึ่งตัวและตัวอย่างที่สองเพิ่มโทรศัพท์ใหม่
เราสังเกตเห็นว่าโมเดลที่ผ่านการฝึกอบรมอาจไม่ถูกต้องเพียงพอสำหรับบางภาษาดังนั้นเรายังมีเครื่องมือการปรับแต่งที่นี่เพื่อให้ผู้ใช้สามารถปรับปรุงโมเดลของพวกเขาได้โดยปรับให้เข้ากับข้อมูลของพวกเขา ปัจจุบันมันถูก จำกัด เพียงการปรับแต่งด้วยภาษาเดียว
ในการปรับแต่งข้อมูลของคุณคุณต้องเตรียมไฟล์เสียงและการถอดความ ก่อนอื่นโปรดสร้างไดเรกทอรีข้อมูลหนึ่งรายการ (ชื่อสามารถเป็นไปได้) ภายในไดเรกทอรีข้อมูลสร้างไดเรกทอรี train
และไดเรกทอรี validate
เห็นได้ชัดว่าไดเรกทอรี train
จะมีชุดการฝึกอบรมของคุณและไดเรกทอรี validate
จะเป็นชุดการตรวจสอบความถูกต้อง
แต่ละไดเรกทอรีควรมีสองไฟล์ต่อไปนี้:
wave
: นี่คือไฟล์ที่เชื่อมโยงคำพูดกับเสียงที่เกี่ยวข้องtext
: นี่คือไฟล์ที่เชื่อมโยงคำพูดกับโทรศัพท์ wave
คือการแมปไฟล์ TXT แต่ละคำพูดกับไฟล์ WAV ของคุณ แต่ละบรรทัดควรเตรียมดังนี้:
utt_id /path/to/your/audio.wav
ที่นี่ utt_id
หมายถึงรหัสคำพูดมันอาจเป็นสตริงโดยพลการตราบใดที่มันเป็นเอกลักษณ์ในชุดข้อมูลของคุณ audio.wav
เป็นไฟล์ WAV ของคุณตามที่กล่าวไว้ข้างต้นมันควรเป็นรูปแบบ Mono-channel WAV แต่อัตราการสุ่มตัวอย่างอาจเป็นไปได้โดยพลการ (เครื่องมือจะกลับมาใหม่โดยอัตโนมัติหากจำเป็น) ตัวคั่นที่ใช้ที่นี่คือพื้นที่
เพื่อให้ได้ผลลัพธ์การปรับแต่งที่ดีที่สุดไฟล์เสียงแต่ละไฟล์ไม่ควรยาวมาก เราขอแนะนำให้แต่ละคำพูดสั้นกว่า 10 วินาที
text
คือการแมปไฟล์ TXT อื่นคำพูดแต่ละครั้งกับการถอดความของคุณ แต่ละบรรทัดควรเตรียมดังนี้
utt_id phone1 phone2 ...
ที่นี่ utt_id
เป็น ID คำพูดอีกครั้งและควรตรงกับไฟล์ WAV ที่เกี่ยวข้อง ลำดับโทรศัพท์เกิดขึ้นหลังจากคำพูด ID คือการถอดเสียงการออกเสียงของไฟล์ WAV โทรศัพท์ที่นี่ควรถูก จำกัด ไว้ที่คลังโทรศัพท์ของภาษาเป้าหมายของคุณ โปรดตรวจสอบให้แน่ใจว่าโทรศัพท์ทั้งหมดของคุณลงทะเบียนในภาษาเป้าหมายของคุณโดยคำสั่ง list_phone
ต่อไปเราจะแยกคุณสมบัติจากทั้งไฟล์ wave
และไฟล์ text
เราคิดว่าคุณได้เตรียมไฟล์ wave
และไฟล์ text
ไว้แล้วทั้งในไดเรกทอรี train
และ validate
ไดเรกทอรี
ในการเตรียมคุณสมบัติเสียงให้เรียกใช้คำสั่งต่อไปนี้บนไดเรกทอรี train
ของคุณและ validate
ไดเรกทอรี
# command to prepare audio features
python -m allosaurus.bin.prep_feat --model=some_pretrained_model --path=/path/to/your/directory (train or validate)
path
ควรชี้ไปที่รถไฟหรือไดเรกทอรีตรวจสอบความถูกต้อง model
ควรชี้ไปที่โมเดลที่ได้รับการฝึกฝน traget ของคุณ หากไม่ระบุรายละเอียดจะใช้รุ่นล่าสุด มันจะสร้างสามไฟล์ feat.scp
, feat.ark
และ shape
อันแรกคือการจัดทำดัชนีไฟล์แต่ละคำพูดลงในออฟเซ็ตของไฟล์ที่สอง
ไฟล์ที่สองเป็นไฟล์ไบนารีที่มีคุณสมบัติเสียงทั้งหมด
อันที่สามมีข้อมูลมิติคุณสมบัติ
หากคุณอยากรู้อยากเห็นรูปแบบ scp
และ ark
เป็นรูปแบบไฟล์มาตรฐานที่ใช้ใน Kaldi
ในการเตรียมคุณสมบัติข้อความให้เรียกใช้คำสั่งต่อไปนี้อีกครั้งบนไดเรกทอรี train
ของคุณและ validate
ไดเรกทอรี
# command to prepare token
python -m allosaurus.bin.prep_token --model= < some_pretrained_model > --lang= < your_target_language_id > --path=/path/to/your/directory (train or validate)
path
และ model
ควรเหมือนกับคำสั่งก่อนหน้า lang
เป็นรหัสภาษา ISO 3 ตัวอักษรของชุดข้อมูลนี้ โปรดทราบว่าคุณควรตรวจสอบคลังโทรศัพท์ของ ID ภาษานี้แล้วมีการถอดรหัสโทรศัพท์ทั้งหมดของคุณแล้ว มิฉะนั้นการสกัดที่นี่อาจล้มเหลว
หลังจากคำสั่งนี้มันจะสร้างไฟล์ที่เรียกว่า token
ซึ่งแมปแต่ละคำพูดกับลำดับ ID โทรศัพท์
ต่อไปเราสามารถเริ่มปรับแต่งโมเดลของเราด้วยชุดข้อมูลที่เราเพิ่งเตรียมไว้ คำสั่งการปรับแต่งนั้นง่ายมาก
# command to fine_tune your data
python -m allosaurus.bin.adapt_model --pretrained_model= < pretrained_model > --new_model= < your_new_model > --path=/path/to/your/data/directory --lang= < your_target_language_id > --device_id= < device_id > --epoch= < epoch >
มีข้อโต้แย้งเพิ่มเติมอีกสองข้อที่มีอยู่ที่นี่ แต่เราอธิบายข้อโต้แย้งที่จำเป็น
pretrained_model
ควรเป็นรุ่นเดียวกับที่คุณระบุไว้ก่อนหน้าใน prep_token
และ prep_feat
new_model
อาจเป็นชื่อโมเดลโดยพลการ (ที่จริงแล้วมันอาจจะง่ายกว่าที่จะจัดการหากคุณให้รูปแบบเดียวกันกับโมเดลที่ได้รับการฝึกฝน (เช่น yymmdd))))
path
ควรชี้ไปที่ไดเรกทอรีหลักของ train
ของคุณและ validate
ไดเรกทอรี
lang
เป็นรหัสภาษาที่คุณระบุใน prep_token
device_id
คือ GPU ID สำหรับการปรับแต่งหากคุณไม่มี GPU ใด ๆ ให้ใช้ -1 เป็น device_id ไม่รองรับ GPU หลายตัว
epoch
คือจำนวนยุคการฝึกอบรมของคุณ
ในระหว่างการฝึกอบรมจะแสดงข้อมูลบางอย่างเช่นการสูญเสียและอัตราความผิดพลาดทางโทรศัพท์สำหรับทั้งชุดการฝึกอบรมและชุดการตรวจสอบความถูกต้องของคุณ หลังจากแต่ละยุคสมัยนั้นจะได้รับการประเมินด้วยชุดการตรวจสอบความถูกต้องและจะบันทึกจุดตรวจสอบนี้หากอัตราความผิดพลาดของโทรศัพท์ตรวจสอบความถูกต้องดีกว่ารุ่นก่อนหน้า หลังจาก epoch
ที่กำหนดเสร็จแล้วกระบวนการปรับจูนจะสิ้นสุดลงและควรมีรุ่นใหม่
หลังจากกระบวนการฝึกอบรมของคุณรุ่นใหม่ควรมีอยู่ในรายการโมเดลของคุณ ใช้คำสั่ง list_model
เพื่อตรวจสอบรุ่นใหม่ของคุณพร้อมใช้งานแล้ว
# command to check all your models
python -m allosaurus.bin.list_model
หากมีอยู่แล้วรุ่นใหม่นี้สามารถใช้ในสไตล์เดียวกับรุ่นอื่น ๆ ที่ได้รับการฝึกฝน เพียงเรียกใช้การอนุมานเพื่อใช้โมเดลใหม่ของคุณ
python -m allosaurus.run --lang < language id > --model < your new model > --device_id < gpu_id > -i < audio >
งานนี้ใช้ส่วนหนึ่งของรหัสและสินค้าคงเหลือต่อไปนี้ โดยเฉพาะอย่างยิ่งเราใช้ allovera และ phoible อย่างมากเพื่อสร้างสินค้าคงคลังโทรศัพท์ของรุ่นนี้
โปรดอ้างอิงกระดาษต่อไปนี้หากคุณใช้รหัสในงานของคุณ
หากคุณมีคำแนะนำหรือคำแนะนำใด ๆ โปรดส่งอีเมลถึงฉัน (Xinjianl [ที่] cs.cmu.edu) หรือส่งปัญหาใน repo นี้ ขอบคุณ!
@inproceedings { li2020universal ,
title = { Universal phone recognition with a multilingual allophone system } ,
author = { Li, Xinjian and Dalmia, Siddharth and Li, Juncheng and Lee, Matthew and Littell, Patrick and Yao, Jiali and Anastasopoulos, Antonios and Mortensen, David R and Neubig, Graham and Black, Alan W and Florian, Metze } ,
booktitle = { ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) } ,
pages = { 8249--8253 } ,
year = { 2020 } ,
organization = { IEEE }
}