Вы действительно разбираетесь в фонетических особенностях?

искусственный интеллект

Аннотация: Целью этой статьи является подробное описание процесса преобразования речи в акустические характеристики, а также подробное описание применения различных акустических характеристик в разных моделях.

Эта статья опубликована в сообществе HUAWEI CLOUD.«Вы действительно понимаете принципы, лежащие в основе особенностей речи? 》, Автор: Белая лошадь пересекает Пинчуань.

Речевые данные часто используются для задач искусственного интеллекта, но речевые данные не могут быть напрямую введены в модель для обучения, как задачи с изображениями, и в долгосрочной области нет очевидных изменений характеристик.Данные во временной области обычно состоят из выборки 16 КБ. скорость, то есть 16 000 точек выборки в секунду.Прямой ввод точек выборки во временной области для обучения требует большого объема данных, и трудно достичь практических результатов. Следовательно, речевая задача обычно состоит в том, чтобы преобразовать речевые данные в акустические характеристики в качестве входных или выходных данных модели. Таким образом, эта статья относится к подробному описанию процесса преобразования речи в акустические функции и применению различных акустических функций в разных моделях.

Прежде всего, нам очень полезно понять, как возникает речь. Люди производят звук через речевой тракт, и форма речевого тракта определяет, какой звук воспроизводится. Форма голосового тракта включает язык, зубы и т. д. Если форма может быть точно известна, то мы можем точно описать получившуюся фонему. Форма речевого тракта обычно выявляется по огибающей кратковременного спектра мощности речи. Как получить спектр мощности или получить спектральную огибающую на основе спектра мощности, является характеристикой речи.

1. Диаграмма временной области

Рисунок 1: График аудио во временной области

На диаграмме во временной области речевой сигнал непосредственно представлен его временной волной.На рисунке 1 выше показана диаграмма во временной области звука, открытого с помощью Adobe Audition, что указывает на то, что точность квантования этой речевой волны составляет 16 бит. трудно увидеть больше полезной информации. Но если мы увеличим масштаб сцены 100 мс, мы можем получить изображение, показанное на рисунке 2 ниже.

Рисунок 2: Кратковременная диаграмма звука во временной области

Из приведенного выше рисунка видно, что в краткосрочном временном измерении форма сигнала во временной области речи имеет определенный период, и разное произношение часто соответствует разным изменениям периода.Поэтому в краткосрочной области мы можем пройти форма волны через преобразование Фурье преобразуется в карту частотной области, и периодические характеристики звука наблюдаются для получения полезных характеристик звука.

Кратковременное преобразование Фурье (STFT) является наиболее классическим методом частотно-временного анализа. Так называемое кратковременное преобразование Фурье, как следует из названия, предназначено для выполнения преобразования Фурье над кратковременным сигналом. Поскольку форма речевого сигнала демонстрирует определенную периодичность только в короткой временной области, используемое кратковременное преобразование Фурье может более точно наблюдать изменение речи в частотной области. Схематическая диаграмма реализации преобразования Фурье выглядит следующим образом:

Рисунок 3: Схематическая диаграмма преобразования Фурье из временной области в частотную.

На приведенном выше рисунке показано, как преобразовать сигнал во временной области в спектрограмму в частотной области с помощью преобразования Фурье, но сложность алгоритма самого преобразования Фурье составляет O (N ^ 2), что трудно применить на компьютере. в приложении используется быстрое преобразование Фурье (БПФ). Среди них аргументированное доказательство преобразования относится к [Знанию] (zhuanlan.zhihu.com/p/31584464)

2. Получите аудиофункции

Из вышеупомянутого вы можете узнать конкретный метод и принцип получения характеристик звука в частотной области, а также то, как преобразовать исходный звук в звуковые характеристики обучения модели, что по-прежнему требует многих вспомогательных операций. Конкретный процесс показан на рисунке 4 ниже:

Рис. 4. Блок-схема преобразования аудио в аудиофункции

(1) Предварительный акцент

Предыскажение фактически пропускает речевой сигнал через фильтр верхних частот:

H(z) = 1 - \mu z^{-1}H(z)=1−µz−1

Где \muμ мы обычно принимаем за 0,97. Цель предыскажения состоит в том, чтобы усилить высокочастотную часть, сделать спектр сигнала плоским, сохранить его во всей полосе частот от низкой до высокой частоты и использовать то же отношение сигнал/шум для нахождения спектра. . В то же время это также устранение влияния голосовых связок и губ в процессе возникновения, компенсация подавляемой голосовой системой высокочастотной части речевого сигнала, выделение высокочастотной форманты. .

pre_emphasis = 0.97
emphasized_signal = np.append(original_signal[0], original_signal[1:] - pre_emphasis * original_signal[:-1])

(2) Обрамление

