На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: RaD, nsh
  
> рекуррентная НС для распознавания речи
    Доброго времени суток. Стоит задача написать классификатор для кластеризации языка голоса.
    Языка всего 2. Английский и русский.
    Хотел спросить правильно ли я понял проблему и правильно ли двигаюсь в реализации.
    В качестве признаков использую 13 MFCC + 13 deriv MFCC + 13 deriv deriv MFCC. В качестве классификатора использую рекуррентную нейронную сеть типа LSTM. Архитектура сети: 39-100-2:
    39 - входных нейрона,
    100 - юнитов LSTM
    2 - выходных нейрона. Один отвечает за русский язык, второй за английский.
    Сформировал от разных дикторов по 10 часов ИКМ для каждого из языка. Получилось примерно по 150 файлов для каждого языка.
    Сформировал массив меток для обучения сети. [1 0] - если подаётся файл с русским языком, [0 1] - английский.
    Все файлы перед подачей перетасовываются.
    Далее делаю так:
    Подаю файл на сеть, прогоняю прямым ходом. Проверяю на сходимость. Если не сошлось: двигаюсь от конца к началу для каждого из признака MFCC + dMFCC + ddMFCC (метод обратного распространения ошибки).
    Другими словами, допустим для файла с русской речью, устанавливаю метку на выходе выставляю в [1 0] и прогоняю весь файл. После этого в обратном ходе делаю так
    Формирую дельту:
    ошибка -> выходной слой -> скрытый слой (LSTM)
    ошибка -> выходной слой -> скрытый слой (LSTM)
    ошибка -> выходной слой -> скрытый слой (LSTM)
    .
    .
    .
    ошибка -> выходной слой -> скрытый слой (LSTM)
    Коррекция весов.
    Далее беру следующий файл, допустим с английской речью выставляю метку на выходе в [0 1]
    и дальше как в прошлом случае:
    Формирую дельту:
    ошибка -> выходной слой -> скрытый слой (LSTM)
    ошибка -> выходной слой -> скрытый слой (LSTM)
    ошибка -> выходной слой -> скрытый слой (LSTM)
    .
    .
    .
    ошибка -> выходной слой -> скрытый слой (LSTM)

    и т.д. пока ошибки для всех файлов будут меньше заданного порога.
    Я правильно понимаю проблему?

    При реализации столкнулся с проблемой, что для одних файлов во время обучения ошибка уменьшается для других растёт. Допустим ели взять два файла, один с англ речью другой с русской, то для русского файла ошибка будет уменьшаться и идти на убыль, для английского напротив растёт, суммарная ошибка примерно равна 1, т.е. для одного языка уменьшается , для другого увеличивается.
    Не понимаю, где ошибка или что я делаю не так. В коде вроде ошибок нет, мне кажется где-то фундаментальная ошибка, т.е. я что-то не так понимаю и реализовал соответственно.
    Буду рад любой информации.
      Добрый день.

      Предполагаю 10 мс. не достаточно для того что бы оценить язык.
        Здравствуйте. Не понял, я не писал про 10 мс. Использую 20 мс. Этого мало ?
          Цитата Abraziv @
          Не понял, я не писал про 10 мс.

          13 mfcc беруться обычно с шагом в 10мс (перекрытие конечно же больше 10мс). С учётом дельт можно сказать что вы берёте не менее 30мс.

          Цитата Abraziv @
          Использую 20 мс. Этого мало ?

          я полагаю - да.
          можно попробовать увеличить тренировочную базу.
          можно попробовать распознавать только стабильные во времени звуки (гласные) и игнорировать тишину и слабые звуки.
          В этом случае 13 векторов будет достаточно и это положительно скажется во время тренировки нейронной сетью.
            Перед тренировкой удаляю молчания, оставляю только речь. Даже для выборки указанной мной обучение может продлиться больше месяца. Для двух языков одного скрытого слоя хватит? Сколько юнитов должно быть в скрытом слое ?
              Цитата
              Перед тренировкой удаляю молчания, оставляю только речь.

              осталось удалить звуки которые одинакого звучат на русском и английском (шипящие,взрывные и т.п.)
              Например можно попробовать анализировать только те участки где есть основной тон. Желательно избавить также от носовых, но это не просто...

              Цитата Abraziv @
              Даже для выборки указанной мной обучение может продлиться больше месяца

              сколько часов ваша база?

              Цитата Abraziv @
              Для двух языков одного скрытого слоя хватит? Сколько юнитов должно быть в скрытом слое ?

              Для распознавания гласных хватает одного скрытого слоя с 39-ю нейронами. 13->39->вых.
                Full Member, наконец-то пришёл специалист. Спасибо за ответ.
                Цитата
                Осталось удалить звуки которые одинакого звучат на русском и английском (шипящие,взрывные и т.п.)
                Например можно попробовать анализировать только те участки где есть основной тон. Желательно избавить также от носовых, но это не просто...

                Можете пнуть в книгу где описан этот ЦОС?
                Цитата
                сколько часов ваша база?

                Значит по 10 часов каждого языка.

                Сегодня ковырялся и обнаружил, что если фрейм MFCC увеличить до 500 мс, сеть начинает обучаться (сходиться), за 30 эпох средняя ошибка составила 0.25, дальше не стал смотреть, т.к. использовал для обучения всего 4 файла, два RU и два EN. Запустил со всей базой, завтра погляжу что там насчитает.
                Если использовать фрейм 20 мс, то сеть начинает английский принимать за русский (но не наоборот почему - то) и ошибка на выходном нейроне отвечающем за англ увеличивается.
                Я вот думаю, может ещё в качестве признака добавить производную между кадрами MFCC ???
                  Вообщем 200 мс хватает и с активационными функциями поиграться пришлось немного, особенно те что в выходном слое.
                  Попробую научить на всей 20 часовой базе используя веса полученные при обучении на 4 файлах.
                  Интересно, я порог выставил 0.01, хватит ли 0.05 ??? Просто долго ждать приходится.
                    Цитата Abraziv @
                    Full Member, наконец-то пришёл специалист

                    Я не специалист.

                    Цитата Abraziv @
                    10 часов каждого языка.

                    На мой взгляд это не много, хотя всё зависит от поставленной задачи.

                    Цитата Abraziv @
                    Можете пнуть в книгу где описан этот ЦОС?

                    По английски pitch. В интернет множество информации. Вот например основной тон двух дикторов наложенных друг на друга.
                    https://www.spsc.tugraz.at/PhD_Theses/proba...tracking-speech

                    Цитата Abraziv @
                    Сегодня ковырялся и обнаружил, что если фрейм MFCC увеличить до 500 мс

                    Возможно из-за преобаладания гласных на согласными. В целом такой подход не правильный, но опять же всё зависит от постановки задачи. Возможно вам подойдёт решение где преобразование Фурье берётся для участка 100-200мс.

                    Цитата Abraziv @
                    Я вот думаю, может ещё в качестве признака добавить производную между кадрами MFCC ???

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

                    Цитата Abraziv @
                    Интересно, я порог выставил 0.01, хватит ли 0.05 ??? Просто долго ждать приходится.

                    В той модели, что я указал, 50-100 подходов достаточно для получения годного результата.
                    По по факту всё завит от множества факторов, так что наверняка сказать нельзя.
                      Спасибо за ответ. Потихонечку просвещаюсь, набираюсь опыта.
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script Execution time: 0,0994 ]   [ 14 queries used ]   [ Generated: 16.08.17, 19:20 GMT ]