Introdução geral
O Llasa-3B é um modelo de conversão de texto em fala (TTS) de código aberto desenvolvido pelo Laboratório de Áudio da Universidade de Ciência e Tecnologia de Hong Kong (HKUST Audio). O modelo é baseado na arquitetura Llama 3.2B, que foi cuidadosamente ajustada para oferecer geração de fala de alta qualidade que não só suporta vários idiomas, mas também permite a expressão emocional e a clonagem de fala personalizada. O Llasa-3B atraiu a atenção de muitos pesquisadores e desenvolvedores por sua expressividade e flexibilidade na síntese de fala natural.
Lista de funções
- conversão de texto em falaConversão de texto em um som natural e suave.
- clonagem de falaO que é: Apenas 15 segundos de filmagem de áudio são necessários para clonar uma voz humana específica, incluindo timbre e emoção.
- Suporte a vários idiomasO sistema suporta os idiomas chinês e inglês, com o objetivo de expandir para outros idiomas.
- expressão afetivaA capacidade de injetar emoção no discurso gerado aumenta a autenticidade do discurso.
- Suporte a vários modelosModelos de escala paramétrica 1B e 3B disponíveis, com modelos 8B a serem introduzidos no futuro
- ponderação abertaTodos os modelos oferecem pesos abertos que os desenvolvedores podem usar diretamente ou ajustar duas vezes, e são compatíveis com as estruturas Transformers e vLLM.
Usando a Ajuda
Instalação e preparação do ambiente
Para usar o modelo Llasa-3B, primeiro você precisa preparar o ambiente a seguir:
Ambiente PythonPython 3.9 ou superior é recomendado.
Bibliotecas relacionadasRequer a instalação detocha
, transformadores
, xcodec2
etc. biblioteca.
conda create -n xcodec2 python=3.9
conda activate xcodec2
pip install transformers torch xcodec2==0.1.3
Download e carregamento de modelos
Visite Hugging Face emPágina do Llasa-3BVocê pode usar diretamente a função de download de modelos do Hugging Face:
from transformers import AutoTokenizer, AutoModelForCausalLM
importar torch
importar soundfile como sf
llasa_3b = 'HKUST-Audio/Llasa-3B'
tokenizer = AutoTokenizer.from_pretrained(llasa_3b)
model = AutoModelForCausalLM.from_pretrained(llasa_3b)
model.eval()
model.to('cuda') # Se houver uma GPU
Processo de conversão de texto em fala
- Texto preparado::
- Digite o texto que você deseja converter em fala.
- Pré-processamento de texto::
- Use um texto formatado específico para orientar o modelo de geração de fala, por exemplo:
input_text = "Este é um texto de teste, por favor, converta para fala." formatted_text = f"{input_text}"
- Use um texto formatado específico para orientar o modelo de geração de fala, por exemplo:
- Gerar discurso::
- Converta o texto em um token que o modelo possa entender:
chat = [ {"role": "user", "content": "Convert the text to speech:" + formatted_text}, {"role": "assistant", "content": ""} ] input_ids = tokenizer.apply_chat_template(chat, tokenize=True, return_tensors='pt', continue_final_message=True) input_ids = input_ids.to('cuda')
- Gerar um token de voz:
speech_end_id = tokenizer.convert_tokens_to_ids('') outputs = model.generate(input_ids, max_length=2048, eos_token_id=speech_end_id, do_sample=True, top_p=1, temperature=0.8)
- Converta o texto em um token que o modelo possa entender:
- decodificação de voz::
- Converte o token gerado de volta para áudio:
from xcodec2.modelling_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('')] 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)
- Converte o token gerado de volta para áudio:
clonagem de fala
- Grave ou prepare cerca de 15 segundos da trilha sonora original::
- Use um dispositivo de gravação ou forneça um arquivo de áudio existente.
- processo de clonagem fonética::
- Codificação das frequências de som originais em um livro de códigos que o modelo pode usar:
prompt_wav = sf.read("your_source_audio.wav")[0] # deve ter uma taxa de amostragem de 16kHz vq_code_prompt = Codec_model.encode_code(torch.from_numpy(prompt_wav).unsqueeze(0).unsqueeze(0).cuda())
- Adicionar dicas de áudio ao processo de geração de texto:
speech_ids_prefix = [f""foridin vq_code_prompt[0, 0, :].tolist()] chat = [ {"role": "user", "content": "Convert the text to speech:" + formatted_text}, {"role": "assistant", "content": "" + ''.join(speech_ids_prefix)} ] # As etapas subsequentes são as mesmas que para a conversão de texto em fala
- Codificação das frequências de som originais em um livro de códigos que o modelo pode usar:
advertência
- Certifique-se de que o formato de entrada de áudio esteja correto, pois o Llasa-3B suporta apenas áudio de 16kHz.
- O desempenho do modelo é diretamente afetado pela qualidade do texto e do áudio de entrada, garantindo a qualidade da entrada.