🚀 EMOVA語音分詞器HF
EMOVA語音分詞器HF是用於訓練EMOVA系列模型的官方語音分詞器。它採用語義 - 聲學解耦設計,不僅能實現視覺、語言和語音模態間的無縫全模態對齊,還支持靈活的語音風格控制,包括說話人、情感和音高。
✨ 主要特性
- 離散語音分詞器:包含基於SPIRAL的語音到單元(S2U) 分詞器,用於捕捉輸入語音的語音和聲調信息,然後通過有限標量量化器(FSQ) 將其離散化為離散語音單元;還有基於VITS的單元到語音(U2S) 去分詞器,用於從語音單元重建語音信號。
- 語義 - 聲學解耦:為了使語音單元與大語言模型的高語義嵌入空間無縫對齊,我們選擇將輸入語音的語義內容和聲學風格解耦,僅使用前者來生成語音令牌。
- 雙語分詞:EMOVA語音分詞器使用相同的語音碼本支持中文和英文語音分詞。
- 靈活的語音風格控制:由於語義 - 聲學解耦,EMOVA語音分詞器支持24種語音風格控制(即2個說話人、3種音高和4種情感)。更多詳細信息請查看使用方法。
📦 安裝指南
克隆此倉庫並使用conda創建EMOVA虛擬環境。我們的代碼已在NVIDIA A800/H20 GPU和Ascend 910B3 NPU服務器上驗證,其他設備也可能適用。
- 初始化conda環境:
git clone https://github.com/emova-ollm/EMOVA_speech_tokenizer.git
conda create -n emova python=3.10 -y
conda activate emova
- 安裝所需的包(注意,GPU和NPU的安裝指令不同):
pip install -U pip setuptools
cd emova_speech_tokenizer
pip install -e .
pip install -e .[npu]
💻 使用示例
基礎用法
import random
from transformers import AutoModel
import torch
model = AutoModel.from_pretrained("Emova-ollm/emova_speech_tokenizer_hf", torch_dtype=torch.float32, trust_remote_code=True).eval().cuda()
wav_file = "./examples/s2u/example.wav"
speech_unit = model.encode(wav_file)
print(speech_unit)
emotion = random.choice(['angry', 'happy', 'neutral', 'sad'])
speed = random.choice(['normal', 'fast', 'slow'])
pitch = random.choice(['normal', 'high', 'low'])
gender = random.choice(['female', 'male'])
condition = f'gender-{gender}_emotion-{emotion}_speed-{speed}_pitch-{pitch}'
output_wav_file = f'./examples/u2s/{condition}_output.wav'
model.decode(speech_unit, condition=condition, output_wav_file=output_wav_file)
⚠️ 重要提示
在使用前,請先完成安裝步驟!
📚 詳細文檔
屬性 |
詳情 |
模型類型 |
用於訓練EMOVA系列模型的語音分詞器 |
訓練數據 |
未提及 |
📄 許可證
本項目採用Apache-2.0許可證。
📚 引用
如果您發現我們的模型、代碼或論文有幫助,請考慮引用我們的論文並給我們點個星!
@article{chen2024emova,
title={Emova: Empowering language models to see, hear and speak with vivid emotions},
author={Chen, Kai and Gou, Yunhao and Huang, Runhui and Liu, Zhili and Tan, Daxin and Xu, Jing and Wang, Chunwei and Zhu, Yi and Zeng, Yihan and Yang, Kuo and others},
journal={arXiv preprint arXiv:2409.18042},
year={2024}
}