Allosaurus adalah pengenalan telepon universal pretrained. Ini dapat digunakan untuk mengenali ponsel dalam lebih dari 2000 bahasa.
Alat ini didasarkan pada pengenalan telepon universal ICASSP 2020 kami dengan sistem allophone multibahasa
Allosaurus tersedia dari PIP
pip install allosaurus
Anda juga dapat mengkloning repositori ini dan menginstal
python setup.py install
Penggunaan dasarnya cukup sederhana, input Anda adalah file audio WAV dan output adalah urutan ponsel.
python -m allosaurus.run -i < audio >
Misalnya, Anda dapat mencoba menggunakan file sampel terlampir di repositori ini. Coba tebak apa yang ada di file audio ini :)
python -m allosaurus.run -i sample.wav
æ l u s ɔ ɹ s
Anda juga dapat menggunakan alosaurus langsung di Python
from allosaurus . app import read_recognizer
# load your model
model = read_recognizer ()
# run inference -> æ l u s ɔ ɹ s
model . recognize ( 'sample.wav' )
Untuk fitur dan detail lengkap, silakan merujuk ke bagian berikut.
Antarmuka baris perintah adalah sebagai berikut:
python -m allosaurus.run [--lang < language name > ] [--model < model name > ] [--device_id < gpu_id > ] [--output < output_file > ] [--topk < int > ] -i < audio file/directory >
Ini akan mengenali ponsel sempit dalam file audio. Hanya argumen input yang wajib, opsi lain yang dapat diabaikan. Silakan merujuk ke bagian berikut untuk detailnya.
Ada juga antarmuka Python sederhana sebagai berikut:
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 )
Rincian argumen di kedua antarmuka adalah sebagai berikut:
Input dapat berupa satu file atau direktori yang berisi beberapa file audio.
Jika input adalah satu file, itu hanya akan menghasilkan urutan telepon; Jika input adalah direktori, itu akan mengeluarkan nama file dan urutan telepon, hasilnya akan diurutkan berdasarkan nama file.
File audio harus dalam format berikut:
Itu harus menjadi file wav. Jika audio tidak dalam format WAV, harap konversi audio Anda ke format WAV menggunakan SOX atau FFMPEG terlebih dahulu.
Laju pengambilan sampel dapat sewenang -wenang, kami akan secara otomatis mengubahnya berdasarkan persyaratan model.
Kami menganggap audio adalah audio mono-channel.
Outputnya secara default stdout (yaitu itu akan mencetak semua hasil ke terminal).
Jika Anda menentukan file sebagai output, maka semua output akan diarahkan ke file itu.
Opsi lang
adalah ID bahasa. Ini untuk menentukan inventaris telepon yang ingin Anda gunakan. Opsi default adalah ipa
yang memberi tahu pengakuan untuk menggunakan seluruh inventaris (sekitar 230 ponsel).
Secara umum, menentukan inventaris bahasa dapat meningkatkan akurasi pengakuan Anda.
Anda dapat memeriksa daftar bahasa lengkap dengan perintah berikut. Jumlah bahasa yang tersedia sekitar tahun 2000.
python -m allosaurus.bin.list_lang
Untuk memeriksa inventaris bahasa, Anda dapat menggunakan perintah berikut
python -m allosaurus.bin.list_phone [--lang < language name > ]
Misalnya,
# 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
Opsi model
adalah memilih model untuk inferensi. Opsi default latest
, menunjuk pada model terbaru yang Anda unduh. Ini akan secara otomatis mengunduh model terbaru selama inferensi pertama Anda jika Anda tidak memiliki model lokal.
Kami bermaksud melatih model baru dan terus melepaskannya. Pembaruan mungkin termasuk file biner model akustik dan inventaris telepon. Biasanya, nama model menunjukkan tanggal pelatihannya, jadi biasanya ID model yang lebih tinggi harus diharapkan untuk berkinerja lebih baik.
Untuk mengunduh model baru, Anda dapat menjalankan perintah berikut.
python -m allosaurus.bin.download_model -m < model >
Jika Anda tidak tahu nama modelnya, Anda dapat menggunakan nama model latest
dan secara otomatis akan mengunduh model terbaru.
Kami mencatat bahwa memperbarui ke model baru tidak akan menghapus model asli. Semua model akan disimpan di bawah direktori pretrained
tempat Anda memasang alosaurus. Anda mungkin ingin memperbaiki model Anda untuk mendapatkan hasil yang konsisten selama satu percobaan.
Untuk melihat model mana yang tersedia di lingkungan lokal Anda, Anda dapat memeriksa dengan perintah berikut
python -m allosaurus.bin.list_model
Untuk menghapus model, Anda dapat menggunakan perintah berikut. Ini mungkin berguna ketika Anda menyempurnakan model Anda yang disebutkan nanti.
python -m allosaurus.bin.remove_model
Model yang tersedia saat ini adalah berikut
Model universal memprediksi ponsel-bahasa-independen dan mencakup banyak bahasa. Ini adalah model default Allosaurus akan mencoba mengunduh dan menggunakannya. Jika Anda tidak dapat menemukan bahasa Anda pada model yang bergantung pada bahasa, silakan gunakan model universal ini sebagai gantinya.
Model | Bahasa target | Keterangan |
---|---|---|
uni2005 | Universal | Ini adalah model latest (sebelumnya dinamai tahun 200529 ) |
Kami berencana untuk memberikan model yang bergantung pada bahasa untuk beberapa bahasa yang banyak digunakan. Model di sini dilatih dengan bahasa target secara khusus. Ini harus berkinerja jauh lebih baik daripada model universal untuk bahasa target. Model -model tersebut tidak akan diunduh secara otomatis. Harap gunakan perintah download_model
di atas untuk diunduh, dan gunakan -bendera --model
selama inferensi.
Model | Bahasa target | Keterangan |
---|---|---|
eng2102 | Bahasa Inggris (Eng) | Model Bahasa Inggris saja |
device_id
mengontrol perangkat mana yang akan menjalankan inferensi.
Secara default, device_id akan menjadi -1, yang menunjukkan model hanya akan menggunakan CPU.
Namun, jika Anda memiliki GPU, Anda dapat menggunakannya untuk inferensi dengan menentukan Device_ID ke ID GPU tunggal. (Perhatikan bahwa beberapa inferensi GPU tidak didukung)
Anda dapat mengambil perkiraan waktu perkiraan untuk setiap telepon yang dikenali dengan menggunakan argumen 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
Format di sini di setiap baris adalah start_timestamp duration phone
di mana start_timestamp
dan duration
ditampilkan dalam detik.
Perhatikan bahwa cap waktu saat ini hanya pendekatan. Ini disediakan oleh model CTC, yang mungkin tidak akurat dalam beberapa kasus karena sifatnya.
Antarmuka yang sama juga tersedia di Python sebagai berikut:
model = read_recognizer ()
model . recognize ( './sample.wav' , timestamp = True )
Terkadang menghasilkan lebih banyak ponsel mungkin bermanfaat. Menentukan Arg Top-K akan menghasilkan telepon K pada setiap bingkai pemancaran. Default adalah 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)
Anda dapat memberi tahu model untuk memancarkan lebih banyak ponsel atau lebih sedikit ponsel dengan mengubah argumen --emit
atau -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
Inventarisasi telepon default mungkin bukan inventaris yang ingin Anda gunakan, jadi kami menyediakan beberapa perintah di sini untuk Anda menyesuaikan inventaris Anda sendiri.
Kami telah menyebutkan bahwa Anda dapat memeriksa inventaris Anda saat ini (default) dengan perintah berikut.
python -m allosaurus.bin.list_phone --lang < language name >
File inventaris telepon saat ini dapat dibuang ke dalam file
# dump the phone file
python -m allosaurus.bin.write_phone --lang < language name > --output < a path to save this file >
Jika Anda melihat file, itu hanya format sederhana di mana setiap baris mewakili satu telepon. Misalnya, yang berikut adalah file bahasa Inggris
a
aː
b
d
...
Anda dapat menyesuaikan file ini untuk menambah atau menghapus IPA yang Anda inginkan. Setiap baris hanya boleh berisi satu telepon IPA tanpa ruang. Mungkin lebih mudah untuk men -debug nanti jika IPA diurutkan, tetapi tidak diperlukan.
Selanjutnya, perbarui inventaris model Anda dengan perintah berikut
python -m allosaurus.bin.update_phone --lang < language name > --input < the file you customized)
Kemudian file telah terdaftar di model Anda, jalankan perintah List_phone lagi dan Anda dapat melihat bahwa sekarang menggunakan inventaris yang diperbarui
python -m allosaurus.bin.list_phone --lang < language name >
Sekarang, jika Anda menjalankan inferensi lagi, Anda juga dapat melihat hasilnya juga mencerminkan inventaris Anda yang diperbarui.
Bahkan setelah pembaruan Anda, Anda dapat dengan mudah beralih kembali ke inventaris asli. Dalam hal ini, file Anda yang diperbarui akan dihapus.
python -m allosaurus.bin.restore_phone --lang < language name >
Anda juga dapat mengubah hasil dengan menyesuaikan probabilitas sebelumnya untuk setiap ponsel. Ini dapat membantu Anda mengurangi telepon yang tidak diinginkan atau meningkatkan ponsel yang diinginkan.
Misalnya, dalam file sampel, kami mendapatkan output
æ l u s ɔ ɹ s
Misalkan Anda berpikir ponsel pertama salah, dan ingin mengurangi probabilitas ponsel ini, Anda dapat membuat file baru prior.txt
sebagai berikut
æ -10.0
File dapat berisi beberapa baris dan setiap baris memiliki informasi untuk setiap telepon. Bidang pertama adalah ponsel target Anda dan bidang kedua adalah skor berbasis log untuk menyesuaikan probabilitas Anda. Skor positif berarti Anda ingin meningkatkan prediksinya, skor negatif akan menekan prediksinya. Dalam hal ini, kita bisa mendapatkan hasil baru
python -m allosaurus.run -i=sample.wav --lang=eng --prior=prior.txt
ɛ l u s ɔ ɹ s
Di mana Anda dapat melihat æ
ditekan dan vokal lain ɛ
menggantinya.
Aplikasi lain sebelumnya adalah mengubah jumlah total ponsel output. Anda mungkin ingin lebih banyak keluaran ponsel atau lebih sedikit output ponsel. Dalam hal ini, Anda dapat mengubah skor untuk <blk>
yang sesuai dengan telepon diam.
Skor <blk>
positif akan menambah lebih banyak keheningan, oleh karena itu mengurangi jumlah output, juga, <blk>
negatif akan meningkatkan output. Contoh berikut menggambarkan hal ini.
# <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
Contoh pertama mengurangi satu telepon dan contoh kedua menambahkan telepon baru.
Kami melihat bahwa model pretrained mungkin tidak cukup akurat untuk beberapa bahasa, jadi kami juga menyediakan alat penyetelan di sini untuk memungkinkan pengguna lebih meningkatkan model mereka dengan beradaptasi dengan data mereka. Saat ini, hanya terbatas untuk disesuaikan dengan satu bahasa.
Untuk menyempurnakan data Anda, Anda perlu menyiapkan file audio dan transkripsinya. Pertama, silakan buat satu direktori data (nama bisa sewenang -wenang), di dalam direktori data, buat direktori train
dan direktori validate
. Jelas, direktori train
akan berisi set pelatihan Anda, dan direktori validate
akan menjadi set validasi.
Setiap direktori harus berisi dua file berikut:
wave
: Ini adalah ucapan asosiasi file dengan audios yang sesuaitext
: Ini adalah ucapan asosiasi file dengan ponselnya. wave
adalah file txt pemetaan setiap ucapan ke file WAV Anda. Setiap baris harus disiapkan sebagai berikut:
utt_id /path/to/your/audio.wav
Di sini utt_id
menunjukkan ID ucapan, itu bisa menjadi string sewenang -wenang selama unik dalam dataset Anda. audio.wav
adalah file WAV Anda seperti yang disebutkan di atas, itu harus menjadi format WAV mono-channel, tetapi laju pengambilan sampel dapat sewenang-wenang (alat ini akan secara otomatis resampel jika perlu) pembatas yang digunakan di sini adalah ruang.
Untuk mendapatkan hasil penyempurnaan terbaik, setiap file audio tidak boleh terlalu lama. Kami merekomendasikan untuk menjaga setiap ucapan lebih pendek dari 10 detik.
text
adalah pemetaan file txt lain setiap ucapan untuk transkripsi Anda. Setiap baris harus disiapkan sebagai berikut
utt_id phone1 phone2 ...
Di sini utt_id
sekali lagi adalah ID ucapan dan harus cocok dengan file WAV yang sesuai. Urutan telepon datang setelah ucapan ID adalah transkripsi fonetik Anda dari file WAV. Ponsel di sini harus dibatasi pada inventaris telepon bahasa target Anda. Pastikan semua ponsel Anda sudah terdaftar dalam bahasa target Anda dengan perintah list_phone
Selanjutnya, kami akan mengekstrak fitur dari file wave
dan file text
. Kami berasumsi bahwa Anda sudah menyiapkan file wave
dan file text
di direktori train
dan validate
direktori
Untuk menyiapkan fitur audio, jalankan perintah berikut di Direktori train
Anda dan validate
Direktori.
# command to prepare audio features
python -m allosaurus.bin.prep_feat --model=some_pretrained_model --path=/path/to/your/directory (train or validate)
path
harus menunjuk ke kereta atau direktori validasi, model
harus menunjuk ke model pretrained traget Anda. Jika tidak ditentukan, itu akan menggunakan model terbaru. Ini akan menghasilkan tiga file feat.scp
, feat.ark
dan shape
.
Yang pertama adalah file yang mengindeks setiap ucapan menjadi offset file kedua.
File kedua adalah file biner yang berisi semua fitur audio.
Yang ketiga berisi informasi dimensi fitur
Jika Anda penasaran, format scp
dan ark
adalah format file standar yang digunakan di Kaldi.
Untuk menyiapkan fitur teks, jalankan perintah berikut lagi di Direktori train
Anda dan validate
Direktori.
# 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
dan model
harus sama dengan perintah sebelumnya. lang
adalah ID bahasa ISO 3 karakter dari dataset ini. Perhatikan bahwa Anda harus sudah memverifikasi inventaris telepon dari ID bahasa ini berisi semua transkripsi telepon Anda. Kalau tidak, ekstraksi di sini mungkin gagal.
Setelah perintah ini, itu akan menghasilkan file yang disebut token
yang memetakan setiap ucapan ke urutan ID telepon.
Selanjutnya, kita dapat mulai menyempurnakan model kita dengan dataset yang baru saja kita siapkan. Perintah fine-tuning sangat sederhana.
# 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 >
Ada beberapa argumen opsional lain yang tersedia di sini, tetapi kami menjelaskan argumen yang diperlukan.
pretrained_model
harus menjadi model yang sama yang Anda tentukan sebelumnya di prep_token
dan prep_feat
.
new_model
dapat menjadi nama model yang sewenang -wenang (sebenarnya, mungkin lebih mudah untuk dikelola jika Anda memberikan setiap model format yang sama dengan model pretrain (yaitu yymmdd)))
path
harus menunjuk ke direktori induk train
Anda dan validate
direktori.
lang
adalah id bahasa yang Anda tentukan dalam prep_token
device_id
adalah ID GPU untuk fine -tuning, jika Anda tidak memiliki GPU, gunakan -1 sebagai device_id. Beberapa GPU tidak didukung.
epoch
adalah jumlah zaman pelatihan Anda
Selama pelatihan, ini akan menunjukkan beberapa informasi seperti kehilangan tingkat kesalahan dan kesalahan telepon untuk set pelatihan dan set validasi Anda. Setelah setiap zaman, model akan dievaluasi dengan set validasi dan akan menyimpan pos pemeriksaan ini jika tingkat kesalahan telepon validasinya lebih baik dari yang sebelumnya. Setelah epoch
yang ditentukan selesai, proses penyempurnaan akan berakhir dan model baru harus tersedia.
Setelah proses pelatihan Anda, model baru harus tersedia dalam daftar model Anda. Gunakan perintah list_model
untuk memeriksa model baru Anda tersedia sekarang
# command to check all your models
python -m allosaurus.bin.list_model
Jika tersedia, maka model baru ini dapat digunakan dengan gaya yang sama dengan model pretrain lainnya. Cukup jalankan inferensi untuk menggunakan model baru Anda.
python -m allosaurus.run --lang < language id > --model < your new model > --device_id < gpu_id > -i < audio >
Pekerjaan ini menggunakan bagian dari kode dan inventaris berikut. Secara khusus, kami sangat menggunakan Allverna dan Phoible untuk membangun inventaris ponsel model ini.
Harap kutip makalah berikut jika Anda menggunakan kode dalam pekerjaan Anda.
Jika Anda memiliki saran atau saran, jangan ragu untuk mengirim email kepada saya (Xinjianl [at] cs.cmu.edu) atau mengirimkan masalah dalam repo ini. Terima kasih!
@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 }
}