(简体中文|anglais)
FunASR espère jeter un pont entre la recherche académique et les applications industrielles sur la reconnaissance vocale. En soutenant la formation et la mise au point du modèle de reconnaissance vocale de qualité industrielle, les chercheurs et les développeurs peuvent mener plus facilement des recherches et produire des modèles de reconnaissance vocale et promouvoir le développement de l'écologie de la reconnaissance vocale. ASR pour le plaisir !
Faits saillants | Actualités | Installation | Démarrage rapide | Tutoriel | Durée d'exécution | Zoo modèle | Contact
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 a mis en open source un grand nombre de modèles pré-entraînés sur des données industrielles. Vous êtes libre d'utiliser, de copier, de modifier et de partager les modèles FunASR dans le cadre du contrat de licence modèle. Vous trouverez ci-dessous quelques modèles représentatifs, pour plus de modèles, veuillez vous référer au Model Zoo.
(Remarque : ⭐ représente le zoo modèle ModelScope, ? représente le zoo modèle Huggingface, ? représente le zoo modèle OpenAI)
Nom du modèle | Détails de la tâche | Données de formation | Paramètres |
---|---|---|---|
SenseVoiceSmall (⭐ ? ) | plusieurs capacités de compréhension vocale, notamment ASR, ITN, LID, SER et AED, prennent en charge des langues telles que zh, yue, en, ja, ko | 300 000 heures | 234M |
paraformer-zh (⭐ ? ) | reconnaissance vocale, avec horodatage, sans streaming | 60 000 heures, mandarin | 220M |
paraformer-zh-streaming ( ⭐ ? ) | reconnaissance vocale, streaming | 60 000 heures, mandarin | 220M |
paraformer-fr ( ⭐ ? ) | reconnaissance vocale, sans horodatage, sans streaming | 50 000 heures, anglais | 220M |
conformateur-fr ( ⭐ ? ) | reconnaissance vocale, sans streaming | 50 000 heures, anglais | 220M |
ct-punc ( ⭐ ? ) | restauration de ponctuation | 100M, mandarin et anglais | 290M |
fsmn-vad ( ⭐ ? ) | détection d'activité vocale | 5000 heures, mandarin et anglais | 0,4M |
fsmn-kws ( ⭐ ) | repérage de mots clés, streaming | 5000 heures, mandarin | 0,7M |
fa-zh ( ⭐ ? ) | prédiction d'horodatage | 5000 heures, mandarin | 38M |
came++ ( ⭐ ? ) | vérification/diarisation du locuteur | 5000 heures | 7,2 millions |
Chuchotement-large-v3 (⭐ ? ) | reconnaissance vocale, avec horodatage, sans streaming | multilingue | 1550 M |
Whisper-large-v3-turbo (⭐ ? ) | reconnaissance vocale, avec horodatage, sans streaming | multilingue | 809 M |
Qwen-Audio (⭐ ? ) | modèles multimodaux audio-texte (pré-entraînement) | multilingue | 8B |
Qwen-Audio-Chat (⭐ ? ) | modèles multimodaux audio-texte (chat) | multilingue | 8B |
emotion2vec+grand (⭐ ? ) | recongestion des émotions de la parole | 40 000 heures | 300M |
Vous trouverez ci-dessous un didacticiel de démarrage rapide. Testez les fichiers audio (mandarin, anglais).
funasr ++model=paraformer-zh ++vad_model= " fsmn-vad " ++punc_model= " ct-punc " ++input=asr_example_zh.wav
Remarques : Prise en charge de la reconnaissance d'un seul fichier audio, ainsi que de la liste des fichiers au format wav.scp de style 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 )
Description du paramètre :
model_dir
: Le nom du modèle ou le chemin d'accès au modèle sur le disque local.vad_model
: Ceci indique l'activation du VAD (Voice Activity Detection). Le but de VAD est de diviser l’audio long en clips plus courts. Dans ce cas, le temps d'inférence inclut à la fois la consommation totale de VAD et de SenseVoice et représente la latence de bout en bout. Si vous souhaitez tester le temps d'inférence du modèle SenseVoice séparément, le modèle VAD peut être désactivé.vad_kwargs
: Spécifie les configurations pour le modèle VAD. max_single_segment_time
: désigne la durée maximale de segmentation audio par le vad_model
, l'unité étant la milliseconde (ms).use_itn
: indique si le résultat de sortie inclut la ponctuation et la normalisation inverse du texte.batch_size_s
: indique l'utilisation du traitement par lots dynamique, où la durée totale de l'audio dans le lot est mesurée en secondes (s).merge_vad
: s'il faut fusionner de courts fragments audio segmentés par le modèle VAD, la longueur fusionnée étant merge_length_s
, en secondes (s).ban_emo_unk
: s'il faut interdire la sortie du jeton 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 )
Remarque : hub
: représente le référentiel de modèles, ms
signifie sélectionner le téléchargement ModelScope, hf
signifie sélectionner le téléchargement 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 )
Remarque : chunk_size
est la configuration de la latence de streaming. [0,10,5]
indique que la granularité de l'affichage en temps réel est 10*60=600ms
et que les informations anticipées sont 5*60=300ms
. Chaque entrée d'inférence dure 600ms
(les points d'échantillonnage sont 16000*0.6=960
) et la sortie est le texte correspondant. Pour l'entrée du dernier segment vocal, is_final=True
doit être défini pour forcer la sortie du dernier mot.
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 )
Remarque : Le format de sortie du modèle VAD est : [[beg1, end1], [beg2, end2], ..., [begN, endN]]
, où begN/endN
indique le point de début/fin du N-th
segment audio valide, mesuré en millisecondes.
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 )
Remarque : Le format de sortie du modèle VAD de streaming peut être l'un des quatre scénarios suivants :
[[beg1, end1], [beg2, end2], .., [begN, endN]]
: Identique au résultat de sortie VAD hors ligne mentionné ci-dessus.[[beg, -1]]
:Indique que seul un point de départ a été détecté.[[-1, end]]
:Indique que seul un point final a été détecté.[]
:Indique que ni un point de départ ni un point d'arrivée n'ont été détectés.La sortie est mesurée en millisecondes et représente le temps absolu depuis le point de départ.
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 )
Plus d'utilisations se réfèrent à la documentation, plus d'exemples se réfèrent à la démo
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 )
Plus d'exemples en référence à la démo
FunASR prend en charge le déploiement de modèles de service pré-entraînés ou affinés. Actuellement, il prend en charge les types de déploiement de services suivants :
Pour des informations plus détaillées, veuillez vous référer à la documentation de déploiement du service.
Si vous rencontrez des problèmes d'utilisation, vous pouvez directement signaler des problèmes sur la page github.
Vous pouvez également scanner le groupe DingTalk suivant pour rejoindre le groupe communautaire pour communiquer et discuter.
Groupe DingTalk |
---|
Les contributeurs peuvent être trouvés dans la liste des contributeurs
Ce projet est sous licence The MIT License. FunASR contient également divers composants tiers et du code modifié à partir d'autres dépôts sous d'autres licences open source. L'utilisation du modèle de pré-formation est soumise à une licence de modèle
@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 }
}