(简体中文|inglés)
FunASR espera construir un puente entre la investigación académica y las aplicaciones industriales del reconocimiento de voz. Al respaldar la capacitación y el ajuste del modelo de reconocimiento de voz de nivel industrial, los investigadores y desarrolladores pueden realizar investigaciones y producir modelos de reconocimiento de voz de manera más conveniente y promover el desarrollo de la ecología del reconocimiento de voz. ¡ASR para divertirse!
Aspectos destacados | Noticias | Instalación | Inicio rápido | Tutoría | Tiempo de ejecución | Zoológico modelo | Contacto
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 ha abierto una gran cantidad de modelos previamente entrenados sobre datos industriales. Usted es libre de usar, copiar, modificar y compartir modelos FunASR según el Acuerdo de licencia de modelo. A continuación se muestran algunos modelos representativos; para obtener más modelos, consulte Model Zoo.
(Nota: ⭐ representa el zoológico modelo ModelScope, ? representa el zoológico modelo Huggingface, ? representa el zoológico modelo OpenAI)
Nombre del modelo | Detalles de la tarea | Datos de entrenamiento | Parámetros |
---|---|---|---|
SentidoVozPequeños (⭐ ? ) | Múltiples capacidades de comprensión del habla, incluidas ASR, ITN, LID, SER y AED, y admite idiomas como zh, yue, en, ja, ko. | 300000 horas | 234M |
paraformer-zh (⭐ ? ) | reconocimiento de voz, con marcas de tiempo, sin transmisión | 60000 horas, mandarín | 220M |
paraformer-zh-streaming ( ⭐ ? ) | reconocimiento de voz, transmisión | 60000 horas, mandarín | 220M |
paraformer-es ( ⭐ ? ) | reconocimiento de voz, sin marcas de tiempo, sin transmisión | 50000 horas, inglés | 220M |
conformador ( ⭐ ? ) | reconocimiento de voz, sin transmisión | 50000 horas, inglés | 220M |
ct-punc ( ⭐ ? ) | restauración de puntuación | 100M, mandarín e inglés | 290M |
fsmn-vad ( ⭐ ? ) | detección de actividad de voz | 5000 horas, mandarín e inglés. | 0,4 millones |
fsmn-kws ( ⭐ ) | detección de palabras clave, transmisión | 5000 horas, mandarín | 0,7 millones |
fa-zh ( ⭐ ? ) | predicción de marca de tiempo | 5000 horas, mandarín | 38M |
cámara++ ( ⭐ ? ) | verificación/diario del hablante | 5000 horas | 7,2 millones |
Susurro-grande-v3 (⭐ ? ) | reconocimiento de voz, con marcas de tiempo, sin transmisión | plurilingüe | 1550 millones |
Whisper-grande-v3-turbo (⭐ ? ) | reconocimiento de voz, con marcas de tiempo, sin transmisión | plurilingüe | 809 millones |
Qwen-Audio (⭐ ? ) | modelos multimodales de audio-texto (preentrenamiento) | plurilingüe | 8B |
Qwen-Audio-Chat (⭐ ? ) | modelos multimodales audio-texto (chat) | plurilingüe | 8B |
emoción2vec+grande (⭐ ? ) | reconginación de emociones del habla | 40000 horas | 300M |
A continuación se muestra un tutorial de inicio rápido. Pruebe archivos de audio (mandarín, inglés).
funasr ++model=paraformer-zh ++vad_model= " fsmn-vad " ++punc_model= " ct-punc " ++input=asr_example_zh.wav
Notas: admite el reconocimiento de un solo archivo de audio, así como una lista de archivos en 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 )
Descripción del parámetro:
model_dir
: el nombre del modelo o la ruta al modelo en el disco local.vad_model
: Esto indica la activación de VAD (Detección de actividad de voz). El propósito de VAD es dividir audio largo en clips más cortos. En este caso, el tiempo de inferencia incluye el consumo total de VAD y SenseVoice y representa la latencia de un extremo a otro. Si desea probar el tiempo de inferencia del modelo SenseVoice por separado, se puede desactivar el modelo VAD.vad_kwargs
: especifica las configuraciones para el modelo VAD. max_single_segment_time
: indica la duración máxima para la segmentación de audio mediante vad_model
, siendo la unidad milisegundos (ms).use_itn
: si el resultado de salida incluye puntuación y normalización de texto inversa.batch_size_s
: Indica el uso de procesamiento por lotes dinámico, donde la duración total del audio en el lote se mide en segundos (s).merge_vad
: si se deben fusionar fragmentos de audio cortos segmentados por el modelo VAD, siendo la longitud fusionada merge_length_s
, en segundos (s).ban_emo_unk
: si se prohibirá la salida del 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 el repositorio de modelos, ms
significa seleccionar la descarga de ModelScope, hf
significa seleccionar la descarga de 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
es la configuración para la latencia de transmisión. [0,10,5]
indica que la granularidad de visualización en tiempo real es 10*60=600ms
y la información de anticipación es 5*60=300ms
. Cada entrada de inferencia es 600ms
(los puntos de muestra son 16000*0.6=960
) y la salida es el texto correspondiente. Para la entrada del último segmento de voz, se debe establecer is_final=True
para forzar la salida de la última palabra.
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: El formato de salida del modelo VAD es: [[beg1, end1], [beg2, end2], ..., [begN, endN]]
, donde begN/endN
indica el punto inicial/final del N-th
segmento de audio válido, medido en milisegundos.
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: El formato de salida para el modelo VAD de transmisión puede ser uno de cuatro escenarios:
[[beg1, end1], [beg2, end2], .., [begN, endN]]
:Igual que el resultado de salida VAD fuera de línea mencionado anteriormente.[[beg, -1]]
:Indica que solo se ha detectado un punto de partida.[[-1, end]]
:Indica que solo se ha detectado un punto final.[]
:Indica que no se ha detectado ni un punto inicial ni un punto final.La salida se mide en milisegundos y representa el tiempo absoluto desde el punto de partida.
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 )
Más usos consulte los documentos, más ejemplos consulte la demostración
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 )
Más ejemplos consulte la demostración
FunASR admite la implementación de modelos de servicio previamente entrenados o más ajustados. Actualmente, admite los siguientes tipos de implementación de servicios:
Para obtener información más detallada, consulte la documentación de implementación del servicio.
Si encuentra problemas de uso, puede plantear problemas directamente en la página de github.
También puede escanear el siguiente grupo de DingTalk para unirse al grupo comunitario para comunicarse y discutir.
Grupo DingTalk |
---|
Los contribuyentes se pueden encontrar en la lista de contribuyentes.
Este proyecto tiene la licencia MIT. FunASR también contiene varios componentes de terceros y algún código modificado de otros repositorios bajo otras licencias de código abierto. El uso del modelo de preentrenamiento está sujeto a la licencia del 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 }
}