(简体中文|inglés|日本語)
SenseVoice es un modelo básico del habla con múltiples capacidades de comprensión del habla, incluido el reconocimiento automático del habla (ASR), la identificación del lenguaje hablado (LID), el reconocimiento de emociones del habla (SER) y la detección de eventos de audio (AED).
Model Zoo: modelscope, huggingface
Demostración en línea: demostración de modelscope, espacio huggingface
SenseVoice se centra en el reconocimiento de voz multilingüe de alta precisión, el reconocimiento de emociones del habla y la detección de eventos de audio.
Comparamos el rendimiento del reconocimiento de voz multilingüe entre SenseVoice y Whisper en conjuntos de datos de referencia de código abierto, incluidos AISHELL-1, AISHELL-2, Wenetspeech, LibriSpeech y Common Voice. En términos de reconocimiento de chino y cantonés, el modelo SenseVoice-Small tiene ventajas.
Debido a la falta actual de puntos de referencia y métodos ampliamente utilizados para el reconocimiento de emociones del habla, realizamos evaluaciones de varias métricas en múltiples conjuntos de pruebas y realizamos una comparación exhaustiva con numerosos resultados de puntos de referencia recientes. Los conjuntos de prueba seleccionados abarcan datos tanto en chino como en inglés e incluyen múltiples estilos, como actuaciones, películas y conversaciones naturales. Sin realizar ajustes en los datos de destino, SenseVoice pudo lograr y superar el rendimiento de los mejores modelos actuales de reconocimiento de emociones del habla.
Además, comparamos múltiples modelos de reconocimiento de emociones del habla de código abierto en los conjuntos de prueba, y los resultados indican que el modelo SenseVoice-Large logró el mejor rendimiento en casi todos los conjuntos de datos, mientras que el modelo SenseVoice-Small también superó a otros modelos de código abierto en la mayoría de los conjuntos de datos.
Aunque está entrenado exclusivamente con datos de voz, SenseVoice aún puede funcionar como un modelo de detección de eventos independiente. Comparamos su desempeño en el conjunto de datos de clasificación de sonido ambiental ESC-50 con los modelos industriales ampliamente utilizados BEATS y PANN. El modelo SenseVoice logró resultados encomiables en estas tareas. Sin embargo, debido a las limitaciones en los datos y la metodología de entrenamiento, su rendimiento de clasificación de eventos tiene algunas lagunas en comparación con los modelos DEA especializados.
El modelo SenseVoice-Small implementa una arquitectura de extremo a extremo no autorregresiva, lo que resulta en una latencia de inferencia extremadamente baja. Con un número de parámetros similar al modelo Whisper-Small, infiere más de 5 veces más rápido que Whisper-Small y 15 veces más rápido que Whisper-Large.
pip install -r requirements.txt
Admite entrada de audio en cualquier formato y de cualquier duración.
from funasr import AutoModel
from funasr . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = AutoModel (
model = model_dir ,
trust_remote_code = True ,
remote_code = "./model.py" ,
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" , # "zh", "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 )
model_dir
: el nombre del modelo o la ruta al modelo en el disco local.trust_remote_code
:True
, significa que la implementación del código del modelo se carga desde remote_code
, que especifica la ubicación exacta del código model
(por ejemplo, model.py
en el directorio actual). Admite rutas absolutas, rutas relativas y URL de red.False
, indica que la implementación del código del modelo es la versión integrada dentro de FunASR. En este momento, las modificaciones realizadas en model.py
en el directorio actual no serán efectivas, ya que la versión cargada es la interna de FunASR. Para obtener el código del modelo, haga clic aquí para verlo.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
. Si todas las entradas son audios cortos (<30 segundos) y se necesita inferencia por lotes para acelerar la eficiencia de la inferencia, se puede eliminar el modelo VAD y se puede configurar batch_size
en consecuencia.
model = AutoModel ( model = model_dir , trust_remote_code = True , device = "cuda:0" )
res = model . generate (
input = f" { model . model_path } /example/en.mp3" ,
cache = {},
language = "zh" , # "zh", "en", "yue", "ja", "ko", "nospeech"
use_itn = False ,
batch_size = 64 ,
)
Para obtener más uso, consulte los documentos.
Admite entrada de audio en cualquier formato, con un límite de duración de entrada de 30 segundos o menos.
from model import SenseVoiceSmall
from funasr . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
m , kwargs = SenseVoiceSmall . from_pretrained ( model = model_dir , device = "cuda:0" )
m . eval ()
res = m . inference (
data_in = f" { kwargs [ 'model_path' ] } /example/en.mp3" ,
language = "auto" , # "zh", "en", "yue", "ja", "ko", "nospeech"
use_itn = False ,
ban_emo_unk = False ,
** kwargs ,
)
text = rich_transcription_postprocess ( res [ 0 ][ 0 ][ "text" ])
print ( text )
# pip3 install -U funasr funasr-onnx
from pathlib import Path
from funasr_onnx import SenseVoiceSmall
from funasr_onnx . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = SenseVoiceSmall ( model_dir , batch_size = 10 , quantize = True )
# inference
wav_or_scp = [ "{}/.cache/modelscope/hub/{}/example/en.mp3" . format ( Path . home (), model_dir )]
res = model ( wav_or_scp , language = "auto" , use_itn = True )
print ([ rich_transcription_postprocess ( i ) for i in res ])
Nota: El modelo ONNX se exporta al directorio del modelo original.
from pathlib import Path
from funasr_torch import SenseVoiceSmall
from funasr_torch . utils . postprocess_utils import rich_transcription_postprocess
model_dir = "iic/SenseVoiceSmall"
model = SenseVoiceSmall ( model_dir , batch_size = 10 , device = "cuda:0" )
wav_or_scp = [ "{}/.cache/modelscope/hub/{}/example/en.mp3" . format ( Path . home (), model_dir )]
res = model ( wav_or_scp , language = "auto" , use_itn = True )
print ([ rich_transcription_postprocess ( i ) for i in res ])
Nota: el modelo de Libtorch se exporta al directorio del modelo original.
export SENSEVOICE_DEVICE=cuda:0
fastapi run --port 50000
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./
Ejemplos de datos
{"key": "YOU0000008470_S0000238_punc_itn", "text_language": "<|en|>", "emo_target": "<|NEUTRAL|>", "event_target": "<|Speech|>", "with_or_wo_itn": "<|withitn|>", "target": "Including legal due diligence, subscription agreement, negotiation.", "source": "/cpfs01/shared/Group-speech/beinian.lzr/data/industrial_data/english_all/audio/YOU0000008470_S0000238.wav", "target_len": 7, "source_len": 140}
{"key": "AUD0000001556_S0007580", "text_language": "<|en|>", "emo_target": "<|NEUTRAL|>", "event_target": "<|Speech|>", "with_or_wo_itn": "<|woitn|>", "target": "there is a tendency to identify the self or take interest in what one has got used to", "source": "/cpfs01/shared/Group-speech/beinian.lzr/data/industrial_data/english_all/audio/AUD0000001556_S0007580.wav", "target_len": 18, "source_len": 360}
Referencia completa a data/train_example.jsonl
Descripción:
key
: ID única del archivo de audiosource
: ruta al archivo de audiosource_len
: número de fotogramas fbank del archivo de audio.target
: transcripcióntarget_len
: longitud del objetivotext_language
: ID de idioma del archivo de audio.emo_target
: etiqueta de emoción del archivo de audioevent_target
: etiqueta de evento del archivo de audiowith_or_wo_itn
: si incluye puntuación y normalización de texto inverso train_text.txt
BAC009S0764W0121 甚至出现交易几乎停滞的情况
BAC009S0916W0489 湖北一公司以员工名义贷款数十员工负债千万
asr_example_cn_en 所有只要处理 data 不管你是做 machine learning 做 deep learning 做 data analytics 做 data science 也好 scientist 也好通通都要都做的基本功啊那 again 先先对有一些>也许对
ID0012W0014 he tried to think how it could be
train_wav.scp
BAC009S0764W0121 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0764W0121.wav
BAC009S0916W0489 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0916W0489.wav
asr_example_cn_en https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_cn_en.wav
ID0012W0014 https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_en.wav
train_text_language.txt
Los identificadores de idioma incluyen <|zh|>
、 <|en|>
、 <|yue|>
、 <|ja|>
y <|ko|>
.
BAC009S0764W0121 < | zh | >
BAC009S0916W0489 < | zh | >
asr_example_cn_en < | zh | >
ID0012W0014 < | en | >
train_emo.txt
Las etiquetas de emoción incluyen <|HAPPY|>
、 <|SAD|>
、 <|ANGRY|>
、 <|NEUTRAL|>
、 <|FEARFUL|>
、 <|DISGUSTED|>
y <|SURPRISED|>
.
BAC009S0764W0121 < | NEUTRAL | >
BAC009S0916W0489 < | NEUTRAL | >
asr_example_cn_en < | NEUTRAL | >
ID0012W0014 < | NEUTRAL | >
train_event.txt
Las etiquetas de eventos incluyen <|BGM|>
、 <|Speech|>
、 <|Applause|>
、 <|Laughter|>
、 <|Cry|>
、 <|Sneeze|>
、 <|Breath|>
y <|Cough|>
.
BAC009S0764W0121 < | Speech | >
BAC009S0916W0489 < | Speech | >
asr_example_cn_en < | Speech | >
ID0012W0014 < | Speech | >
Command
# generate train.jsonl and val.jsonl from wav.scp, text.txt, text_language.txt, emo_target.txt, event_target.txt
sensevoice2jsonl
++scp_file_list= ' ["../../../data/list/train_wav.scp", "../../../data/list/train_text.txt", "../../../data/list/train_text_language.txt", "../../../data/list/train_emo.txt", "../../../data/list/train_event.txt"] '
++data_type_list= ' ["source", "target", "text_language", "emo_target", "event_target"] '
++jsonl_file_out= " ../../../data/list/train.jsonl "
Si no hay train_text_language.txt
, train_emo_target.txt
y train_event_target.txt
, el idioma, la emoción y la etiqueta del evento se predecirán automáticamente utilizando el modelo SenseVoice
.
# generate train.jsonl and val.jsonl from wav.scp and text.txt
sensevoice2jsonl
++scp_file_list= ' ["../../../data/list/train_wav.scp", "../../../data/list/train_text.txt"] '
++data_type_list= ' ["source", "target"] '
++jsonl_file_out= " ../../../data/list/train.jsonl "
++model_dir= ' iic/SenseVoiceSmall '
Asegúrese de modificar train_tool en finetune.sh a la ruta absoluta de funasr/bin/train_ds.py
desde el directorio de instalación de FunASR que configuró anteriormente.
bash finetune.sh
python webui.py
Si encuentra problemas de uso, puede plantear problemas directamente en la página de github.
También puede escanear el siguiente código QR del grupo DingTalk para unirse al grupo comunitario para comunicarse y discutir.
FunASR |
---|