Pull to refresh

Comments 21

UFO just landed and posted this here
Жаль, что по реализации идеи только предположения))) Но если вдруг будут ссылки — кидайте, буду благодарен…
нужно разбираться в нейросетях и работать со звуком на компьютере на самом низком уровне, это высокый уровень знаний и еще более редкое сочитание знаний для одного человека. А создать рабочую технологию распознавания это потянет на серьезный бизнес и вам просто так никто рассказывать про это не будет. Спс и за такую статью.
Я имел в виду, что есть масса научных статей. Очень многие учёные публикуют идеи и технологии, способные стать частью патента и принести прибли, только для того, чтобы застолбить за собой приоритет. Такая уж это особая каста. И вовсе не обязательно кидать ссылки именно на коммерчески применимые идеи — ссылки на обычное научное графоманство тоже «катят».

Да и потом, ссылка на патент тоже сойдёт.
«Спс и за такую статью. „

А что конкретно не понравилсь? что можно сделать лучше?
Несколько замечаний:
1. Нейросетям лучше давать спектр
2. Главная проблема не понять, какой звук в данном окне, а понять, где заканчивается один и начинается второй
3. Примеры для обучения — зависимы от диктора. Просто так от этой зависимости не избавиться, тут думать надо
1. согласен, идея, представленная в статье, этого не исключает, даже подразумевает
3. по моим наблюдениям, нейросети довольно хорошо с этим справляются

2. Собственно, об этом и статья. Я плохо объясняю? Смысл предлагаемой схемы именно в том, что можно вообще не определять, где занчивается один звук и начинается второй.
3 — по моим наблюдениям, нейросети с этим справляются только если очень крепко подумать над препроцессингом данных.

2 — ну я так понял, что предлагается бежать окном по звуку, и там где срабатывает один из распознавателей — ставить метку, что найден такой-то набор фонем? Если да — то в этом случае будет огромное количество ложных срабатываний, и я не уверен, что на этом фоне выйдет отфильтровать правильный результат.
3. Вейвлеты и кепстр никто не отменял.

2. На изолированных звуках (т.е. при предварительной сегментации вручную) я добивался нулевого числа ложных распознаваний. При этом сегментрованый звук я в обязательном порядке двигал по окну. Это даёт основания предполагать, что и в речевом потоке всё будет ок:)
>я добивался нулевого числа ложных распознаваний

При каком количестве классов, на которые может быть разделен тестируемый участок? И какой был размер обучающей выборки, какой размер валидационной?
3.1. «При каком количестве классов, на которые может быть разделен тестируемый участок?»

Не очень понял. Вы имеете в виду размер окна? А если окна, то входного или выходного? Не забывайте, что выход при этой схеме — это вектор. Система отсчётов синала.

Если речь о выходном окне, то тестировал от 4 до 32 выходов. На каких-то лучше, на каких-то хуже, но работает на всех

Если речь идёт о входном окне, то я тоже разные размеры перепробовал.

Но, как вы верно заметили, чёртик есть:

3.2 И какой был размер обучающей выборки, какой размер валидационной?

Небольшой. пять примеров на аллофон, порядка двадцати аллофонов одного типа.

валидационная выборка — ещё по одному-по два примера на аллофон, плюс ещё пяток «левых» аллофонов, другого типа, для контроля переобучения.

Ещё один минус — проверял на гласных, гласные вообще лучше распознаются.

Ну дык это ж научная работа, а не попытка построить коммерческий распознаватель речи.

3.3. Тут фокус не в том, что я использовал именно такую схему с векторным выходом ИНС, а в том, какую ИНС для этой задачи подобрать. Обычный перцептрон погрешность меньше 20 процентов не даёт, при хорошем варианте — 40, и то, нужно десяток перцептронов обучить, чтобы один из них дал приличный результат.

А я добился запредельных показателей точности. Конечно, в реальных условиях результат может быть хуже, но есть предположение, что точность в «тепличных» условиях кореллирует с точностью в «боевых». Но это уже тема другой статьи :)
>Не очень понял. Вы имеете в виду размер окна?

Я имею в виду размерность выхода системы классификации: ей на вход дают звук, на выходе она говорит, какая именно это фонема (или звук, или набор фонем — не суть важно). Так вот, сколько «вариантов ответа» есть у системы?

