阿里巴巴近期發布了開源語音大模型項目FunAudioLLM,該項目包含了兩個核心模型:SenseVoice和CosyVoice。可以精準多語言識別并且進行語音克隆。
SenseVoice:精準多語言識別與情感辨識
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則聚焦于自然語音生成,支持多語言、音色和情感控制,涵蓋中文、英文、日文、粵語和韓語五種語言的生成。與傳統語音生成模型相比,CosyVoice在生成效果上有顯著提升。它僅需要3至10秒的原始音頻,即可生成模擬音色,包含韻律和情感等細節,甚至能夠實現跨語言的語音生成。
此外,CosyVoice還支持通過富文本或自然語言形式,對生成語音的情感和韻律進行細粒度控制,大大提升了生成語音在情感表現力上的細膩程度。
產品優勢
-
高度擬人化:采用阿里通義語音實驗室自研的CosyVoice 生成式神經網絡語音大模型算法,使生成的語音在語調、韻律、情感表達等方面達到超擬人程度。
-
多樣化音色選擇:提供海量優質的音庫資源,包括不同性別、年齡、方言以及各種特色聲音,滿足用戶在不同場景下的個性化需求。無論是新聞播報的莊重嚴肅,還是故事講述的情感豐富,都能輕松駕馭。
-
實時高效合成:系統具有出色的響應速度和流式語音合成處理能力,無論是長篇文檔還是短句指令,都能實現快速、準確的實時語音合成。
-
支持富語言聲音事件以及多情感的高擬人語音生成,例如笑聲、語氣詞等,以及不同情感表現的高擬人語音生成。
-
靈活應用廣泛:適用于多種應用場景,如智能客服、有聲讀物、車載導航、教育輔導等,極大地拓寬了語音交互的可能性,提升用戶體驗的同時,也為企業智能化轉型提供了強大支持。
目前兩個模型均可在 ModelSpace 和 HuggingFace 上找到并下載。
我在Lab上按照 Github 二者的 README.md運行了。但是發現官方使用 Python 8 且 Pytorch都沒用上 Ver 2,所以我直接照著requirements.txt 在默認 Python 10 的 Lab 環境上運行:
SenseVoice
jupyter notebook
!pip install torch torchaudio modelscope huggingface huggingface_hub funasr numpy
from funasr import AutoModelmodel_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)
CosyVoice
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 torchaudiocosyvoice = 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></laughter><strong></strong>[laughter][breath]
output = cosyvoice.inference_instruct('在面對挑戰時,他展現了非凡的<strong>勇氣</strong>與<strong>智慧</strong>。', '中文男', '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分享我的學習心得,項目經驗和行業動態。如果你對某個領域感興趣,或者想要了解更多技術干貨,請關注我的賬號,一起成長!