Введение
Технология преобразования текста в речь (TTS) стала важнейшим достижением в области обработки естественного языка (NLP) и взаимодействия человека с компьютером. Эта технология позволяет компьютерам преобразовывать письменный текст в естественно звучащую речь.
Мы будем использовать библиотеку PyTorch для реализации архитектуры Tacotron 2, упомянутой в этой статье. Он предлагает единый подход, который сочетает в себе сильные стороны моделей последовательностей (таких как Tacotron) для генерации мел-спектрограмм из текста и модели WaveNet для генерации сигналов из спектрограмм.
Конвейер состоит из трех этапов
- Предварительная обработка текста: этапы подготовки и кодирования входных текстовых данных. Входные данные в модель Tacotron2 на следующем этапе должны быть обработаны соответствующим текстовым процессором.
- Создать спектрограмму (частотная область): модель Tacotron 2 используется для создания мел-спектрограммы из закодированного текста. Мел-спектрограммы получаются на основе величин кратковременного преобразования Фурье (STFT), но преобразуются для подчеркивания критических частот разборчивости речи и уменьшения акцента на высокочастотном шуме.
- Сгенерировать сигнал (временная область): предсказанные кадры мел-спектрограммы используются в качестве входных данных для модифицированного вокодера WaveNet. WaveNet принимает эти кадры мел-спектрограммы в качестве входных данных и генерирует соответствующие образцы сигналов, которые представляют речь.
Приведенный ниже код демонстрирует, как использовать Tacotron 2 с моделью WaveRNN из библиотеки torchaudio для преобразования текста в речь. Он использует обученные модели для обработки входного текста и генерации соответствующих речевых сигналов. Ниже приведено пошаговое объяснение кода:
- Импортируйте необходимые библиотеки
import torchaudio import torch import matplotlib.pyplot as plt import IPython.display
2. Загрузите пакет torchaudio.pipelines.Tacotron2TTSBundle
, содержащий все связанные компоненты; 1) текстовый процессор, 2) предварительно обученная модель Tacotron 2 и 3) вокодер WaveRNN.
bundle = torchaudio.pipelines.TACOTRON2_WAVERNN_PHONE_LJSPEECH
3. Получите из комплекта текстовый процессор, модель Tacotron 2 и вокодер WaveRNN.
processor = bundle.get_text_processor() tacotron2 = bundle.get_tacotron2().to(device) # Move model to the desired device vocoder = bundle.get_vocoder().to(device) # Move model to the desired device
4. Определите входной текст, который вы хотите преобразовать в речь:
text = " My first text to speech!"
5. Обработайте входной текст и сгенерируйте речь:
with torch.inference_mode(): processed, lengths = processor(text) processed = processed.to(device) # Move processed text data to the device lengths = lengths.to(device) # Move lengths data to the device spec, spec_lengths, _ = tacotron2.infer(processed, lengths) waveforms, lengths = vocoder(spec, spec_lengths)
6. Визуализируйте результаты с помощью matplotlib:
fig, [ax1, ax2] = plt.subplots(2, 1, figsize=(16, 9)) ax1.imshow(spec[0].cpu().detach(), origin="lower", aspect="auto") # Display the generated spectrogram ax2.plot(waveforms[0].cpu().detach()) # Display the generated waveform7. Play the generated audio using IPython.display.Audio IPython.display.Audio(waveforms[0:1].cpu(), rate=vocoder.sample_rate)
Таким образом, этот код демонстрирует процесс преобразования входного текста в речь с использованием Tacotron 2 с моделью WaveRNN. Текст обрабатывается, затем используется для прогнозирования кадров мел-спектрограммы с использованием модели Tacotron 2, и, наконец, вокодер WaveRNN генерирует соответствующие речевые сигналы. Сгенерированная спектрограмма и форма волны визуализируются, а звук воспроизводится с использованием функции отображения звука IPython.
Ссылка на полную версию блокнота Colab находится здесь.