阿里巴巴近期发布了开源语音大模型项目FunAudioLLM,该项目包含了两个核心模型:SenseVoice和CosyVoice。可以精准多语言识别并且进行语音克隆。
SenseVoice主要致力于高精度多语言语音识别、情感辨识和音频事件检测,支持超过50种语言的识别,其效果显著优于现有的Whisper模型,尤其在中文和粤语识别上提升超过50%。该模型不仅能够准确识别语音,还能辨别音乐、掌声、笑声、哭声、咳嗽和喷嚏等常见人机交互事件。多方面的测试显示,SenseVoice在情感辨识能力上也取得了行业领先的成果,能够检测到多种情感表现。
我们在开源基准数据集(包括 AISHELL-1、AISHELL-2、Wenetspeech、Librispeech和Common Voice)上比较了SenseVoice与Whisper的多语言语音识别性能和推理效率。在中文和粤语识别效果上,SenseVoice-Small模型具有明显的效果优势。
由于目前缺乏被广泛使用的情感识别测试指标和方法,我们在多个测试集的多种指标进行测试,并与近年来Benchmark上的多个结果进行了全面的对比。所选取的测试集同时包含中文/英文两种语言以及表演、影视剧、自然对话等多种风格的数据,在不进行目标数据微调的前提下,SenseVoice能够在测试数据上达到和超过目前最佳情感识别模型的效果。
同时,我们还在测试集上对多个开源情感识别模型进行对比,结果表明,SenseVoice-Large模型可以在几乎所有数据上都达到了最佳效果,而SenseVoice-Small模型同样可以在多数数据集上取得超越其他开源模型的效果。
尽管SenseVoice只在语音数据上进行训练,它仍然可以作为事件检测模型进行单独使用。我们在环境音分类ESC-50数据集上与目前业内广泛使用的BEATS与PANN模型的效果进行了对比。SenseVoice模型能够在这些任务上取得较好的效果,但受限于训练数据与训练方式,其事件分类效果专业的事件检测模型相比仍然有一定的差距。
CosyVoice则聚焦于自然语音生成,支持多语言、音色和情感控制,涵盖中文、英文、日文、粤语和韩语五种语言的生成。与传统语音生成模型相比,CosyVoice在生成效果上有显著提升。它仅需要3至10秒的原始音频,即可生成模拟音色,包含韵律和情感等细节,甚至能够实现跨语言的语音生成。
此外,CosyVoice还支持通过富文本或自然语言形式,对生成语音的情感和韵律进行细粒度控制,大大提升了生成语音在情感表现力上的细腻程度。
高度拟人化:采用阿里通义语音实验室自研的CosyVoice 生成式神经网络语音大模型算法,使生成的语音在语调、韵律、情感表达等方面达到超拟人程度。
多样化音色选择:提供海量优质的音库资源,包括不同性别、年龄、方言以及各种特色声音,满足用户在不同场景下的个性化需求。无论是新闻播报的庄重严肃,还是故事讲述的情感丰富,都能轻松驾驭。
实时高效合成:系统具有出色的响应速度和流式语音合成处理能力,无论是长篇文档还是短句指令,都能实现快速、准确的实时语音合成。
支持富语言声音事件以及多情感的高拟人语音生成,例如笑声、语气词等,以及不同情感表现的高拟人语音生成。
灵活应用广泛:适用于多种应用场景,如智能客服、有声读物、车载导航、教育辅导等,极大地拓宽了语音交互的可能性,提升用户体验的同时,也为企业智能化转型提供了强大支持。
目前两个模型均可在 ModelSpace 和 HuggingFace 上找到并下载。
我在Lab上按照 Github 二者的 README.md运行了。但是发现官方使用 Python 8 且 Pytorch都没用上 Ver 2,所以我直接照着requirements.txt 在默认 Python 10 的 Lab 环境上运行:
jupyter notebook
!pip install torch torchaudio modelscope huggingface huggingface_hub funasr numpy
from funasr import AutoModel
model_dir = "iic/SenseVoiceSmall"
input_file = (
"https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav"
)
model = AutoModel(model=model_dir,
vad_model="fsmn-vad",
vad_kwargs={"max_single_segment_time": 30000},
trust_remote_code=True, device="cuda:0")
res = model.generate(
input=input_file,
cache={},
language="zh", # "zn", "en", "yue", "ja", "ko", "nospeech"
use_itn=False,
batch_size_s=0,
)
print(res)
jupyter notebook
!pip install conformer deepspeed diffusers gdown gradio grpcio grpcio-tools hydra-core HyperPyYAML inflect librosa lightning matplotlib modelscope networkx omegaconf onnxruntime-gpu onnxruntime openai-whisper protobuf pydantic rich soundfile tensorboard torch torchaudio wget
!apt-get install sox libsox-dev
import os
os.chdir('/content/CosyVoice')
# SDK模型下载
from modelscope import snapshot_download
snapshot_download('iic/CosyVoice-300M', local_dir='pretrained_models/CosyVoice-300M')
snapshot_download('iic/CosyVoice-300M-SFT', local_dir='pretrained_models/CosyVoice-300M-SFT')
snapshot_download('iic/CosyVoice-300M-Instruct', local_dir='pretrained_models/CosyVoice-300M-Instruct')
snapshot_download('iic/CosyVoice-ttsfrd', local_dir='pretrained_models/CosyVoice-ttsfrd')
!export PYTHONPATH=third_party/Matcha-TTS
!pip install matcha-tts
import os
os.chdir('/content/CosyVoice')
from cosyvoice.cli.cosyvoice import CosyVoice
from cosyvoice.utils.file_utils import load_wav
import torchaudio
cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M-SFT')
# sft usage
print(cosyvoice.list_avaliable_spks())
output = cosyvoice.inference_sft('你好,我是通义生成式语音大模型,请问有什么可以帮您的吗?', '中文女')
torchaudio.save('sft.wav', output['tts_speech'], 22050)
cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M')
# zero_shot usage, <|zh|><|en|><|jp|><|yue|><|ko|> for Chinese/English/Japanese/Cantonese/Korean
prompt_speech_16k = load_wav('zero_shot_prompt.wav', 16000)
output = cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', prompt_speech_16k)
torchaudio.save('zero_shot.wav', output['tts_speech'], 22050)
# cross_lingual usage
prompt_speech_16k = load_wav('cross_lingual_prompt.wav', 16000)
output = cosyvoice.inference_cross_lingual('<|en|>And then later on, fully acquiring that company. So keeping management in line, interest in line with the asset that\'s coming into the family is a reason why sometimes we don\'t buy the whole thing.', prompt_speech_16k)
torchaudio.save('cross_lingual.wav', output['tts_speech'], 22050)
cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M-Instruct')
# instruct usage, support [laughter][breath]
output = cosyvoice.inference_instruct('在面对挑战时,他展现了非凡的勇气与智慧。', '中文男', 'Theo \'Crimson\', is a fiery, passionate rebel leader. Fights with fervor for justice, but struggles with impulsiveness.')
torchaudio.save('instruct.wav', output['tts_speech'], 22050)
个人感觉平台更靠向ModelSpace。哎,学不完,根本学不完!
我会定期在CSDN分享我的学习心得,项目经验和行业动态。如果你对某个领域感兴趣,或者想要了解更多技术干货,请关注我的账号,一起成长!