(简体中文|Bahasa Inggris)
FunASR berharap dapat membangun jembatan antara penelitian akademis dan aplikasi industri pada pengenalan suara. Dengan mendukung pelatihan & penyempurnaan model pengenalan suara tingkat industri, peneliti dan pengembang dapat melakukan penelitian dan produksi model pengenalan suara dengan lebih mudah, dan mendorong pengembangan ekologi pengenalan suara. ASR untuk bersenang-senang!
Sorotan | Berita | Instalasi | Mulai Cepat | Tutorial | Waktu proses | Kebun Binatang Model | Kontak
python>=3.8
torch>=1.13
torchaudio
pip3 install -U funasr
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./
pip3 install -U modelscope huggingface_hub
FunASR telah melakukan open source terhadap sejumlah besar model terlatih mengenai data industri. Anda bebas menggunakan, menyalin, memodifikasi, dan berbagi model FunASR berdasarkan Perjanjian Lisensi Model. Di bawah ini adalah beberapa model perwakilan, untuk model lainnya silakan merujuk ke Model Zoo.
(Catatan: ⭐ mewakili kebun binatang model ModelScope, ? mewakili kebun binatang model Huggingface, ? mewakili kebun binatang model OpenAI)
Nama Model | Detail Tugas | Data Pelatihan | Parameter |
---|---|---|---|
SenseVoiceKecil (⭐ ? ) | berbagai kemampuan pemahaman ucapan, termasuk ASR, ITN, LID, SER, dan AED, mendukung bahasa seperti zh, yue, en, ja, ko | 300.000 jam | 234M |
paraformer-zh (⭐ ? ) | pengenalan ucapan, dengan stempel waktu, non-streaming | 60000 jam, Mandarin | 220M |
paraformer-zh-streaming ( ⭐ ? ) | pengenalan suara, streaming | 60000 jam, Mandarin | 220M |
paraformer-en ( ⭐ ? ) | pengenalan ucapan, tanpa stempel waktu, non-streaming | 50000 jam, Bahasa Inggris | 220M |
konformer-en ( ⭐ ? ) | pengenalan suara, non-streaming | 50000 jam, Bahasa Inggris | 220M |
ct-punc ( ⭐ ? ) | pemulihan tanda baca | 100M, Mandarin dan Inggris | 290M |
fsmn-vad ( ⭐ ? ) | deteksi aktivitas suara | 5000 jam, Mandarin dan Inggris | 0,4 juta |
fsmn-kws ( ⭐ ) | pencarian kata kunci, streaming | 5000 jam, bahasa Mandarin | 0,7 juta |
fa-zh ( ⭐ ? ) | prediksi stempel waktu | 5000 jam, bahasa Mandarin | 38M |
kamera++ ( ⭐ ? ) | verifikasi/diarisasi pembicara | 5000 jam | 7,2 juta |
Bisikan-besar-v3 (⭐ ? ) | pengenalan ucapan, dengan stempel waktu, non-streaming | multibahasa | 1550 M |
Bisikan-besar-v3-turbo (⭐ ? ) | pengenalan ucapan, dengan stempel waktu, non-streaming | multibahasa | 809 M |
Qwen-Audio (⭐ ? ) | model multimodal audio-teks (pelatihan awal) | multibahasa | 8B |
Qwen-Audio-Obrolan (⭐ ? ) | model multimodal audio-teks (obrolan) | multibahasa | 8B |
emosi2vec+besar (⭐ ? ) | pengenalan kembali emosi ucapan | 40000 jam | 300M |
Di bawah ini adalah tutorial memulai cepat. Uji file audio (Mandarin, Inggris).
funasr ++model=paraformer-zh ++vad_model= " fsmn-vad " ++punc_model= " ct-punc " ++input=asr_example_zh.wav
Catatan: Mendukung pengenalan file audio tunggal, serta daftar file dalam format wav.scp gaya Kaldi: wav_id wav_pat
from funasr import AutoModel
from funasr . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = AutoModel (
model = model_dir ,
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" , # "zn", "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 )
Deskripsi Parameter:
model_dir
: Nama model, atau jalur ke model pada disk lokal.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
. from funasr import AutoModel
# paraformer-zh is a multi-functional asr model
# use vad, punc, spk or not as you need
model = AutoModel ( model = "paraformer-zh" , vad_model = "fsmn-vad" , punc_model = "ct-punc" ,
# spk_model="cam++",
)
res = model . generate ( input = f" { model . model_path } /example/asr_example.wav" ,
batch_size_s = 300 ,
hotword = '魔搭' )
print ( res )
Catatan: hub
: mewakili repositori model, ms
berarti memilih unduhan ModelScope, hf
berarti memilih unduhan Huggingface.
from funasr import AutoModel
chunk_size = [ 0 , 10 , 5 ] #[0, 10, 5] 600ms, [0, 8, 4] 480ms
encoder_chunk_look_back = 4 #number of chunks to lookback for encoder self-attention
decoder_chunk_look_back = 1 #number of encoder chunks to lookback for decoder cross-attention
model = AutoModel ( model = "paraformer-zh-streaming" )
import soundfile
import os
wav_file = os . path . join ( model . model_path , "example/asr_example.wav" )
speech , sample_rate = soundfile . read ( wav_file )
chunk_stride = chunk_size [ 1 ] * 960 # 600ms
cache = {}
total_chunk_num = int ( len (( speech ) - 1 ) / chunk_stride + 1 )
for i in range ( total_chunk_num ):
speech_chunk = speech [ i * chunk_stride :( i + 1 ) * chunk_stride ]
is_final = i == total_chunk_num - 1
res = model . generate ( input = speech_chunk , cache = cache , is_final = is_final , chunk_size = chunk_size , encoder_chunk_look_back = encoder_chunk_look_back , decoder_chunk_look_back = decoder_chunk_look_back )
print ( res )
Catatan: chunk_size
adalah konfigurasi untuk latensi streaming. [0,10,5]
menunjukkan bahwa granularitas tampilan real-time adalah 10*60=600ms
, dan informasi pencarian ke depan adalah 5*60=300ms
. Setiap input inferensi adalah 600ms
(titik sampel adalah 16000*0.6=960
), dan outputnya adalah teks yang sesuai. Untuk masukan segmen ucapan terakhir, is_final=True
perlu disetel untuk memaksa keluaran kata terakhir.
from funasr import AutoModel
model = AutoModel ( model = "fsmn-vad" )
wav_file = f" { model . model_path } /example/vad_example.wav"
res = model . generate ( input = wav_file )
print ( res )
Catatan: Format keluaran model VAD adalah: [[beg1, end1], [beg2, end2], ..., [begN, endN]]
, dengan begN/endN
menunjukkan titik awal/akhir dari N-th
segmen audio yang valid, diukur dalam milidetik.
from funasr import AutoModel
chunk_size = 200 # ms
model = AutoModel ( model = "fsmn-vad" )
import soundfile
wav_file = f" { model . model_path } /example/vad_example.wav"
speech , sample_rate = soundfile . read ( wav_file )
chunk_stride = int ( chunk_size * sample_rate / 1000 )
cache = {}
total_chunk_num = int ( len (( speech ) - 1 ) / chunk_stride + 1 )
for i in range ( total_chunk_num ):
speech_chunk = speech [ i * chunk_stride :( i + 1 ) * chunk_stride ]
is_final = i == total_chunk_num - 1
res = model . generate ( input = speech_chunk , cache = cache , is_final = is_final , chunk_size = chunk_size )
if len ( res [ 0 ][ "value" ]):
print ( res )
Catatan: Format output untuk model streaming VAD dapat berupa salah satu dari empat skenario:
[[beg1, end1], [beg2, end2], .., [begN, endN]]
:Sama dengan hasil keluaran VAD offline yang disebutkan di atas.[[beg, -1]]
:Menunjukkan bahwa hanya titik awal yang terdeteksi.[[-1, end]]
:Menunjukkan bahwa hanya titik akhir yang terdeteksi.[]
:Menunjukkan bahwa titik awal dan titik akhir belum terdeteksi.Outputnya diukur dalam milidetik dan mewakili waktu absolut dari titik awal.
from funasr import AutoModel
model = AutoModel ( model = "ct-punc" )
res = model . generate ( input = "那今天的会就到这里吧 happy new year 明年见" )
print ( res )
from funasr import AutoModel
model = AutoModel ( model = "fa-zh" )
wav_file = f" { model . model_path } /example/asr_example.wav"
text_file = f" { model . model_path } /example/text.txt"
res = model . generate ( input = ( wav_file , text_file ), data_type = ( "sound" , "text" ))
print ( res )
from funasr import AutoModel
model = AutoModel ( model = "emotion2vec_plus_large" )
wav_file = f" { model . model_path } /example/test.wav"
res = model . generate ( wav_file , output_dir = "./outputs" , granularity = "utterance" , extract_embedding = False )
print ( res )
Lebih banyak penggunaan lihat dokumen, lebih banyak contoh lihat demo
funasr-export ++model=paraformer ++quantize=false ++device=cpu
from funasr import AutoModel
model = AutoModel ( model = "paraformer" , device = "cpu" )
res = model . export ( quantize = False )
# pip3 install -U funasr-onnx
from funasr_onnx import Paraformer
model_dir = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch"
model = Paraformer ( model_dir , batch_size = 1 , quantize = True )
wav_path = [ '~/.cache/modelscope/hub/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/example/asr_example.wav' ]
result = model ( wav_path )
print ( result )
Contoh lainnya mengacu pada demo
FunASR mendukung penerapan model yang telah dilatih sebelumnya atau yang telah disesuaikan lebih lanjut untuk layanan. Saat ini, ia mendukung jenis penerapan layanan berikut:
Untuk informasi lebih detail, lihat dokumentasi penerapan layanan.
Jika Anda menemui masalah dalam penggunaan, Anda bisa langsung menyampaikan Masalah di halaman github.
Anda juga dapat memindai grup DingTalk berikut untuk bergabung dengan grup komunitas untuk komunikasi dan diskusi.
Grup DingTalk |
---|
Kontributor dapat ditemukan di daftar kontributor
Proyek ini dilisensikan di bawah Lisensi MIT. FunASR juga berisi berbagai komponen pihak ketiga dan beberapa kode yang dimodifikasi dari repo lain di bawah lisensi sumber terbuka lainnya. Penggunaan model pra-pelatihan tunduk pada lisensi model
@inproceedings { gao2023funasr ,
author = { Zhifu Gao and Zerui Li and Jiaming Wang and Haoneng Luo and Xian Shi and Mengzhe Chen and Yabin Li and Lingyun Zuo and Zhihao Du and Zhangyu Xiao and Shiliang Zhang } ,
title = { FunASR: A Fundamental End-to-End Speech Recognition Toolkit } ,
year = { 2023 } ,
booktitle = { INTERSPEECH } ,
}
@inproceedings { An2023bat ,
author = { Keyu An and Xian Shi and Shiliang Zhang } ,
title = { BAT: Boundary aware transducer for memory-efficient and low-latency ASR } ,
year = { 2023 } ,
booktitle = { INTERSPEECH } ,
}
@inproceedings { gao22b_interspeech ,
author = { Zhifu Gao and ShiLiang Zhang and Ian McLoughlin and Zhijie Yan } ,
title = { Paraformer: Fast and Accurate Parallel Transformer for Non-autoregressive End-to-End Speech Recognition } ,
year = 2022 ,
booktitle = { Proc. Interspeech 2022 } ,
pages = { 2063--2067 } ,
doi = { 10.21437/Interspeech.2022-9996 }
}
@inproceedings { shi2023seaco ,
author = { Xian Shi and Yexin Yang and Zerui Li and Yanni Chen and Zhifu Gao and Shiliang Zhang } ,
title = { SeACo-Paraformer: A Non-Autoregressive ASR System with Flexible and Effective Hotword Customization Ability } ,
year = { 2023 } ,
booktitle = { ICASSP2024 }
}