Введение

Технология преобразования текста в речь (TTS) стала важнейшим достижением в области обработки естественного языка (NLP) и взаимодействия человека с компьютером. Эта технология позволяет компьютерам преобразовывать письменный текст в естественно звучащую речь.

Мы будем использовать библиотеку PyTorch для реализации архитектуры Tacotron 2, упомянутой в этой статье. Он предлагает единый подход, который сочетает в себе сильные стороны моделей последовательностей (таких как Tacotron) для генерации мел-спектрограмм из текста и модели WaveNet для генерации сигналов из спектрограмм.

Конвейер состоит из трех этапов

  1. Предварительная обработка текста: этапы подготовки и кодирования входных текстовых данных. Входные данные в модель Tacotron2 на следующем этапе должны быть обработаны соответствующим текстовым процессором.
  2. Создать спектрограмму (частотная область): модель Tacotron 2 используется для создания мел-спектрограммы из закодированного текста. Мел-спектрограммы получаются на основе величин кратковременного преобразования Фурье (STFT), но преобразуются для подчеркивания критических частот разборчивости речи и уменьшения акцента на высокочастотном шуме.
  3. Сгенерировать сигнал (временная область): предсказанные кадры мел-спектрограммы используются в качестве входных данных для модифицированного вокодера WaveNet. WaveNet принимает эти кадры мел-спектрограммы в качестве входных данных и генерирует соответствующие образцы сигналов, которые представляют речь.

Приведенный ниже код демонстрирует, как использовать Tacotron 2 с моделью WaveRNN из библиотеки torchaudio для преобразования текста в речь. Он использует обученные модели для обработки входного текста и генерации соответствующих речевых сигналов. Ниже приведено пошаговое объяснение кода:

  1. Импортируйте необходимые библиотеки
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 находится здесь.