Tinh chỉnh mô hình văn bản‑sang‑giọng nói

Mô hình đa phương thức với Hugging Face

James Chapman

Curriculum Manager, DataCamp

Mục đích tinh chỉnh văn bản‑sang‑giọng nói

 

  • Học âm thanh ở ngôn ngữ/giọng mới
  • Áp dụng cho ngữ cảnh mới

Ví dụ: mô hình tiền huấn luyện tiếng Anh tổng quát ⇏ giọng nói tiếng Ý tự nhiên

bong bóng thoại tiếng Anh và tiếng Ý dạng tranh

Mô hình đa phương thức với Hugging Face

Mục đích tinh chỉnh văn bản‑sang‑giọng nói

Sơ đồ cách embedding người nói khớp trong pipeline sinh giọng nói

  • Embedding người nói + đặc trưng TTS → mô hình sinh
  • Chỉ thêm embedding người nói là chưa đủ nếu không tinh chỉnh
Mô hình đa phương thức với Hugging Face

Chuẩn bị bộ dữ liệu âm thanh

Bộ dữ liệu VoxPopuli: lời nói đã phiên âm cho 18 ngôn ngữ từ Nghị viện EU

from datasets import load_dataset
dataset = load_dataset("facebook/voxpopuli", "it", split="train", 
                       trust_remote_code=True)
print(dataset.features)
['audio', 'raw_text', 'normalized_text', 'gender', 'speaker_id', ... ]
  • Cần tiền xử lý audio + thêm embedding người nói:
speaker_model = EncoderClassifier.from_hparams(source="speechbrain/spkrec-xvect-voxceleb", 
                                       savedir="pretrained_models/spkrec-xvect-voxceleb")
Mô hình đa phương thức với Hugging Face

Tiền xử lý âm thanh

from transformers import SpeechT5Processor
processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts")


def prepare_dataset(example): audio = example["audio"] example = processor(text=example["normalized_text"], audio_target=audio["array"], sampling_rate=audio["sampling_rate"], return_attention_mask=False)
example["labels"] = example["labels"][0]
with torch.no_grad(): speaker_embeddings = speaker_model.encode_batch(torch.tensor(audio["array"])) speaker_embeddings = torch.nn.functional.normalize(speaker_embeddings, dim=2) example["speaker_embeddings"] = speaker_embeddings.squeeze().cpu().numpy() return example
dataset = dataset.map(prepare_dataset)
Mô hình đa phương thức với Hugging Face

Tham số huấn luyện

from transformers import Seq2SeqTrainingArguments


training_args = Seq2SeqTrainingArguments( per_device_train_batch_size=4,
gradient_accumulation_steps=8,
learning_rate=1e-5,
warmup_steps=500,
label_names=["labels"],
data_collator=data_collator )
Mô hình đa phương thức với Hugging Face

Ghép tất cả lại

model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts")
processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts")
vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan")

Trainer:

trainer = Seq2SeqTrainer(args=training_args, model=model,
    train_dataset=dataset["train"], eval_dataset=dataset["test"],
                         tokenizer=processor)

Chạy huấn luyện: trainer.train()

Mô hình đa phương thức với Hugging Face

Dùng mô hình mới

text = "se sono italiano posso cantare l'opera lirica"


speaker_embedding = torch.tensor(dataset[5]["speaker_embeddings"]).unsqueeze(0)
inputs = processor(text=text, return_tensors="pt")
speech = model.generate_speech(inputs["input_ids"], speaker_embedding, vocoder=vocoder)
make_spectrogram(speech)
Mô hình đa phương thức với Hugging Face

Dùng mô hình mới

Phổ âm tiếng Ý

Mô hình đa phương thức với Hugging Face

Ayo berlatih!

Mô hình đa phương thức với Hugging Face

Preparing Video For Download...