29
правок
Изменения
Мелкие исправления, добавлен параграф про Tacotron 2
<math>f(x_t) = sign(x_t) \frac{\ln(1+\mu|x_t|)}{\ln(1+\mu)}</math>,
где <math>\mu = 255</math> и <math>-1 < x_t < 1</math>, а затем кодирует сигнал как двузначное шестнадцатеричное число, который которое обозначает некоторый интервал на числовой прямой<ref name="mu law">[http://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-G.711-198811-I!!PDF-E&type=items/ "ITU-T Recommendation G.711"]</ref>. Обратное преобразование выбирает значение преобразованного сигнала <math>y_t=f(x_t)</math> из данного номера интервала и получает оценку исходного сигнала <math>\textbf{x}</math> следующим образом:
<math> f^{-1}(y_t) = sign(y_t)(1/\mu)((1+\mu)^{|y_t|}-1), -1 < y_t < 1</math>.
где <math>w</math> {{---}} используемое окно и <math>STFT(t, w)</math> {{---}} оконное преобразование Фурье.
Для восстановления исходного сигнала по его спектрограмме может быть использован алгоритм Гриффина-Лима<ref name="griffin-lim">D. Griffin and Jae Lim, "Signal estimation from modified short-time Fourier transform," ICASSP '83. IEEE International Conference on Acoustics, Speech, and Signal Processing, Boston, Massachusetts, USA, 1983, pp. 804-807, doi: 10.1109/ICASSP.1983.1172092.</ref>, который основан на минимизации средней квадратичной среднеквадратической ошибки между оконным преобразованием Фурье оцениваемого сигнала и имеющимся преобразованием в спектрограмме.
== Классы подходов к синтезу речи ==
'''Конкатенативный синтез''' (англ. concatenative synthesis) основывается на конкатенации предварительно записанных примеров человеческой речи в единую звуковую последовательность. Данный подход синтезирует наиболее естественную речь, но генерируемая речь часто содержит значительные отличия и ошибки по сравнению с человеческой речью. Примеры конкатенативного синтеза:
* '''Синтез с выбором''' (англ. unit selection synthesis) является самым используемым подходом конкатенативного синтеза и использует большую базу данных записанной речи. При создании базы данных записанные фразы могут делиться на различные звуковые единицы, такие, как фоны, дифоны, полуфоны, слоги, морфемы, целые фразы или предложения. При запуске алгоритм генерирует выходную звуковую волну с помощью выбора наилучшей последовательности звуковых единиц из базы данных. Данный выбор обычно реализован с помощью [[Дерево решений и случайный лес|дерева решений]]. Данный подход Синтез с выбором обеспечивает наиболее естественную речь, так как использует минимальную цифровую обработку сигналов. Недостатком подхода является необходимость в довольно большой базе данных звуков для достижения наибольшей естественности речи. Данный подход являлся самым популярным для общего класса задач синтеза речи, но в последнее время уступает по популярности параметрическому подходу. Примером использования синтеза с выбором является голосовой помощник Siri от Apple <ref name="apple">[https://machinelearning.apple.com/research/siri-voices/ Deep Learning for Siri’s Voice: On-device Deep Mixture Density Networks for Hybrid Unit Selection Synthesis.]</ref> и голосовой помощник Алиса от компании Яндекс <ref>[https://www.seonews.ru/analytics/optimization-2018-chto-nakhoditsya-pod-kapotom-u-alisy/ Optimization 2018: что находится «под капотом» у Алисы.]</ref>. Несмотря на то, что эти продукты используют глубокое обучение, их механизм синтеза речи основан на записанных примерах голоса.
* '''Дифонный синтез''' (англ. diphone synthesis) является частным случаем синтеза с выбором, который использует в качестве звуковых единиц дифоны (переход от звука к звуку). Подход использует только один образец каждого дифона. База данных дифонов при этом получается сравнительно небольшой. Например, немецкий язык содержит около 800 дифонов, а испанский {{---}} около 2500. При работе алгоритма просодия входной последовательности накладывается на дифоны в базе данных с помощью различных алгоритмов цифровой обработки сигналов. Данный алгоритм значительно уступает по качеству другим подходам и, кроме меньшего размера базы данных, не дает весомых преимуществ, из-за чего не снискал большой популярности.
[[Файл:wavenet.png|thumb|300px| Рисунок 2 — строение модели WaveNet <ref name="wavenet">Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, & Koray Kavukcuoglu. (2016). WaveNet: A Generative Model for Raw Audio. [https://arxiv.org/abs/1609.03499/ arXiv:1609.03499]</ref>]]
Полная структура модели WaveNet изображена на Рисунке 2. Модель на вход принимает закодированную мю-законом последовательность сигналов <math>\textbf{x}</math> и, опционально, некоторую дополнительную информацию, обозначаемую как вектор параметров <math>h</math>, а на выходе возвращает распределение вероятностей для параметров мю-закона, по которым можно восстановить сигнал. В случае использования модели для генерации речи по тексту, данный вектор <math>h</math> может содержать информацию о рассматриваемом тексте. Сама модель представляет собой набор из <math>K</math> [[Сверточные нейронные сети#Residual block | блоков с остаточной связью]], содержащих преобразование расширенной причинной свертки и функцию активации.
Функция активации при этом аналогична функции, предложенной в модели Gated PixelCNN <ref>Aaron van den Oord, Nal Kalchbrenner, Oriol Vinyals, Lasse Espeholt, Alex Graves, & Koray Kavukcuoglu. (2016). Conditional Image Generation with PixelCNN Decoders. [https://arxiv.org/abs/1606.05328/ arXiv:1606.05328]
<math>\textbf{y} = \tanh(W_{f, k} * \textbf{x} + V_{f,k}^T\textbf{h}) \odot \sigma(W_{g,k}*\textbf{x}+V_{g,k}^T\textbf{h})</math>,
где <math>V_{f,k}</math> {{---}} выученные параметры линейной проекции. В случае, когда размерность вектора <math>\textbf{h}</math> меньше, чем размерность <math>\textbf{x}</math>, можно использовать upsampling-преобразование сверточных сетей, чтобы получить вектор размерности, равной <math>\textbf{x}</math>, и использовать его вместо оригинального вектора <math>\textbf{h}</math>. При этом <math>V_{f,k}*\textbf{yh}</math> будет являться операцией свертки размера 1.
Самый известный пример применения WaveNet для синтеза речи является технология Google Ассистент, которая использует WaveNet для генерации голосов ассистентов на различных
наборами сверточных фильтров с размерностью <math>1, 2, \dots, K</math>. Эти фильтры моделируют локальную и контекстно-зависимую информацию (по аналогии с моделированием униграмм,
биграмм, вплоть до <math>K</math>-грамм). Выход сверточного уровня далее обрабатывается шоссейной сетью для дальнейшего выделения параметров. В конце CBHG
используется управляемый рекуррентный блок , который для выделения параметров, опираясь опирается на контекст перед рассматриваемым символом и после рассматриваемого символа.
Задача кодера заключается в извлечении последовательных параметров из текста. Его входом является последовательность символов, в которой каждый символ был закодирован one-hot
кодированием и объединен в единый непрерывный вектор. К данному входу применяется ряд нелинейных преобразований в виде сети с бутылочным горлышком (англ. bottleneck layer), что позволяет улучшить
обобщаемость сети и ускорить сходимость. Модуль CBHG преобразует выход нелинейных преобразований в итоговое представление текста, которая передается в декодер.
передается сети пост-обработки для генерации непосредственно звуковой волны.
В качестве сети пост-обработки используется модуль CBHG, описанный ранее. После этого спектрограмма звуковой волны передается на вход [[Синтез речи#Генерация звуковой волны | алгоритму Гриффина-Лима]], который генерирует итоговую звуковую волну. Модель Tacotron была значительно улучшена в последующей модификации Tacotron 2 <ref>Jonathan Shen, Ruoming Pang, Ron J. Weiss, Mike Schuster, Navdeep Jaitly, Zongheng Yang, Zhifeng Chen, Yu Zhang, Yuxuan Wang, RJ Skerry-Ryan, Rif A. Saurous, Yannis Agiomyrgiannakis, & Yonghui Wu. (2018). Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions. [https://arxiv.org/abs/1712.05884 arXiv:1712.05884].</ref>, которая переработала исходную архитектуру Tacotron и объединила её с вокодером на основе WaveNet. Данная модель способна синтезировать речь высокого качества, принимая на вход только текст, который необходимо озвучить<ref>[https://ai.googleblog.com/2017/12/tacotron-2-generating-human-like-speech.html Tacotron 2: Generating Human-like Speech from Text]</ref>.
== Проблемы ==