(简体中文|Bahasa Inggris|日本語)
SenseVoice adalah model dasar ucapan dengan berbagai kemampuan pemahaman ucapan, termasuk pengenalan ucapan otomatis (ASR), identifikasi bahasa lisan (LID), pengenalan emosi ucapan (SER), dan deteksi peristiwa audio (AED).
Kebun Binatang Model: modelscope, wajah berpelukan
Demo Online: demo modelscope, ruang pelukan
SenseVoice berfokus pada pengenalan ucapan multibahasa dengan akurasi tinggi, pengenalan emosi ucapan, dan deteksi peristiwa audio.
Kami membandingkan performa pengenalan ucapan multibahasa antara SenseVoice dan Whisper pada kumpulan data benchmark sumber terbuka, termasuk AISHELL-1, AISHELL-2, Wenetspeech, LibriSpeech, dan Common Voice. Dalam hal pengenalan bahasa Mandarin dan Kanton, model SenseVoice-Small memiliki keunggulan.
Karena kurangnya tolok ukur dan metode yang banyak digunakan untuk pengenalan emosi ucapan, kami melakukan evaluasi di berbagai metrik pada beberapa rangkaian pengujian dan melakukan perbandingan komprehensif dengan berbagai hasil dari tolok ukur terbaru. Perangkat tes yang dipilih mencakup data dalam bahasa Mandarin dan Inggris, dan mencakup berbagai gaya seperti pertunjukan, film, dan percakapan alami. Tanpa menyempurnakan data target, SenseVoice mampu mencapai dan melampaui performa model pengenalan emosi ucapan terbaik saat ini.
Selain itu, kami membandingkan beberapa model pengenalan emosi ucapan sumber terbuka pada set pengujian, dan hasilnya menunjukkan bahwa model SenseVoice-Large mencapai performa terbaik di hampir semua kumpulan data, sedangkan model SenseVoice-Small juga mengungguli model sumber terbuka lainnya pada sebagian besar kumpulan data.
Meskipun dilatih secara eksklusif pada data ucapan, SenseVoice tetap dapat berfungsi sebagai model deteksi peristiwa yang berdiri sendiri. Kami membandingkan kinerjanya pada kumpulan data klasifikasi suara lingkungan ESC-50 dengan model industri yang banyak digunakan, BEATS dan PANN. Model SenseVoice mencapai hasil yang terpuji dalam tugas-tugas ini. Namun, karena keterbatasan dalam data dan metodologi pelatihan, kinerja klasifikasi kejadiannya memiliki beberapa kesenjangan dibandingkan dengan model AED khusus.
Model SenseVoice-Small menerapkan arsitektur end-to-end non-autoregresif, sehingga menghasilkan latensi inferensi yang sangat rendah. Dengan jumlah parameter yang serupa dengan model Whisper-Small, model ini menyimpulkan 5 kali lebih cepat dibandingkan Whisper-Small dan 15 kali lebih cepat dibandingkan Whisper-Large.
pip install -r requirements.txt
Mendukung input audio dalam format apa pun dan durasi apa pun.
from funasr import AutoModel
from funasr . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = AutoModel (
model = model_dir ,
trust_remote_code = True ,
remote_code = "./model.py" ,
vad_model = "fsmn-vad" ,
vad_kwargs = { "max_single_segment_time" : 30000 },
device = "cuda:0" ,
)
# en
res = model . generate (
input = f" { model . model_path } /example/en.mp3" ,
cache = {},
language = "auto" , # "zh", "en", "yue", "ja", "ko", "nospeech"
use_itn = True ,
batch_size_s = 60 ,
merge_vad = True , #
merge_length_s = 15 ,
)
text = rich_transcription_postprocess ( res [ 0 ][ "text" ])
print ( text )
model_dir
: Nama model, atau jalur ke model pada disk lokal.trust_remote_code
:True
, berarti implementasi kode model dimuat dari remote_code
, yang menentukan lokasi persis kode model
(misalnya, model.py
di direktori saat ini). Ini mendukung jalur absolut, jalur relatif, dan URL jaringan.False
, ini menunjukkan bahwa implementasi kode model adalah versi terintegrasi dalam FunASR. Saat ini, modifikasi yang dilakukan pada model.py
di direktori saat ini tidak akan efektif, karena versi yang dimuat adalah versi internal dari FunASR. Untuk kode model, klik di sini untuk melihatnya.vad_model
: Ini menunjukkan aktivasi VAD (Deteksi Aktivitas Suara). Tujuan VAD adalah membagi audio panjang menjadi klip pendek. Dalam hal ini, waktu inferensi mencakup total konsumsi VAD dan SenseVoice, dan mewakili latensi end-to-end. Jika Anda ingin menguji waktu inferensi model SenseVoice secara terpisah, model VAD dapat dinonaktifkan.vad_kwargs
: Menentukan konfigurasi untuk model VAD. max_single_segment_time
: menunjukkan durasi maksimum untuk segmentasi audio menurut vad_model
, dengan satuan milidetik (ms).use_itn
: Apakah hasil keluaran menyertakan tanda baca dan normalisasi teks terbalik.batch_size_s
: Menunjukkan penggunaan batching dinamis, di mana total durasi audio dalam batch diukur dalam hitungan detik.merge_vad
: Apakah akan menggabungkan fragmen audio pendek yang disegmentasi oleh model VAD, dengan panjang gabungan menjadi merge_length_s
, dalam hitungan detik.ban_emo_unk
: Apakah akan melarang keluaran token emo_unk
. Jika semua input berupa audio pendek (<30 detik), dan inferensi batch diperlukan untuk mempercepat efisiensi inferensi, model VAD dapat dihapus, dan batch_size
dapat diatur sesuai dengan itu.
model = AutoModel ( model = model_dir , trust_remote_code = True , device = "cuda:0" )
res = model . generate (
input = f" { model . model_path } /example/en.mp3" ,
cache = {},
language = "zh" , # "zh", "en", "yue", "ja", "ko", "nospeech"
use_itn = False ,
batch_size = 64 ,
)
Untuk penggunaan lebih lanjut, silakan merujuk ke dokumen
Mendukung input audio dalam format apa pun, dengan batas durasi input 30 detik atau kurang.
from model import SenseVoiceSmall
from funasr . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
m , kwargs = SenseVoiceSmall . from_pretrained ( model = model_dir , device = "cuda:0" )
m . eval ()
res = m . inference (
data_in = f" { kwargs [ 'model_path' ] } /example/en.mp3" ,
language = "auto" , # "zh", "en", "yue", "ja", "ko", "nospeech"
use_itn = False ,
ban_emo_unk = False ,
** kwargs ,
)
text = rich_transcription_postprocess ( res [ 0 ][ 0 ][ "text" ])
print ( text )
# pip3 install -U funasr funasr-onnx
from pathlib import Path
from funasr_onnx import SenseVoiceSmall
from funasr_onnx . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = SenseVoiceSmall ( model_dir , batch_size = 10 , quantize = True )
# inference
wav_or_scp = [ "{}/.cache/modelscope/hub/{}/example/en.mp3" . format ( Path . home (), model_dir )]
res = model ( wav_or_scp , language = "auto" , use_itn = True )
print ([ rich_transcription_postprocess ( i ) for i in res ])
Catatan: Model ONNX diekspor ke direktori model asli.
from pathlib import Path
from funasr_torch import SenseVoiceSmall
from funasr_torch . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = SenseVoiceSmall ( model_dir , batch_size = 10 , device = "cuda:0" )
wav_or_scp = [ "{}/.cache/modelscope/hub/{}/example/en.mp3" . format ( Path . home (), model_dir )]
res = model ( wav_or_scp , language = "auto" , use_itn = True )
print ([ rich_transcription_postprocess ( i ) for i in res ])
Catatan: Model Libtorch diekspor ke direktori model asli.
export SENSEVOICE_DEVICE=cuda:0
fastapi run --port 50000
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./
Contoh data
{"key": "YOU0000008470_S0000238_punc_itn", "text_language": "<|en|>", "emo_target": "<|NEUTRAL|>", "event_target": "<|Speech|>", "with_or_wo_itn": "<|withitn|>", "target": "Including legal due diligence, subscription agreement, negotiation.", "source": "/cpfs01/shared/Group-speech/beinian.lzr/data/industrial_data/english_all/audio/YOU0000008470_S0000238.wav", "target_len": 7, "source_len": 140}
{"key": "AUD0000001556_S0007580", "text_language": "<|en|>", "emo_target": "<|NEUTRAL|>", "event_target": "<|Speech|>", "with_or_wo_itn": "<|woitn|>", "target": "there is a tendency to identify the self or take interest in what one has got used to", "source": "/cpfs01/shared/Group-speech/beinian.lzr/data/industrial_data/english_all/audio/AUD0000001556_S0007580.wav", "target_len": 18, "source_len": 360}
Referensi lengkap ke data/train_example.jsonl
Keterangan:
key
: ID unik file audiosource
:jalur ke file audiosource_len
:jumlah frame fbank dari file audiotarget
:transkripsitarget_len
:panjang targettext_language
:id bahasa dari file audioemo_target
: label emosi pada file audioevent_target
: label acara pada file audiowith_or_wo_itn
:apakah menyertakan tanda baca dan normalisasi teks terbalik train_text.txt
BAC009S0764W0121 甚至出现交易几乎停滞的情况
BAC009S0916W0489 湖北一公司以员工名义贷款数十员工负债千万
asr_example_cn_en 所有只要处理 data 不管你是做 machine learning 做 deep learning 做 data analytics 做 data science 也好 scientist 也好通通都要都做的基本功啊那 again 先先对有一些>也许对
ID0012W0014 he tried to think how it could be
train_wav.scp
BAC009S0764W0121 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0764W0121.wav
BAC009S0916W0489 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0916W0489.wav
asr_example_cn_en https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_cn_en.wav
ID0012W0014 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_en.wav
train_text_language.txt
Id bahasanya meliputi <|zh|>
、 <|en|>
、 <|yue|>
、 <|ja|>
dan <|ko|>
.
BAC009S0764W0121 < | zh | >
BAC009S0916W0489 < | zh | >
asr_example_cn_en < | zh | >
ID0012W0014 < | en | >
train_emo.txt
Label emosinya antara lain <|HAPPY|>
、 <|SAD|>
、 <|ANGRY|>
、 <|NEUTRAL|>
、 <|FEARFUL|>
、 <|DISGUSTED|>
dan <|SURPRISED|>
.
BAC009S0764W0121 < | NEUTRAL | >
BAC009S0916W0489 < | NEUTRAL | >
asr_example_cn_en < | NEUTRAL | >
ID0012W0014 < | NEUTRAL | >
train_event.txt
Label acaranya meliputi <|BGM|>
、 <|Speech|>
、 <|Applause|>
、 <| <|Laughter|>
<|Cry|>
、 <|Sneeze|>
、 <|Breath|>
dan <|Cough|>
.
BAC009S0764W0121 < | Speech | >
BAC009S0916W0489 < | Speech | >
asr_example_cn_en < | Speech | >
ID0012W0014 < | Speech | >
Command
# generate train.jsonl and val.jsonl from wav.scp, text.txt, text_language.txt, emo_target.txt, event_target.txt
sensevoice2jsonl
++scp_file_list= ' ["../../../data/list/train_wav.scp", "../../../data/list/train_text.txt", "../../../data/list/train_text_language.txt", "../../../data/list/train_emo.txt", "../../../data/list/train_event.txt"] '
++data_type_list= ' ["source", "target", "text_language", "emo_target", "event_target"] '
++jsonl_file_out= " ../../../data/list/train.jsonl "
Jika tidak ada train_text_language.txt
, train_emo_target.txt
dan train_event_target.txt
, label bahasa, emosi, dan peristiwa akan diprediksi secara otomatis menggunakan model SenseVoice
.
# generate train.jsonl and val.jsonl from wav.scp and text.txt
sensevoice2jsonl
++scp_file_list= ' ["../../../data/list/train_wav.scp", "../../../data/list/train_text.txt"] '
++data_type_list= ' ["source", "target"] '
++jsonl_file_out= " ../../../data/list/train.jsonl "
++model_dir= ' iic/SenseVoiceSmall '
Pastikan untuk memodifikasi train_tool di finetune.sh ke jalur absolut funasr/bin/train_ds.py
dari direktori instalasi FunASR yang telah Anda siapkan sebelumnya.
bash finetune.sh
python webui.py
Jika Anda menemui masalah dalam penggunaan, Anda bisa langsung menyampaikan Masalah di halaman github.
Anda juga dapat memindai kode QR grup DingTalk berikut untuk bergabung dengan grup komunitas untuk komunikasi dan diskusi.
MenyenangkanASR |
---|