>валидационная выборка — ещё по одному-по два примера на аллофон, плюс ещё пяток «левых» аллофонов, другого типа, для контроля переобучения.

Ну, это конечно очень мало. Даже ошибка в 20% может спокойно пройти незамеченной при таком числе контрольных образов.

>Ну дык это ж научная работа, а не попытка построить коммерческий распознаватель речи.

К научной работе нужно подходить очень строго, в первую очередь, в плане корректности и полноты экспериментов.

>А я добился запредельных показателей точности. Конечно, в реальных условиях результат может быть хуже, но есть предположение, что точность в «тепличных» условиях кореллирует с точностью в «боевых».

Точность отнюдь не запредельная. Собственно, к решению основной задачи вы еще не подошли, это только подготовительный этап. И да — точность кореллирует, но, боюсь, в реальных условиях она будет порядка 50%, если не меньше.
3.1.1. Я имею в виду размерность выхода системы классификации: ей на вход дают звук, на выходе она говорит, какая именно это фонема (или звук, или набор фонем — не суть важно). Так вот, сколько «вариантов ответа» есть у системы?

«на выходе она говорит, какая именно это фонема» Не совсем так, на выходе — сигнал с рисунка 2, в виде системы отсчётов.

А уже по этому сигналу можно легко определить, какая эта фонема.

размерность зависит от числа отсчётов, описывающих выходной сигнал с рисунка два. Это то, что я назвал «выходным окном». Размер выходного окна — прозвольный, но меньше двух смысла нет. Система тестировалась на размерностях выходного сигнала 4,8,12,16,32

Поясню на примере.Вот допустим, у нас ИНС с 32 вЫходами. Допустим, её надо обучить распознавать второй (красный) сигнал с рис. 2. Значит, мы бьём этот сигнал на 32 отсчёта и подаём при обучении на выход нейронной сети (а далее — Backpropagation и т.п.). При этом смещаем его по окну (вместе с входным кепстром) от -31 до +31 отсчёта/сегмента(так это обычно в забугорной литературе кличут)

3.1.2 «Ну, это конечно очень мало. Даже ошибка в 20% может спокойно пройти незамеченной при таком числе контрольных образов.»

А сколько надо?

У меня есть сомнение, что 20% ошибки может пройти мимо. Из-за размерности выходной классификации.

Смотрим. Мы «скормили» 5 разных аллофонов ИНС при обучении, по 5 вариаций на каждый аллофон. И ещё по одной вариации оставили на проверку.

Если бы ИНС на выходе выдавала вероятность того, что данный звук принадлежит такому-то классу, то нужна контрольная выборка в сотни примеров, чтобы оценить точность, согласен. При этом точность пропорциональна количеству контрольных примеров.

Но мы здесь имеем ИНС, которая реагиует образом на образ. Практически, преобразует высоковариативный речевой образ в низковариативный.

Когда я говорю, что добился запредельной точности, я имею в виду, что выходной образ соответствует ожиданию с погрешностью не более 10^7%

Перцептрон в этом смысле меньше 9% погрешности не даёт.

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

Если бы вариативность речевого сигнала была бы маленькой, можно было бы предположить, что ИНС просто запомнила нужные образы. Но перцептрон (а моё решение чуть изменённый перцептрон, и обладает всеми его недостатками) очень чувствителен к изменению размеров образа, так как при изменении масштаба происходит сдвиг отсчётов по входам, на что перцептронные конструкции реагируют очень плохо.

3.1.3 «Точность отнюдь не запредельная. Собственно, к решению основной задачи вы еще не подошли, это только подготовительный этап. И да — точность кореллирует, но, боюсь, в реальных условиях она будет порядка 50%, если не меньше.»

Это имеет смысл обсуждать только после ваших комментариев пунктов 3.1.1 и 3.1.2.
>Не совсем так, на выходе — сигнал с рисунка 2, в виде системы отсчётов.

На выходе на рис. 2 — степень принадлежности буквам «б», «а», и «к». Так вот — сколько этих букв всего было? Какова полная размерность выхода понятно, это не принципиально. Важно именно число букв.

>Когда я говорю, что добился запредельной точности, я имею в виду, что выходной образ соответствует ожиданию с погрешностью не более 10^7%

