(简体中文|Inglês)
FunASR espera construir uma ponte entre a pesquisa acadêmica e as aplicações industriais em reconhecimento de fala. Ao apoiar o treinamento e o ajuste fino do modelo de reconhecimento de fala de nível industrial, pesquisadores e desenvolvedores podem conduzir pesquisas e produção de modelos de reconhecimento de fala de forma mais conveniente e promover o desenvolvimento da ecologia do reconhecimento de fala. ASR para diversão!
Destaques | Notícias | Instalação | Início rápido | Tutorial | Tempo de execução | Zoológico modelo | Contato
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 abriu o código-fonte de um grande número de modelos pré-treinados em dados industriais. Você é livre para usar, copiar, modificar e compartilhar modelos FunASR de acordo com o Contrato de Licença de Modelo. Abaixo estão alguns modelos representativos, para mais modelos consulte o Model Zoo.
(Nota: ⭐ representa o zoológico modelo ModelScope, ? representa o zoológico modelo Huggingface, ? representa o zoológico modelo OpenAI)
Nome do modelo | Detalhes da tarefa | Dados de treinamento | Parâmetros |
---|---|---|---|
SenseVoiceSmall (⭐?) | vários recursos de compreensão de fala, incluindo ASR, ITN, LID, SER e AED, suportam idiomas como zh, yue, en, ja, ko | 300.000 horas | 234 milhões |
paraformer-zh (⭐?) | reconhecimento de fala, com carimbos de data/hora, sem streaming | 60.000 horas, mandarim | 220 milhões |
paraformer-zh-streaming (⭐?) | reconhecimento de fala, streaming | 60.000 horas, mandarim | 220 milhões |
paraformer-pt (⭐?) | reconhecimento de fala, sem carimbo de data/hora, sem streaming | 50.000 horas, inglês | 220 milhões |
conformar-pt (⭐?) | reconhecimento de fala, sem streaming | 50.000 horas, inglês | 220 milhões |
ct-punc (⭐?) | restauração de pontuação | 100M, mandarim e inglês | 290 milhões |
fsmn-vad (⭐?) | detecção de atividade de voz | 5.000 horas, mandarim e inglês | 0,4 milhão |
fsmn-kws (⭐) | detecção de palavras-chave, streaming | 5.000 horas, mandarim | 0,7 milhão |
fa-zh (⭐?) | previsão de carimbo de data/hora | 5.000 horas, mandarim | 38 milhões |
câmera++ (⭐?) | verificação/diarização de alto-falante | 5.000 horas | 7,2 milhões |
Whisper-grande-v3 (⭐?) | reconhecimento de fala, com carimbos de data/hora, sem streaming | multilíngue | 1550 milhões |
Whisper-grande-v3-turbo (⭐?) | reconhecimento de fala, com carimbos de data/hora, sem streaming | multilíngue | 809 milhões |
Qwen-Áudio (⭐?) | modelos multimodais de áudio-texto (pré-treinamento) | multilíngue | 8B |
Qwen-Áudio-Chat (⭐?) | modelos multimodais de áudio-texto (chat) | multilíngue | 8B |
emoção2vec+grande (⭐?) | reconhecimento de emoção de fala | 40.000 horas | 300 milhões |
Abaixo está um tutorial de início rápido. Teste arquivos de áudio (mandarim, inglês).
funasr ++model=paraformer-zh ++vad_model= " fsmn-vad " ++punc_model= " ct-punc " ++input=asr_example_zh.wav
Notas: Suporta reconhecimento de arquivo de áudio único, bem como lista de arquivos no formato wav.scp estilo 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 )
Descrição do parâmetro:
model_dir
: o nome do modelo ou o caminho para o modelo no disco local.vad_model
: Indica a ativação do VAD (Voice Activity Detection). O objetivo do VAD é dividir áudio longo em clipes mais curtos. Neste caso, o tempo de inferência inclui o consumo total do VAD e do SenseVoice e representa a latência ponta a ponta. Se desejar testar o tempo de inferência do modelo SenseVoice separadamente, o modelo VAD pode ser desativado.vad_kwargs
: Especifica as configurações do modelo VAD. max_single_segment_time
: denota a duração máxima para segmentação de áudio pelo vad_model
, sendo a unidade milissegundos (ms).use_itn
: se o resultado de saída inclui pontuação e normalização inversa de texto.batch_size_s
: Indica o uso de batching dinâmico, onde a duração total do áudio no lote é medida em segundos(s).merge_vad
: Se deseja mesclar pequenos fragmentos de áudio segmentados pelo modelo VAD, com a duração mesclada sendo merge_length_s
, em segundos (s).ban_emo_unk
: Se deve banir a saída do 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 )
Nota: hub
: representa o repositório do modelo, ms
significa selecionar download do ModelScope, hf
significa selecionar download do 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 )
Nota: chunk_size
é a configuração para latência de streaming. [0,10,5]
indica que a granularidade de exibição em tempo real é 10*60=600ms
e as informações antecipadas são 5*60=300ms
. Cada entrada de inferência é 600ms
(os pontos de amostra são 16000*0.6=960
) e a saída é o texto correspondente. Para a entrada do último segmento de fala, is_final=True
precisa ser definido para forçar a saída da última palavra.
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 )
Nota: O formato de saída do modelo VAD é: [[beg1, end1], [beg2, end2], ..., [begN, endN]]
, onde begN/endN
indica o ponto inicial/final do N-th
segmento de áudio válido, medido em milissegundos.
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 )
Nota: O formato de saída para o modelo VAD de streaming pode ser um dos quatro cenários:
[[beg1, end1], [beg2, end2], .., [begN, endN]]
:O mesmo que o resultado de saída VAD offline mencionado acima.[[beg, -1]]
:Indica que apenas um ponto inicial foi detectado.[[-1, end]]
:Indica que apenas um ponto final foi detectado.[]
:Indica que nem um ponto inicial nem um ponto final foram detectados.A saída é medida em milissegundos e representa o tempo absoluto desde o ponto inicial.
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 )
Mais usos referentes aos documentos, mais exemplos referentes à demonstração
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 )
Mais exemplos referem-se à demonstração
FunASR oferece suporte à implantação de modelos pré-treinados ou ainda mais ajustados para serviço. Atualmente, ele oferece suporte aos seguintes tipos de implantação de serviço:
Para obter informações mais detalhadas, consulte a documentação de implantação do serviço.
Se você encontrar problemas de uso, poderá levantar problemas diretamente na página do github.
Você também pode digitalizar o seguinte grupo DingTalk para ingressar no grupo da comunidade para comunicação e discussão.
Grupo DingTalk |
---|
Os contribuidores podem ser encontrados na lista de contribuidores
Este projeto está licenciado sob a licença MIT. FunASR também contém vários componentes de terceiros e alguns códigos modificados de outros repositórios sob outras licenças de código aberto. A utilização do modelo de pré-treinamento está sujeita à licença do modelo
@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 }
}