🚀 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}
}