Если у вас нигде нет ошибки — то это исчерпывающее решение задачи распознавания речи, причем очень простым способом. Соответственно, у меня есть вполне естественные сомнения на этот счет :)
Для того, чтобы их подтвердить или развеять, расскажите, какие именно слова вы использовали для обучения и тестирования?
3.1.1 «На выходе на рис. 2 — степень принадлежности буквам «б», «а», и «к». Так вот — сколько этих букв всего было? Какова полная размерность выхода понятно, это не принципиально. Важно именно число букв.»

одна инс — одна буковка. для ИНС труЪ с парллельным режимом работы самое оно.

з.ы. лично мне кажется намного важнее, какая эта буковка)))
Согласные сложнее распознавать. разница в точности — на порядки.

3.1.2 «Если у вас нигде нет ошибки — то это исчерпывающее решение задачи распознавания речи, причем очень простым способом. Соответственно, у меня есть вполне естественные сомнения на этот счет :)»

может и да, а может и нет. надо собраться с силами, построить«боевой» распознаватель и посмотреть))

насчёт слов — а какая разница, поясните пожалуйста.
>одна инс — одна буковка

А что делать в ситуации, когда ИНС «а» говорит «узнала!», и ИНС «о» на том же окне говорит «узнала!»?

>насчёт слов — а какая разница, поясните пожалуйста.

Если у вас все время было одно и то же слово, или слова одной длины — то сеть в качестве ключевого признака могла использовать вовсе не спектрограмму, а расстояние от тишины в начале/конце слова до каждой точки.
По наблюдениям на небольшой выборке, мой вариант обладает отличной различаемостью. Даже аллофоны одной фонемы различаются. Единственный вариант — это запихнуть разные аллофоны в один распознаваемый класс, тогда ИНС «сечёт» что это одно и тоже.

и ещё, по поводу двойных срабатываний. Во-первых, не везде ИНСетью будет выдана одинаковая вероятность. Во-вторых, это задача контекстного анализа, а данная ИНС позволяет высококлассный контекстный анализ, вообще заглядение.

По поводу слов одной длины — я не слова подавал, а звуки, ручным способом извлечённые из слов.
Длина звуков (даже в рамках одного аллофона) иногда различалась четырёхкратно.
Да и один и тот же звук подавался на ИНС со всеми возможными вариантами сдвигов, включая варианты, обрезающие начало и конец. Так что гипотезу о том, что ИНС использует расстояние как признак чего-нибудь, считаю сомнительным.
>По наблюдениям на небольшой выборке, мой вариант обладает отличной различаемостью

Не факт, что это имеет существенное значение. Разделить 3 буквы — это совсем не то же самое, что 30.

>Во-первых, не везде ИНСетью будет выдана одинаковая вероятность

Выходы сети далеко не всегда можно рассматривать как вероятность, в реальных задачах куда чаще бывают ситуации, когда это неверно.

>Во-вторых, это задача контекстного анализа

Да, это поможет. Вопрос только, насколько именно это поможет.

>Длина звуков (даже в рамках одного аллофона) иногда различалась четырёхкратно

Ну тогда, если все, что вы предлагаете, будет работать при числе классов, соответствующем реальной речи, то собственно распознавание речи можно считать решенным. Вопрос, будет ли.
ок, сделаю распознавалку- сообщу результаты
3.1.1. Я имею в виду размерность выхода системы классификации: ей на вход дают звук, на выходе она говорит, какая именно это фонема (или звук, или набор фонем — не суть важно). Так вот, сколько «вариантов ответа» есть у системы?

«на выходе она говорит, какая именно это фонема» Не совсем так, на выходе — сигнал с рисунка 2, в виде системы отсчётов.

А уже по этому сигналу можно легко определить, какая эта фонема.

размерность зависит от числа отсчётов, описывающих выходной сигнал с рисунка два. Это то, что я назвал «выходным окном». Размер выходного окна — прозвольный, но меньше двух смысла нет. Система тестировалась на размерностях выходного сигнала 4,8,12,16,32

Поясню на примере.Вот допустим, у нас ИНС с 32 вЫходами. Допустим, её надо обучить распознавать второй (красный) сигнал с рис. 2. Значит, мы бьём этот сигнал на 32 отсчёта и подаём при обучении на выход нейронной сети (а далее — Backpropagation и т.п.). При этом смещаем его по окну (вместе с входным кепстром) от -31 до +31 отсчёта/сегмента(так это обычно в забугорной литературе кличут)

3.1.2 «Ну, это конечно очень мало. Даже ошибка в 20% может спокойно пройти незамеченной при таком числе контрольных образов.»

