AI个人学习
和实操指南
讯飞绘镜

Llasa 1~8B:高品质语音生成和克隆的开源文本转语音模型

综合介绍

Llasa-3B是由香港科技大学音频实验室(HKUST Audio)开发的一个开源文本转语音(TTS)模型。该模型基于Llama 3.2B架构,经过细致调优,提供高质量的语音生成,不仅支持多种语言,还能实现情感表达和个性化语音克隆。Llasa-3B以其在自然语音合成方面的表现力和灵活性,吸引了众多研究人员和开发者的关注。

Llasa 1~8B:实现高质量语音生成和克隆的开源文本转语音模型-1

体验地址:https://huggingface.co/spaces/srinivasbilla/llasa-3b-tts


 

功能列表

  • 文本转语音:将文字转换成自然流畅的声音。
  • 语音克隆:仅需15秒的音频片段即可克隆特定人声,包括音色和情感。
  • 多语言支持:支持中文和英语,旨在扩展到更多语言。
  • 情感表达:能够在生成的语音中注入情感,提升语音的真实性。
  • 多模型支持:提供 1B 和 3B 参数规模模型,未来还将推出 8B 模型
  • 开放权重:所有模型均提供开放权重,开发者可直接使用或二次微调,支持 Transformers 和 vLLM 框架。

 

使用帮助

安装与环境准备

要使用Llasa-3B模型,首先需要准备好以下环境:

Python环境:建议使用Python 3.9或以上版本。
相关库:需要安装torchtransformersxcodec2等库。

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

文本转语音过程

  1. 准备文本
    • 输入你希望转换成语音的文本。
  2. 文本预处理
    • 使用特定的格式化文本来指导模型进行语音生成,如:
      input_text = "这是一个测试文本,请转成语音。"
      formatted_text = f"<|TEXT_UNDERSTANDING_START|>{input_text}<|TEXT_UNDERSTANDING_END|>"
      
  3. 生成语音
    • 将文本转换成模型可以理解的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)
      
  4. 语音解码
    • 将生成的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)
      

语音克隆

  • 录制或准备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的音频。
  • 模型的表现受输入文本和音频质量的直接影响,确保输入的质量。
CDN1
未经允许不得转载:首席AI分享圈 » Llasa 1~8B:高品质语音生成和克隆的开源文本转语音模型

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们
zh_CN简体中文