Поскольку преобразование Фурье требует, чтобы входной сигнал был стационарным, бессмысленно выполнять преобразование Фурье для нестационарного сигнала. Из вышеизложенного мы можем знать, что речь неустойчива в течение длительного времени, а устойчива в течение короткого времени имеет определенную периодичность, то есть речь не является устойчивой в макроскопическом представлении.При движении рта характеристики сигнала изменяются. . . . Однако, с микроскопической точки зрения, за относительно короткий промежуток времени рот движется не так быстро, речевой сигнал можно считать устойчивым, и его можно вырезать для преобразования Фурье, поэтому операция кадрирования необходима. , то есть перехват кратковременных голосовых клипов. 

Так какой длины кадр? Длина рамы должна соответствовать двум условиям:

  • С точки зрения макросъемки он должен быть достаточно коротким, чтобы внутрикадровый сигнал был стационарным. Как упоминалось ранее, изменение формы рта является причиной нестабильности сигнала, поэтому форма рта не может существенно меняться в течение одного кадра, то есть длина одного кадра должна быть меньше длины одной фонемы. При нормальной скорости речи продолжительность фонемы составляет около 50–200 миллисекунд, поэтому обычно считается, что длина кадра составляет менее 50 миллисекунд.
  • С микроскопической точки зрения, оно должно включать в себя достаточное количество периодов вибрации, потому что преобразование Фурье предназначено для анализа частоты, а частоту можно проанализировать, только повторив ее достаточное количество раз. Основная частота речи составляет около 100 Гц для мужских голосов и 200 Гц для женских голосов, что составляет 10 мс и 5 мс при преобразовании в периоды. Поскольку кадр содержит несколько периодов, обычно он составляет не менее 20 миллисекунд.

Уведомление:Покадровый перехват не делится строго на сегменты, а имеет понятие сдвига кадра, то есть определяется размер окна кадра, и каждый раз, когда оно перемещается в соответствии с размером сдвига кадра, кратковременное аудио клипы перехватываются Обычно размер сдвига кадра 5-10мс, размер окна обычно в 2-3 раза больше сдвига кадра или 20-30мс. Причина, по которой задается метод сдвига кадра, в основном связана с последующей операцией управления окнами.
Конкретный процесс оформления выглядит следующим образом:

Рисунок 5: Схематическая диаграмма звукового кадрирования

(3) Добавить окно

Перед выполнением преобразования Фурье кадр извлеченного сигнала должен быть «оконным», то есть умноженным на «функцию окна», как показано на следующем рисунке:

Рисунок 5: Схематическая диаграмма аудио-окна

Цель работы с окнами состоит в том, чтобы амплитуда кадра сигнала уменьшалась до 0 на обоих концах. Градиент хорош для преобразования Фурье, он может сделать пики на спектре тоньше и не так легко склеить (этот термин называется уменьшением спектральной утечки). Решение состоит в том, что кадры снимаются не вплотную друг к другу, а частично перекрывают друг друга. Разница во времени между начальными позициями двух соседних кадров называется сдвигом кадра.

Обычно мы используем окно Хэмминга для работы с окнами и умножаем каждый кадр после кадра на окно Хэмминга, чтобы увеличить непрерывность левого и правого концов кадра. Предполагая, что кадрированный сигнал равен S(n), n=0,1,…,N-1, NS(n), n=0,1,…,N−1, N — размер кадра, затем умножить за окном Хэмминга:

W(n,a)=(1-a)-a\times \cos(\frac{2\pi n}{N-1}), \quad 0 \leq n \leqN-1W(n,a)= (1−a)−a×cos(N−12πn​),0≤n≤N−1

Различные значения a будут давать разные окна Хэмминга, которые обычно принимаются равными 0,46.