А сколько надо?

У меня есть сомнение, что 20% ошибки может пройти мимо. Из-за размерности выходной классификации.

Смотрим. Мы «скормили» 5 разных аллофонов ИНС при обучении, по 5 вариаций на каждый аллофон. И ещё по одной вариации оставили на проверку.

Если бы ИНС на выходе выдавала вероятность того, что данный звук принадлежит такому-то классу, то нужна контрольная выборка в сотни примеров, чтобы оценить точность, согласен. При этом точность пропорциональна количеству контрольных примеров.

Но мы здесь имеем ИНС, которая реагиует образом на образ. Практически, преобразует высоковариативный речевой образ в низковариативный.

Когда я говорю, что добился запредельной точности, я имею в виду, что выходной образ соответствует ожиданию с погрешностью не более 10^7%

Перцептрон в этом смысле меньше 9% погрешности не даёт.

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

Если бы вариативность речевого сигнала была бы маленькой, можно было бы предположить, что ИНС просто запомнила нужные образы. Но перцептрон (а моё решение чуть изменённый перцептрон, и обладает всеми его недостатками) очень чувствителен к изменению размеров образа, так как при изменении масштаба происходит сдвиг отсчётов по входам, на что перцептронные конструкции реагируют очень плохо.

3.1.3 «Точность отнюдь не запредельная. Собственно, к решению основной задачи вы еще не подошли, это только подготовительный этап. И да — точность кореллирует, но, боюсь, в реальных условиях она будет порядка 50%, если не меньше.»

Это имеет смысл обсуждать только после ваших комментариев пунктов 3.1.1 и 3.1.2.
1) пример с коартикуляцие на примере «мама» ошибочен. Либо вы неверно понимаете суть этого явления, либо для эффектности иллюстрации пошли на подмену понятий. Перестановка фонем, и перестановка кусков аудиофайла это вообще совершенно никак не связанные между собой действия. Нельзя просто в произвольном месте порвать аудио-поток и переставить его местами — место разрыва (сшитое с другим разрывом при перестановке) это участок аудиопотока с заведомо принципиально другим частотным спектром. Содержащий явным образом много высокочастотных компонент (и это относится практически к любому аудиопотоку который таким вот способом будет порезан и переставлен местами, не только к звукам речи). Так что разумеется у вас при такой операции (вырезки кусков аудиопотока в аудиоредакторе) может получиться вообще всё что угодно (в смысле фонемы распознанной слухом), но к коартикуляции это не имеет вообще никакого отношения. Для корректной иллюстрации коартикуляции таким методом придется преизрядно повозиться — аккуратно разметить начало и конец слогов «ма-ма» (для чего провести анализ по производным спектральных амплитуд во времени), и сделать резку аудиопотока только по точкам в которых производные амплитуд спектра нормально сшиваются (без скачка). Но если вы так сделаете для «мама», то как раз ничего и не получите — останется то же самое «мама». Плавали, знаем.

2) У вас явно имеются иллюзии по поводу того, что представление «образ->образ» имеет какое-либо преимущество по сравнению с классическим «образ->один выход». Штука в том, что все ваши выходы этого выходного образа базируются на одном и том же предыдущем слое(слоях) нейросети. И таким образом, совершенно не являются независимыми. Вы же трактуете их как полностью независимые величины, и именно из этого полагаете что мэтчинг образа с неким эталоном означает дико малую величину ошибки. Если бы все выходы нейросети были взаимно независимы — вы были бы правы, но увы, они явно взаимозависимы по самой математике нейросети…

3) Задача распознавания речи это намного более комплексная задача нежели то что делаете вы. А именно, нужно чтобы речь устойчиво и надежно распознавалась и на уровне любых (произвольных) шумов (причем даже когда амплитуда и спектр этих шумов примерно такие же как у речи, включая ситуацию когда шумом является речь другого человека — т.е. два одновременно звучащих голоса на фоне еще и внешних шумов, с чем человек отлично справляется а ваша система завяжется узлом без вариантов), была дикторонезависима, и т.п. Умение вычленять речь из общего аудиопотока (в том числе из параллельно звучащей речи другого ненужного человека) это то что обязательно должно быть заложено в системе.

