综合介绍
Llasa-3B是由香港科技大学音频实验室(HKUST Audio)开发的一个开源文本转语音(TTS)模型。该模型基于Llama 3.2B架构,经过细致调优,提供高质量的语音生成,不仅支持多种语言,还能实现情感表达和个性化语音克隆。Llasa-3B以其在自然语音合成方面的表现力和灵活性,吸引了众多研究人员和开发者的关注。
体验地址:https://huggingface.co/spaces/srinivasbilla/llasa-3b-tts
功能列表
- 文本转语音:将文字转换成自然流畅的声音。
- 语音克隆:仅需15秒的音频片段即可克隆特定人声,包括音色和情感。
- 多语言支持:支持中文和英语,旨在扩展到更多语言。
- 情感表达:能够在生成的语音中注入情感,提升语音的真实性。
- 多模型支持:提供 1B 和 3B 参数规模模型,未来还将推出 8B 模型
- 开放权重:所有模型均提供开放权重,开发者可直接使用或二次微调,支持 Transformers 和 vLLM 框架。
使用帮助
安装与环境准备
要使用Llasa-3B模型,首先需要准备好以下环境:
Python环境:建议使用Python 3.9或以上版本。
相关库:需要安装torch
, transformers
, xcodec2
等库。
conda create -n xcodec2 python=3.9
conda activate xcodec2
pip install transformers torch xcodec2==0.1.3
模型下载与加载
访问Hugging Face上的Llasa-3B页面,可以直接使用Hugging Face的模型下载功能:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import soundfile as sf
llasa_3b = 'HKUST-Audio/Llasa-3B'
tokenizer = AutoTokenizer.from_pretrained(llasa_3b)
model = AutoModelForCausalLM.from_pretrained(llasa_3b)
model.eval()
model.to('cuda') # 如果有GPU
文本转语音过程
- 准备文本:
- 输入你希望转换成语音的文本。
- 文本预处理:
- 使用特定的格式化文本来指导模型进行语音生成,如:
input_text = "这是一个测试文本,请转成语音。" formatted_text = f"<|TEXT_UNDERSTANDING_START|>{input_text}<|TEXT_UNDERSTANDING_END|>"
- 使用特定的格式化文本来指导模型进行语音生成,如:
- 生成语音:
- 将文本转换成模型可以理解的token:
chat = [ {"role": "user", "content": "Convert the text to speech:" + formatted_text}, {"role": "assistant", "content": "<|SPEECH_GENERATION_START|>"} ] input_ids = tokenizer.apply_chat_template(chat, tokenize=True, return_tensors='pt', continue_final_message=True) input_ids = input_ids.to('cuda')
- 生成语音token:
speech_end_id = tokenizer.convert_tokens_to_ids('<|SPEECH_GENERATION_END|>') outputs = model.generate(input_ids, max_length=2048, eos_token_id=speech_end_id, do_sample=True, top_p=1, temperature=0.8)
- 将文本转换成模型可以理解的token:
- 语音解码:
- 将生成的token转换回音频:
from xcodec2.modeling_xcodec2 import XCodec2Model model_path = "HKUST-Audio/xcodec2" Codec_model = XCodec2Model.from_pretrained(model_path).eval().cuda() generated_ids = outputs[0][input_ids.shape[1]:-1] speech_tokens = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) speech_ids = [int(token[4:-2]) for token in speech_tokens if token.startswith('<|s_') and token.endswith('|>')] speech_tokens_tensor = torch.tensor(speech_ids).cuda().unsqueeze(0).unsqueeze(0) gen_wav = Codec_model.decode_code(speech_tokens_tensor) sf.write("output.wav", gen_wav[0, 0, :].cpu().numpy(), 16000)
- 将生成的token转换回音频:
语音克隆
- 录制或准备15秒左右的原声音频:
- 使用录音设备或提供现有的音频文件。
- 语音克隆过程:
- 将原声音频编码成模型可以使用的代码书:
prompt_wav = sf.read("your_source_audio.wav")[0] # 必须是16kHz采样率 vq_code_prompt = Codec_model.encode_code(torch.from_numpy(prompt_wav).unsqueeze(0).unsqueeze(0).cuda())
- 在文本生成过程中加入音频提示:
speech_ids_prefix = [f"<|s_{id}|>"foridin vq_code_prompt[0, 0, :].tolist()] chat = [ {"role": "user", "content": "Convert the text to speech:" + formatted_text}, {"role": "assistant", "content": "<|SPEECH_GENERATION_START|>" + ''.join(speech_ids_prefix)} ] # 后续步骤与文本转语音相同
- 将原声音频编码成模型可以使用的代码书:
注意事项
- 确保音频输入格式正确,Llasa-3B仅支持16kHz的音频。
- 模型的表现受输入文本和音频质量的直接影响,确保输入的质量。