(简体中文|английский)
FunASR надеется построить мост между академическими исследованиями и промышленными приложениями в области распознавания речи. Поддерживая обучение и настройку модели распознавания речи промышленного уровня, исследователи и разработчики могут более удобно проводить исследования и создавать модели распознавания речи, а также способствовать развитию экологии распознавания речи. ASR для развлечения!
Основные моменты | Новости | Установка | Быстрый старт | Учебное пособие | Время выполнения | Модельный зоопарк | Контакт
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 выложила в открытый доступ большое количество предварительно обученных моделей на промышленных данных. Вы можете свободно использовать, копировать, изменять и делиться моделями FunASR в соответствии с Типовым лицензионным соглашением. Ниже приведены некоторые типичные модели. Дополнительные модели можно найти в Зоопарке моделей.
(Примечание: ⭐ представляет зоопарк моделей ModelScope, ? представляет зоопарк моделей Huggingface, ? представляет зоопарк моделей OpenAI)
Название модели | Подробности задачи | Данные обучения | Параметры |
---|---|---|---|
SenseVoiceМаленький (⭐ ? ) | множество возможностей распознавания речи, включая ASR, ITN, LID, SER и AED, поддержка таких языков, как zh, yue, en, ja, ko | 300000 часов | 234М |
параформер-ж (⭐ ? ) | распознавание речи, с временными метками, без потоковой передачи | 60000 часов, мандаринский диалект | 220М |
параформер-ж-стриминг ( ⭐ ? ) | распознавание речи, потоковая передача | 60000 часов, мандаринский диалект | 220М |
paraformer-en ( ⭐ ? ) | распознавание речи, без временных меток, без потоковой передачи | 50000 часов, английский | 220М |
конформер-ан ( ⭐ ? ) | распознавание речи, непотоковое | 50000 часов, английский | 220М |
ct-пункт ( ⭐ ? ) | восстановление пунктуации | 100M, китайский и английский | 290М |
фсмн-вад ( ⭐ ? ) | обнаружение голосовой активности | 5000 часов, мандаринский и английский языки | 0,4М |
fsmn-kws ( ⭐ ) | определение ключевых слов, потоковая передача | 5000 часов, мандаринский диалект | 0,7М |
фа-ж ( ⭐ ? ) | прогноз временной метки | 5000 часов, мандаринский диалект | 38М |
камера++ ( ⭐ ? ) | проверка/диаризирование спикера | 5000 часов | 7,2 млн. |
Шепот-большой-v3 (⭐ ? ) | распознавание речи, с временными метками, без потоковой передачи | многоязычный | 1550 М |
Whisper-large-v3-турбо (⭐ ? ) | распознавание речи, с временными метками, без потоковой передачи | многоязычный | 809 М |
Квен-Аудио (⭐ ? ) | аудиотекстовые мультимодальные модели (предобучение) | многоязычный | 8Б |
Qwen-Аудио-Чат (⭐ ? ) | аудиотекстовые мультимодальные модели (чат) | многоязычный | 8Б |
эмоция2vec+большой (⭐ ? ) | восстановление речевых эмоций | 40000 часов | 300М |
Ниже приведено краткое руководство по началу работы. Тестовые аудиофайлы (китайский, английский).
funasr ++model=paraformer-zh ++vad_model= " fsmn-vad " ++punc_model= " ct-punc " ++input=asr_example_zh.wav
Примечания: Поддержка распознавания отдельного аудиофайла, а также списка файлов в формате wav.scp в стиле 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 )
Описание параметра:
model_dir
: имя модели или путь к модели на локальном диске.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
. 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 )
Примечание. hub
: представляет репозиторий модели, ms
означает выбор загрузки ModelScope, hf
означает выбор загрузки 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 )
Примечание. chunk_size
— это конфигурация задержки потоковой передачи. [0,10,5]
указывает, что степень детализации отображения в реальном времени составляет 10*60=600ms
, а упреждающая информация — 5*60=300ms
. Каждый вход вывода составляет 600ms
(точки выборки — 16000*0.6=960
), а выход — соответствующий текст. Для ввода последнего речевого сегмента необходимо установить is_final=True
чтобы принудительно выводить последнее слово.
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 )
Примечание. Выходной формат модели VAD: [[beg1, end1], [beg2, end2], ..., [begN, endN]]
, где begN/endN
указывает начальную/конечную точку N-th
действительный аудиосегмент, измеряемый в миллисекундах.
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 )
Примечание. Выходной формат потоковой модели VAD может быть одним из четырех сценариев:
[[beg1, end1], [beg2, end2], .., [begN, endN]]
: то же, что и результат вывода автономного VAD, упомянутый выше.[[beg, -1]]
: указывает, что обнаружена только начальная точка.[[-1, end]]
: указывает, что обнаружена только конечная точка.[]
: Указывает, что ни начальная, ни конечная точка не обнаружены.Выходные данные измеряются в миллисекундах и представляют собой абсолютное время от начальной точки.
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 )
Дополнительные варианты использования см. в документации, дополнительные примеры — в демо-версии.
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 )
Дополнительные примеры см. в демо-версии
FunASR поддерживает развертывание предварительно обученных или доработанных моделей для обслуживания. В настоящее время он поддерживает следующие типы развертывания сервисов:
Более подробную информацию можно найти в документации по развертыванию службы.
Если у вас возникнут проблемы в использовании, вы можете напрямую сообщить о проблемах на странице github.
Вы также можете просмотреть следующую группу DingTalk, чтобы присоединиться к группе сообщества для общения и обсуждения.
Группа DingTalk |
---|
Авторов можно найти в списке участников.
Этот проект распространяется под лицензией MIT License. FunASR также содержит различные сторонние компоненты и некоторый код, модифицированный из других репозиториев под другими лицензиями с открытым исходным кодом. Использование модели предварительного обучения регулируется лицензией модели.
@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 }
}