S^{'}(n) = S(n) \times W(n, a)S′(n)=S(n)×W(n,a)

Реализованный код:

# 简单的汉明窗构建
N = 200
x = np.arange(N)
y = 0.54 * np.ones(N) - 0.46 * np.cos(2*np.pi*x/(N-1))

# 加汉明窗
frames *= np.hamming(frame_length)

(4) Быстрое преобразование Фурье БПФ

Поскольку при преобразовании сигнала во временной области обычно трудно увидеть характеристики сигнала, его обычно преобразуют в распределение энергии в частотной области для наблюдения, и различные распределения энергии могут представлять характеристики различной речи. После умножения на окно Хэмминга каждый кадр также должен пройти быстрое преобразование Фурье, чтобы получить распределение энергии на спектре. Частотный спектр каждого кадра получается путем выполнения быстрого преобразования Фурье покадрового оконного сигнала. Принцип реализации быстрого преобразования Фурье уже был представлен ранее, поэтому я не буду подробно его описывать. Подробное обоснование и рекомендации по реализации см. в книге Знание БПФ (zhuanlan.zhihu.com/p/31584464)
Уведомление: Здесь звук возвращается быстрым преобразованием Фурье в виде комплексного числа, где действительная часть представляет собой амплитуду частоты, а мнимая часть представляет собой фазу частоты.

Существует множество библиотек, содержащих функции БПФ, вот лишь некоторые из них:

import librosa
import torch
import scipy

x_stft = librosa.stft(wav, n_fft=fft_size, hop_length=hop_size,win_length=win_length)
x_stft = torch.stft(wav, n_fft=fft_size, hop_length=hop_size, win_length=win_size)
x_stft = scipy.fftpack.fft(wav)

Чтобы получить амплитудный и фазовый спектр звука, необходимо возвести в квадрат модуль спектра, чтобы получить спектр мощности речевого сигнала, который часто называют линейным спектром в синтезе речи.

(5) Мел-спектр

Диапазон частот, который может слышать человеческое ухо, составляет 20-20000 Гц, но человеческое ухо не имеет линейной связи восприятия с единицей масштаба Гц. Например, если мы привыкаем к тону 1000 Гц, если частота тона увеличивается до 2000 Гц, наши уши могут только воспринимать, что частота немного увеличилась, но не могут воспринимать, что частота увеличилась вдвое. Таким образом, обычную шкалу частот можно преобразовать в шкалу частот Мел, чтобы сделать ее более соответствующей слуховому восприятию людей.Эта взаимосвязь отображения показана в следующей формуле:

мел(f)=2595×log10​(1+700f​)

f=700 \times (10^{\frac{m}{2595}}-1)

f=700×(102595м−1)

В ЭВМ преобразование линейных координат в координаты Мела обычно осуществляется с помощью полосового фильтра.Как правило, используется треугольный полосовой фильтр.Треугольный полосовой фильтр выполняет две основные функции: сглаживание спектра, И устранить роль гармоник, выделив форманты исходного голоса. Принципиальная схема конструкции треугольного полосового фильтра показана ниже:

Рисунок 6: Принципиальная схема конструкции треугольного полосового фильтра.

Это схематическая диаграмма строения неравнополочного треугольного полосового фильтра, потому что человек слабее воспринимает высокочастотную энергию, поэтому запасенная энергия низкочастотной значительно больше, чем высокочастотной. Строительный код треугольного полосового фильтра выглядит следующим образом:

low_freq_mel = 0
high_freq_mel = (2595 * numpy.log10(1 + (sample_rate / 2) / 700))  # Convert Hz to Mel
mel_points = numpy.linspace(low_freq_mel, high_freq_mel, nfilt + 2)  # Equally spaced in Mel scale
hz_points = (700 * (10**(mel_points / 2595) - 1))  # Convert Mel to Hz
bin = numpy.floor((NFFT + 1) * hz_points / sample_rate)
fbank = numpy.zeros((nfilt, int(numpy.floor(NFFT / 2 + 1))))

for m in range(1, nfilt + 1):
    f_m_minus = int(bin[m - 1])   # left
    f_m = int(bin[m])             # center
    f_m_plus = int(bin[m + 1])    # right

    for k in range(f_m_minus, f_m):
        fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])
    for k in range(f_m, f_m_plus):
        fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])
filter_banks = numpy.dot(pow_frames, fbank.T)
filter_banks = numpy.where(filter_banks == 0, numpy.finfo(float).eps, filter_banks)  # Numerical Stability
filter_banks = 20 * numpy.log10(filter_banks)  # dB

Затем просто умножьте линейный спектр на треугольный полосовой фильтр и возьмите логарифм, чтобы получить мел-спектр. Обычно извлечение звуковых характеристик задач синтеза речи обычно здесь, а мел-спектр как звуковая характеристика в основном удовлетворяет потребности некоторых задач синтеза речи. Но при распознавании речи необходимо сделать еще одно дискретное косинусное преобразование (DCT-преобразование), потому что разные фильтры Mel имеют пересечения, поэтому они связаны, мы можем использовать DCT-преобразование, чтобы удалить эти корреляции для повышения точности распознавания, но эта корреляция необходимо сохранить при синтезе речи, поэтому при распознавании необходимо выполнить только преобразование DCT. Подробное объяснение принципа преобразования DCT может относиться к Zhihu DCT (zhuanlan.zhihu.com/p/85299446)

Если вы хотите узнать больше о технологии искусственного интеллекта, вы можете посетить раздел искусственного интеллекта HUAWEI CLOUD, В настоящее время существует шесть практических лагерей, включая программирование искусственного интеллекта Python, которые каждый может изучить бесплатно. (Ссылка на шесть настоящих боевых лагерей:Су.модель arts.club/QQ B9)

Нажмите «Подписаться», чтобы впервые узнать о новых технологиях HUAWEI CLOUD~