4) Зачастую понять речь человека в принципе можно только прослушав какой-то участок речи. Особенно это касается акцентов. Т.е. по какому-то конкретному куску речь, распознав (более-менее уверенно) лишь часть фонем этого образца, только после этого — становится возможным распознать и другие фонемы. И частотность тут вообще не при чем. То как «исковерканы» эти первые распознанные фонемы — дает мозгу информацию о том как могут быть «исковерканы» прочие фонемы, и повторный проход уже позволяет (используя на входе доп инфу по уже распознанным фонемам) распознать остальное. По сути именно по этой причине основные последние прорывы в распознавании речи (когда существенно уменьшали % ошибок) использовали двунаправленные рекуррентные нейросети. В вашем подходе этой возможности нет by design.

5) Ваши надежды на постобработку выхода нейросети (фильтрация по частотности фонем и прочее) совершенно безосновательны. Т.к. в типовой ситуации требуется распознать пару-тройку фраз (а то и слов), а отнюдь не чтение «войны и мира», так что ни о какой частотной фильтрации в реальном применении говорить не приходится вообще.

6) Есть очень большое кол-во ситуаций, где распознавание речи принципиально невозможно без понимания смысла распознанного. Примеров можно найти немало, из статей на гиктаймс (да простят меня авторы за отсутствие (с) ) могу вспомнить скажем такие примеры: «сегодня пойду в библиотеку и возьму там схнижк» (плохо/неразборчиво произнесено «книжку» с зашумлением внешним шумом), человек гарантированно распознает «книжку» по контексту, а программа запросто и не сомневаясь влепит «снежок». Или пресловутая «скрипка-лиса/скрип-колеса», и т.п. И никакие алгоритмы работы с фонемами вам не помогут обойти такого рода ситуации. Которые, учитывая шум и прочее в реальном кейсе, довольно массовые.

7) И уже из своего личного опыта работы по этой теме, не претендуя на истину в последней инстанции а сугубо как моя личная позиция. Попытки работать с кепстром (равно как и любые прочие подходы которые в явном виде работают с амплитудами спектра как таковыми) в корне неверны и никогда не дадут красивого решения. Потому что человек не учитывает амплитуды спектра. Вообще. Пруф — это тот простой факт, что специально не обучаясь распознавать шепот (родители прямо скажем не много общаются с ребёнком шепотом) отлично научается распознавать речь сказанную шепотом. А шепот это не что иное, как шумогенератор (шумовое шипение связок, без каких-либо частотных и фазовых динамик во времени — шум он и есть шум, близко к белому шуму) пропущенный через амплитудно-частотный фильтр голосового тракта. Если мы шум (для простоты — белый) пропускаем через некий амплитудно-частотный фильтр меняющий свои характеристики во времени — то на выходе будет тоже шум, но с АЧХ этого шума уже не белым а имеющим какую-то динамику. Никаких фазовых зависимостей там не по определению, а амплитудные зависимости — есть, но лишь в смысле общей огибающей (производной амплитуд по времени). И вот именно эту информацию мозг реально и использует для анализа. Т.е. для меня очевидно что именно эта информация и является реальным носителем сигнала, а на что наложена эта динамика, т.е. что является «несущей» — шум (шепота) или же вокализованные периодические колебания связок имеющие конкретный спектр, не имеет вообще никакого значения (и именно поэтому у человека отлично получается распознавать любого диктора, независимо от АЧХ связок/тракта этого диктора). При этом если мы в любой форме используем именно амплитуды спектра а не их производные во времени, то неизбежно привязываем систему к конкретным дикторам/примерам обучения (т.е. автоматически делаем её плохо работающей в куче других случаев). Таким образом, если хотим универсальную систему распознавания фонем (но не речи, см. выше) — то нужно выкинуть на свалку все голосовые базы типа TIMIT, и собрать базу слов произнесенных шепотом. Где уже не будет всех этих вариаций (дикторозависимости, шумозависимости, и т.п.). И вот на этом уже строить новые алгоритмы.

Итого :).
В качестве самого начала ликбеза по теме то что вы пробуете это хорошо. Но возьмите уже хотя-бы TIMIT, чтобы нормальная база для обучения была. И если у вас есть иллюзии что получится в одиночку сделать что-то серьезное в практическом смысле — то лучше не теряйте время. Задача на порядки сложнее и многограннее, нежели вы представляете (судя по вашей статье и комментариям), не в обиду.
Sign up to leave a comment.

Articles