(简体中文|Английский|日本語)
SenseVoice — это базовая модель речи с множеством возможностей понимания речи, включая автоматическое распознавание речи (ASR), идентификацию разговорного языка (LID), распознавание речевых эмоций (SER) и обнаружение аудиособытий (AED).
Модельный зоопарк: модельскоп, обнимающее лицо
Онлайн-демо: демо-версия modelscope, пространство HuggingFace
SenseVoice фокусируется на высокоточном распознавании многоязычной речи, распознавании речевых эмоций и обнаружении аудиособытий.
Мы сравнили производительность распознавания многоязычной речи между SenseVoice и Whisper на наборах эталонных данных с открытым исходным кодом, включая AISHELL-1, AISHELL-2, Wenetspeech, LibriSpeech и Common Voice. С точки зрения распознавания китайского и кантонского диалектов модель SenseVoice-Small имеет преимущества.
Из-за отсутствия в настоящее время широко используемых тестов и методов распознавания речевых эмоций мы провели оценку различных показателей на нескольких наборах тестов и провели всестороннее сравнение с многочисленными результатами недавних тестов. Выбранные наборы тестов включают данные как на китайском, так и на английском языке и включают в себя различные стили, такие как выступления, фильмы и естественные разговоры. Без точной настройки целевых данных SenseVoice смогла достичь и превзойти производительность лучших на данный момент моделей распознавания речевых эмоций.
Кроме того, мы сравнили несколько моделей распознавания речевых эмоций с открытым исходным кодом на тестовых наборах, и результаты показывают, что модель SenseVoice-Large достигла наилучшей производительности почти на всех наборах данных, в то время как модель SenseVoice-Small также превзошла другие модели с открытым исходным кодом на тестовых наборах. большинство наборов данных.
Несмотря на то, что SenseVoice обучен исключительно на речевых данных, он все же может функционировать как автономная модель обнаружения событий. Мы сравнили его характеристики в наборе данных по классификации шума окружающей среды ESC-50 с широко используемыми отраслевыми моделями BEATS и PANN. Модель SenseVoice добилась похвальных результатов в решении этих задач. Однако из-за ограничений в обучающих данных и методологии эффективность классификации событий имеет некоторые недостатки по сравнению со специализированными моделями AED.
Модель SenseVoice-Small использует неавторегрессионную сквозную архитектуру, что приводит к чрезвычайно низкой задержке вывода. Имея такое же количество параметров, что и модель Whisper-Small, она делает выводы более чем в 5 раз быстрее, чем Whisper-Small, и в 15 раз быстрее, чем Whisper-Large.
pip install -r requirements.txt
Поддерживает ввод аудио в любом формате и любой продолжительности.
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
: имя модели или путь к модели на локальном диске.trust_remote_code
:True
это означает, что реализация кода модели загружается из remote_code
, который указывает точное расположение кода model
(например, model.py
в текущем каталоге). Он поддерживает абсолютные пути, относительные пути и сетевые URL-адреса.False
указывает, что реализация кода модели является интегрированной версией в FunASR. В настоящее время изменения, внесенные в model.py
в текущем каталоге, не будут действовать, поскольку загруженная версия является внутренней версией FunASR. Чтобы просмотреть код модели, нажмите здесь.vad_model
: указывает на активацию VAD (обнаружение голосовой активности). Цель VAD — разделить длинный звук на более короткие клипы. В этом случае время вывода включает в себя общее потребление VAD и SenseVoice и представляет собой сквозную задержку. Если вы хотите отдельно протестировать время вывода модели SenseVoice, модель VAD можно отключить.vad_kwargs
: определяет конфигурации модели VAD. max_single_segment_time
: обозначает максимальную продолжительность сегментации звука с помощью vad_model
, единицей измерения являются миллисекунды (мс).use_itn
: включает ли результат вывода пунктуацию и обратную нормализацию текста.batch_size_s
: указывает на использование динамического пакетирования, при котором общая продолжительность звука в пакете измеряется в секундах (с).merge_vad
: объединять ли короткие аудиофрагменты, сегментированные по модели VAD, с объединенной длиной merge_length_s
в секундах (с).ban_emo_unk
: Запретить ли вывод токена emo_unk
. Если все входные данные представляют собой короткие аудио (<30 с) и для повышения эффективности вывода необходим пакетный вывод, модель VAD можно удалить и соответствующим образом установить batch_size
.
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 ,
)
Дополнительные сведения об использовании см. в документации.
Поддерживает ввод аудио в любом формате с ограничением продолжительности ввода 30 секунд или меньше.
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 ])
Примечание. Модель ONNX экспортируется в исходный каталог модели.
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 ])
Примечание. Модель Libtorch экспортируется в исходный каталог модели.
export SENSEVOICE_DEVICE=cuda:0
fastapi run --port 50000
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./
Примеры данных
{"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}
Полная ссылка на data/train_example.jsonl
Описание:
key
: уникальный идентификатор аудиофайлаsource
: путь к аудиофайлуsource_len
: количество кадров fbank аудиофайла.target
: транскрипцияtarget_len
: длина целиtext_language
: идентификатор языка аудиофайла.emo_target
: метка эмоции аудиофайла.event_target
: метка события аудиофайла.with_or_wo_itn
: включает ли пунктуацию и обратную нормализацию текста. 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
Идентификаторы языков включают <|zh|>
、 <|en|>
、 <|yue|>
、 <|ja|>
и <|ko|>
.
BAC009S0764W0121 < | zh | >
BAC009S0916W0489 < | zh | >
asr_example_cn_en < | zh | >
ID0012W0014 < | en | >
train_emo.txt
Ярлыки эмоций включают <|HAPPY|>
、 <|SAD|>
、 <|ANGRY|>
<|NEUTRAL|>
<|FEARFUL|>
、 <|DISGUSTED|>
и <|SURPRISED|>
.
BAC009S0764W0121 < | NEUTRAL | >
BAC009S0916W0489 < | NEUTRAL | >
asr_example_cn_en < | NEUTRAL | >
ID0012W0014 < | NEUTRAL | >
train_event.txt
Ярлыки событий включают <|BGM|>
、 <|Speech|>
、 <|Applause|>
、 <|Laughter|>
<|Cry|>
、 <|Sneeze|>
、 <|Breath|>
и <|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 "
Если нет train_text_language.txt
, train_emo_target.txt
и train_event_target.txt
, язык, эмоция и метка события будут прогнозироваться автоматически с использованием модели 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 '
Обязательно измените train_tool в Finetune.sh на абсолютный путь funasr/bin/train_ds.py
из каталога установки FunASR, который вы настроили ранее.
bash finetune.sh
python webui.py
Если у вас возникнут проблемы в использовании, вы можете напрямую сообщить о проблемах на странице github.
Вы также можете отсканировать следующий QR-код группы DingTalk, чтобы присоединиться к группе сообщества для общения и обсуждения.
FunASR |
---|