(简体中文|Englisch)
FunASR hofft, eine Brücke zwischen akademischer Forschung und industriellen Anwendungen zur Spracherkennung zu schlagen. Durch die Unterstützung des Trainings und der Feinabstimmung des industrietauglichen Spracherkennungsmodells können Forscher und Entwickler die Forschung und Produktion von Spracherkennungsmodellen bequemer durchführen und die Entwicklung der Spracherkennungsökologie fördern. ASR zum Spaß!
Höhepunkte | Nachrichten | Installation | Schnellstart | Anleitung | Laufzeit | Modellzoo | Kontakt
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 hat eine große Anzahl vorab trainierter Modelle für Industriedaten als Open-Source-Lösung bereitgestellt. Es steht Ihnen im Rahmen der Modelllizenzvereinbarung frei, FunASR-Modelle zu verwenden, zu kopieren, zu ändern und weiterzugeben. Nachfolgend finden Sie einige repräsentative Modelle. Weitere Modelle finden Sie im Model Zoo.
(Hinweis: ⭐ steht für den ModelScope-Modellzoo, ? steht für den Huggingface-Modellzoo, ? steht für den OpenAI-Modellzoo)
Modellname | Aufgabendetails | Trainingsdaten | Parameter |
---|---|---|---|
SenseVoiceSmall (⭐ ? ) | Mehrere Sprachverständnisfunktionen, einschließlich ASR, ITN, LID, SER und AED, unterstützen Sprachen wie zh, yue, en, ja, ko | 300.000 Stunden | 234M |
paraformer-zh (⭐ ? ) | Spracherkennung, mit Zeitstempeln, kein Streaming | 60.000 Stunden, Mandarin | 220M |
paraformer-zh-streaming ( ⭐ ? ) | Spracherkennung, Streaming | 60.000 Stunden, Mandarin | 220M |
paraformer-en ( ⭐ ? ) | Spracherkennung, ohne Zeitstempel, kein Streaming | 50000 Stunden, Englisch | 220M |
konformer-en ( ⭐ ? ) | Spracherkennung, kein Streaming | 50000 Stunden, Englisch | 220M |
ct-punc ( ⭐ ? ) | Wiederherstellung der Interpunktion | 100M, Mandarin und Englisch | 290M |
fsmn-vad ( ⭐ ? ) | Sprachaktivitätserkennung | 5000 Stunden, Mandarin und Englisch | 0,4 Mio |
fsmn-kws ( ⭐ ) | Keyword-Spotting, Streaming | 5000 Stunden, Mandarin | 0,7 Mio |
fa-zh ( ⭐ ? ) | Zeitstempelvorhersage | 5000 Stunden, Mandarin | 38M |
cam++ ( ⭐ ? ) | Sprecherüberprüfung/Diarisierung | 5000 Stunden | 7,2 Mio |
Whisper-large-v3 (⭐ ? ) | Spracherkennung, mit Zeitstempeln, kein Streaming | mehrsprachig | 1550 M |
Whisper-large-v3-turbo (⭐ ? ) | Spracherkennung, mit Zeitstempeln, kein Streaming | mehrsprachig | 809 M |
Qwen-Audio (⭐ ? ) | Multimodale Audio-Text-Modelle (Vortraining) | mehrsprachig | 8B |
Qwen-Audio-Chat (⭐ ? ) | Multimodale Audio-Text-Modelle (Chat) | mehrsprachig | 8B |
emotions2vec+groß (⭐ ? ) | Wiedererkennung von Sprachemotionen | 40000 Stunden | 300M |
Nachfolgend finden Sie ein Schnellstart-Tutorial. Testen Sie Audiodateien (Mandarin, Englisch).
funasr ++model=paraformer-zh ++vad_model= " fsmn-vad " ++punc_model= " ct-punc " ++input=asr_example_zh.wav
Hinweise: Unterstützt die Erkennung einzelner Audiodateien sowie der Dateiliste im wav.scp-Format im Kaldi-Stil: 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 )
Parameterbeschreibung:
model_dir
: Der Name des Modells oder der Pfad zum Modell auf der lokalen Festplatte.vad_model
: Dies zeigt die Aktivierung von VAD (Voice Activity Detection) an. Der Zweck von VAD besteht darin, lange Audiodaten in kürzere Clips aufzuteilen. In diesem Fall umfasst die Inferenzzeit sowohl den VAD- als auch den SenseVoice-Gesamtverbrauch und stellt die End-to-End-Latenz dar. Wenn Sie die Inferenzzeit des SenseVoice-Modells separat testen möchten, kann das VAD-Modell deaktiviert werden.vad_kwargs
: Gibt die Konfigurationen für das VAD-Modell an. max_single_segment_time
: bezeichnet die maximale Dauer für die Audiosegmentierung durch vad_model
, wobei die Einheit Millisekunden (ms) ist.use_itn
: Ob das Ausgabeergebnis Satzzeichen und inverse Textnormalisierung enthält.batch_size_s
: Gibt die Verwendung dynamischer Stapelverarbeitung an, bei der die Gesamtdauer der Audiodaten im Stapel in Sekunden (s) gemessen wird.merge_vad
: Ob kurze, durch das VAD-Modell segmentierte Audiofragmente zusammengeführt werden sollen, wobei die zusammengeführte Länge merge_length_s
in Sekunden (s) beträgt.ban_emo_unk
: Ob die Ausgabe des emo_unk
-Tokens verboten werden soll. 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 )
Hinweis: hub
: stellt das Modell-Repository dar, ms
steht für die Auswahl des ModelScope-Downloads, hf
steht für die Auswahl des Huggingface-Downloads.
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 )
Hinweis: chunk_size
ist die Konfiguration für die Streaming-Latenz. [0,10,5]
gibt an, dass die Granularität der Echtzeitanzeige 10*60=600ms
beträgt und die Lookahead-Informationen 5*60=300ms
betragen. Jede Inferenzeingabe dauert 600ms
(Abtastpunkte sind 16000*0.6=960
), und die Ausgabe ist der entsprechende Text. Für die Eingabe des letzten Sprachsegments muss is_final=True
gesetzt werden, um die Ausgabe des letzten Worts zu erzwingen.
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 )
Hinweis: Das Ausgabeformat des VAD-Modells ist: [[beg1, end1], [beg2, end2], ..., [begN, endN]]
, wobei begN/endN
den Start-/Endpunkt des N-th
angibt gültiges Audiosegment, gemessen in Millisekunden.
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 )
Hinweis: Das Ausgabeformat für das Streaming-VAD-Modell kann eines von vier Szenarios sein:
[[beg1, end1], [beg2, end2], .., [begN, endN]]
: Dasselbe wie das oben erwähnte Offline-VAD-Ausgabeergebnis.[[beg, -1]]
:Zeigt an, dass nur ein Startpunkt erkannt wurde.[[-1, end]]
:Zeigt an, dass nur ein Endpunkt erkannt wurde.[]
: Zeigt an, dass weder ein Startpunkt noch ein Endpunkt erkannt wurde.Die Ausgabe wird in Millisekunden gemessen und stellt die absolute Zeit ab dem Startpunkt dar.
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 )
Weitere Verwendungsmöglichkeiten finden Sie in der Dokumentation, weitere Beispiele finden Sie in der 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 )
Weitere Beispiele finden Sie in der Demo
FunASR unterstützt die Bereitstellung vorab trainierter oder weiter optimierter Modelle für den Service. Derzeit werden die folgenden Arten der Dienstbereitstellung unterstützt:
Ausführlichere Informationen finden Sie in der Dokumentation zur Dienstbereitstellung.
Wenn bei der Verwendung Probleme auftreten, können Sie Probleme direkt auf der Github-Seite melden.
Sie können auch die folgende DingTalk-Gruppe scannen, um der Community-Gruppe zur Kommunikation und Diskussion beizutreten.
DingTalk-Gruppe |
---|
Die Mitwirkenden finden Sie in der Mitwirkendenliste
Dieses Projekt ist unter der MIT-Lizenz lizenziert. FunASR enthält außerdem verschiedene Komponenten von Drittanbietern und einige Codes, die von anderen Repos unter anderen Open-Source-Lizenzen geändert wurden. Die Nutzung des Pretraining-Modells unterliegt einer Modelllizenz
@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 }
}