Спикер о предстоящем вебинаре:
Для моделей распознавания речи, обученных с частичным привлечением учителя, недавно было показано, что метод псевдо-разметки эффективен при обучении как CTC (Connectionist Temporal Classification), так и seq2seq (Sequence-to-Sequence) функций потерь. В наших исследованиях мы предложили улучшенный итеративный вариант метода псевдо-разметки (Iterative Pseudo-Labeling, IPL), который учит одну модель с помощью псевдо-меток, итеративно перегенерированных самой моделью во время обучения.
Однако предложенный алгоритм IPL переобучается на лингвистическую модель. Чтобы избежать такого вида переобучения, мы далее рассмотрим вариант алгоритма (Language-Model-Free IPL, slimIPL), который итеративно перегенерирует транскрипции для речи с помощью hard меток, то есть без участия лингвистической модели. slimIPL эффективно работает как для CTC, так и для seq2seq функций потерь. В сравнении с существующими методами обучения с частичным привлечением учителя и без учителя IPL и slimIPL не только упрощают процесс обучения, но и имеют близкое к топовым методам или state-of-the-art качество на LibriSpeech датасете при большом и малом числе обучающих данных с разметкой.
Запись прошедшего вебинара: https://youtu.be/wab7Hd2IK48
Презентация: https://drive.google.com/file/d/1LbM7Oq-9hOr4hG7Izl3vgIbaszaIVvKu/view?usp=sharing
Задать вопрос Татьяне: antares@fb.com
(00:00:00) (Начало записи)
Николай Михайловский: Приветствую всех, кто собрался. Я Николай Михайловский, генеральный директор компании «НТР», и я вас приветствую на очередном научно-техническом вебинаре, который «НТР» проводит вместе с Высшей IT-школой Томского университета. С нами сегодня Татьяна Лихоманенко, Facebook AI Research, и она будет нам такую прекрасную тему, как псевдоразметка в распознавании речи, рассказывать. Тема безумно интересная. Фейсбучная группа в этой области очень сильная. Поэтому ожидаю, что нам расскажут что-то очень важное. Татьяна, вам слово.
Татьяна Лихоманенко: Спасибо большое. Да, надеюсь, что будет интересно, может быть, что-то полезное люди для себя вынесут из моего рассказа.
Николай Михайловский: Да, Татьяна, вас сразу перебью. У нас есть здесь QNA, у нас есть чат, как удобнее, чтобы вам задавали вопросы? Вам удобнее по ходу или по частям, или в конце, как правильнее?
Татьяна Лихоманенко: В принципе, можно посередине, то есть в любой момент, если появляется вопрос, то вы останавливайте, задавайте вопросы, буду рада отвечать. Наверное, так лучше.
Николай Михайловский: У нас участники будут в основном писать вопросы в QNA и в чат. Сразу отвечу на тот вопрос, который задан в QNA. У нас все записи вебинаров, кроме тех, которые нельзя опубликовать, все записи вебинаров публикуются на сайте. Если вы регистрировались с нами, вы получите e-mail со ссылками. Также через некоторое время, не мгновенно, уже будет транскрипт того, что происходило, то есть мы расшифровываем, публикуем у себя на сайте, пожалуйста. Вопросы, пожалуйста, отправляйте в чат и в QNA. Я думаю, мы с Татьяной в некий момент посередине приостановимся. Татьяна, можете где-то в середине своего рассказа выбрать время для того, чтобы на накопившиеся вопросы ответить? А тогда уже…
Татьяна Лихоманенко: Да, давайте так.
Николай Михайловский: Потому что останавливать каждый раз из-за вспыхивающего вопроса – это будет, возможно, много остановок, а так мы остановимся один раз посередине, ответим на вопросы, и двинемся дальше. Хорошо?
Татьяна Лихоманенко: Хорошо, да, не проблема. Договорились.
Николай Михайловский: Спасибо. Все. Окончательно передаю вам слово.
Татьяна Лихоманенко: Спасибо. Да, сегодня я расскажу… На самом деле, в абстракте было написано, что будет покрыто две статьи, но я захватила еще одну статью и решила сделать такой большой рассказ длинной истории, как мы работали над задачей улучшения распознавания речи с помощью дополнительных неразмеченных данных, и собственно сам подход псевдоразметки.
Спасибо всем моим коллегам и контрибьюторам, здесь перечислены основные контрибьюторы двух статьей, которые, основные, я буду рассказывать, это работа нашей команды по распознаванию речи.
В интернете очень много аудио- и видеоданных без транскрипции. Конечно, хотелось бы их как-то использовать для того, чтобы улучшить распознавание речи. Но и помимо этого, понятно, что есть куча разных языков, на которых доступны только транскрибированные данные маленького количества, числа, нужно разрабатывать методы, которые бы хорошо работали с маленьким количеством размеченных данных. Собственно один из способов – это использовать неразмеченные данные.
Встает вопрос, насколько хорошо мы можем, каким образом мы можем использовать неразмеченные данные, какое улучшение мы можем ожидать от нашей системы. Конечно же, становится вопрос, если мы говорим об Интернете и о большом количестве неразмеченных часов, которое доступно, в принципе, для любого человека, которое он может скачать, вопрос становится, как найти простой алгоритм и к тому же эффективный, чтобы не использовать большое количество моделей, не использовать большое количество перебора параметров, и собственно обучить саму модель очень быстро.
(00:04:52)
Сегодня сначала начну собственно введение в распознавание речи. Я не знаю, какая аудитория, поэтому немножко расскажу, как устроено распознавание речи. Дальше мы поговорим про датасет Libri-Light, который также наша группа примерно полтора года назад опубликовала. Это большой дата-сет, с помощью которого собственно можно ставить эксперименты сейчас, так называемый largescale, и смотреть, что же будет при этом.
Дальше мы поговорим о псевдоразметке, и начнем мы с классической псевдоразметки, с teacher-student так называемой, «учитель и обучающийся». Дальше перейдем собственно к предложенным методам итеративного обучения псевдоразметкой и собственно к варианту, когда мы можем даже убрать лингвистическую модель. Но это собственно вы поймете из введения и дальнейшего описания, что же это все означает.
Речь устроена немножко по-другому, в отличие от картинок, распознавания картинок или машинного перевода. У вас есть входные данные, это аудио, это волны. Дальше мы считаем, что у нас есть акустическая модель, акустическая модель может моделироваться многими разными вариантами. Сейчас самый частый подход – это в виде акустической модели вы ставите нейронную сеть. Как правило, ваше аудио предобрабатывается и извлекается представление, Фурье-преобразование, собственно краткие промежутки времени вы считаете преобразования Фурье, получаете признаковые описания ваших данных и дальше эти признаковые описания собственно являются входом в нейронную сеть.
Ранее использовали скрытые марковские модели, но и часто довольно часто тоже это используется. Но скрытые марковские модели не являются так называемым end-to-end обучением, поэтому сейчас активно развивается направление нейронных сетей.
Помимо акустической модели, на самом деле, мы можем также обучить отдельно на текстовом корпусе лингвистическую модель, потому что во время обучения акустической модели лингвистическая модель, конечно, учится, но не настолько сильно, чем если бы мы переучили на текстовом корпусе.
Очень похожим образом, как в машинном переводе, когда мы пытаемся найти самую лучшую гипотезу, в распознавании речи также используется Beam Search Decoder, задача которого собственно состоит в объединении предсказаний акустической модели и лингвистической модели, сказать, что же транскрипция должна быть для текущего аудио.
Для акустической модели мы можем работать на разном уровне представления токенов, а именно, мы можем говорить, что наша модель будет предсказывать для фреймов нашего аудиосигнала фонемы – буквы, части слов, word pieces на английском, или слова, напрямую слова.
Качество системы измеряется с помощью ошибки Board Error Rate, ошибка, которая нам говорит, сколько слов мы неправильно распознали. Она считается как расстояние Левенштейна, в частности, мы смотрим, сколько удалений, вставок и замен нужно сделать для того, чтобы получить из предсказанной транскрипции исходную транскрипцию.
Псевдоразметка сама по себе появилась очень давно. Это довольно известный уже долгое время метод, который люди использовали, и он работает очень хорошо, и очень много результатов и в картинках, в распознавании картинок, в классификации, и в машинном переводе. Также оно использовалось очень давно, это уже было лет 30-40 назад, в распознавании речи.
Идея очень простая. У вас есть размеченные данные, вы обучаете акустическую модель, а после этого, объединяя с лингвистической моделью и декодером, вы предсказываете преднеразмеченные данные и получаете собственно предсказание, ожидаемую транскрипцию для ваших неразмеченных данных. А далее вы просто говорите: «Давайте теперь будем использовать эти неразмеченные данные с теми метками, которые нам предсказала предыдущая модель. Теперь давайте обучим собственно новую модель, которая, будем надеяться, будет сильно лучше.
(00:09:55)
Это довольно хорошо работает сейчас, но раньше при распознавании речи результаты были спорные очень, они не давали сильного улучшения по сравнению со стандартными методами скрытых марковских моделей при маленьком числе данных, потому что просто, как мы увидим сегодня, не хватало большого количества данных. Раньше эксперименты проводились, 40 лет назад, понятно, на очень маленьких датасетах и, соответственно, не могли увидеть эффект того, что это действительно работает.
Кроме того, встает вопрос, насколько хорошей должна быть эта ваша модель для того, чтобы сделать эту псевдоразметку и ее использовать. Может быть, ваша модель очень плохая, и ваша псевдоразметка очень плохая, и, может быть, ваша модель не может ничего с этим сделать, не может как-то использовать это и улучшить саму себя.
Стоит обратить внимание, здесь каждый раз учится модель с нуля. Это типичный пример teacher-student подхода, который очень часто используется, практически везде, и очень часто люди учат с нуля модель. Соответственно, это очень долго, потому что вам надо переобучить заново модель.
Пару слов про largescale dataset, большие данные и все, что с этим связано. Наверное, многие слышали про такую важную вещь, как данные, и большие, то, что они должны быть большие. Понятно, что мы знаем, что при увеличении данных, сейчас, в принципе, очень много статей показывает, что если больше данных вы используете в обучении, то лучше ваша модель и будет. Конечно, есть какой-то предельный порог, возможно, в этом. В некоторых статьях от Google, например, они демонстрировали, что есть этот порог, начинаем мы его немножко щупать, уже почти дотянулись до этого. Но для распознавания речи больших датасетов особо сильно не было. Известный датасет – это LibriSpeech, который состоит из 1000 часов, еще есть Switch Board и Fisher, которые примерно 2000 часов. Но, в общем, не так много размеченных данных есть.
Но проблемой еще с распознаванием речи было то, что не было никакого большого корпуса стандартизированного, с которым бы люди стали проводить эксперименты и писать статьи и сравниваться друг с другом. Этой целью занялись частично мои коллеги, и подготовили датасет, который… Это английский язык, конечно, как самый первый распространенный сначала сделать. Есть проект LibriVox, который включает в себя аудиокниги, и ребята взяли этот корпус и сделали необходимую очистку данных, необходимую сортировку по спикерам. В итоге после всей предобработки данных и сегментирования на участки, удаления молчания во время речи, у вас там исходное аудио – это несколько минут, может быть, десятки минут, конечно, на таких данных обучаться не очень комфортно. В итоге получилось, что у нас есть 68 тысяч часов без транскрипций, очень много спикеров. Здесь указано еще среднее число часов на каждого спикера, что является довольно хорошей статистикой, на самом деле.
Помимо этого они подготовили собственно стандартизацию протоколов, как нужно обучаться и тестироваться, для разных сеттингов, в том числе для полного обучения без учителя, для обучения с частичным учителем и для обучения с различными данными. Соответственно, сделали части данных, где у вас есть размеченных данных только 10 минут, 1 час или 10 часов. Все это было важно сделать, в том числе, для того, чтобы как-то тестироваться.
Здесь очень важно отметить, что мы сохранили LibriSpeech, валидационный и тестовый датасеты, то есть все сравнения, которые до этого делались на LibriSpeech, который практически сейчас топовый датасет, на котором люди пытаются сравнивать свои системы, в research community, конечно, вы можете легко теперь сравнивать все ваши результаты, которые вы получаете на loud (00:14:56) source сеттинге со всеми предыдущими результатами, которые люди получали при обучении просто только с размеченными данными.
(00:15:08)
Теперь давайте перейдем к псевдоразметке собственно. Благодаря этому датасету получилось получить первые результаты, хорошие результаты, то, что псевдоразметка отлично работает, и с ней можно получать сильно лучше модель.
Чтобы это поисследовать, начнем с простого варианта, когда у вас есть модель, вы обучили ее на своих размеченных данных, после этого используете внешнюю лингвистическую модель и акустическую модель в декодере и генерируете псевдоразметку для своих неразмеченных данных. После этого обучаете новую модель, с нуля, на полном корпусе размеченных и неразмеченных данных, где для неразмеченных данных используются сгенерированная псевдоразметка.
Соответственно, нам было интересно узнать, что происходит в зависимости от того, какую функцию потерь мы используем. В распознавании речи чаще всего используется CTC Loss функция так называемая, а также популярность благодаря, в том числе, многим работам из Google приобрел Seq2Seq, последовательность-последовательность, очень похожий на то, что есть в машинном переводе, когда вы пытаетесь в акустическую модель включить частично обучение лингвистической модели. Отличаются СТС и Seq2Seq в том, что СТС у вас, скажем так, будет возвращать вероятность для каждого фрейма, в то время как Seq2Seq будет вам сам определять, в том числе, и какое количество выходных токенов у вас должно быть.
Мы рассматривали два семейства моделей нейронных сетей, это конволюционные и трансформеры. Трансформеры очень популярны и в последнее время в распознавании речи было показано, что трансформеры очень хорошо работают, и можно получить самые лучшие модели с их помощью.
Здесь встает вопрос, какую лингвистическую модель можно еще использовать. Мы использовали самую простую, это в распознавании речи обычно используются энграммные лингвистические модели, так как они очень быстрые, это всего лишь hash map, вы туда лезете и смотрите, какое у вас значение для текущей энграммы предсказания лингвистической модели. Это работает очень быстро и, в общем, очень эффективно.
Мы, соответственно, исследуем разные семейства моделей, разные семейства функций потерь и смотрим, что же это нам в итоге даст. Мы получили, что… Здесь на графике представлено, левый график, левая часть графика – это когда вы обучаете только на размеченных данных, а вторая часть графика – это когда вы добавляете вот этот большой корпус, больше чем 60 тысяч часов дополнительно, с псевдоразметкой, и что вы получаете в итоге, если вы обучите теперь новую модель на совмещенных данных. Получаем, что для разных моделей и для функций потерь мы для всех статистически наблюдаем, что у нас сильно уменьшился разрыв между функциями потерь и между архитектурами. Становится неважно, какую функцию потерь вы используете, какую архитектуру вы используете, модели все дают примерно очень близкие результаты, в то время как если вы обучаете только на маленьком корпусе, 1000 часов, в сравнении с 60 тысячами часов, вы видите разброс сильный в зависимости от того, какой вы loss используете и от того, какую архитектуру вы используете.
Второй интересный результат получили, что модель, которая будет обучена с дополнительными неразмеченным данными и псевдоразметкой, будет иметь ошибку 4,9%, такую же, как на тот момент, понятно, на момент публикации, была самая лучшая модель на LibriSpeech. Это при этом мы получаем без использования лингвистической модели. Если же мы добавим лингвистическую модель, то мы еще лучше почти на 1%.
Важно отметить, что если мы говорим про продакшн и использование декодера в продакшне, это будет некоторая существенная часть вычислений.
(00:20:04)
Поэтому очень было бы интересно и здорово иметь модель, которая в итоге получает финальное качество очень близкое, такое, как state of the art, но при этом мы не используем декодер. Здесь и здорово, так интересно получилось, что мы можем с дополнительными данными взять и получить такое же качество, как и с обучением только на размеченных, но при этом убрать декодер из финального предсказания, ускоряя тем самым продакшн.
Далее становится вопрос, а действительно ли нам нужно использовать все 60 тысяч часов, может быть, мы как раз таки достигли этой границы больших данных, и нам не нужно столько часов использовать-то? Здесь показан график, что́ происходит с вашей моделью, когда вы начинаете увеличивать число данных с псевдоразметкой. Мы видим, что да, по части LibriSpeech, который содержит очень чистые данные, мы немножко улучшаемся все равно еще, да, 10 тысяч и 60 тысяч, может быть, не так важно, но для части валидации, где у нас шумная речь, мы видим, что больше данных – лучше модель. Это строгое улучшение. Зависит, конечно, от того, какие у вас данные опять-таки, но в случае шумных данных, что чаще является приложением, больше данных – лучше модель.
Интересный эксперимент, если мы посмотрим, что́ происходит, если мы просто обучимся на псевдоразметке без использования размеченных данных. В этом случае мы видим, что модель тоже хорошо обучается, она получает лучшие результаты, чем использование исходных размеченных данных. Это говорит о том, что наша разметка очень хорошая. Той моделью, которая обучена на размеченных данных, мы генерируем эту псевдоразметку. Она, конечно, может быть уже хорошая, но благодаря использованию большего числа данных мы можем еще лучше получить модель.
Здесь этот эксперимент показывает, в том числе, что благодаря большому количеству часов мы наблюдаем эффект того, что модель начинает выучивать дополнительные акценты, дополнительные шумы и прочее. Благодаря разнообразию акустических данных теперь мы можем быть более стабильны или распознавать больше вещей, чем раньше, если мы только используем размеченные данные.
Здесь после этого эксперимента встал вопрос, а в действительности что мы выучиваем с дополнительными данными. Очень сложно разграничить акустическое знание и лингвистическое. Что мы в действительности выучили? Может быть, мы выучили просто лингвистическую модель внутри нашей модели, и акустика нам никак не помогла, может быть, нам нужен просто текстовый корпус, и каким-то образом лучше выучить лингвистическую модель.
Чтобы ответить на этот вопрос, давайте используем наблюдение, что если мы просто перемешаем слова в предложении, то мы уничтожаем в какой-то степени лингвистическую структуру. Давайте попробуем просто перемешать нашу речь, посмотреть, что будет.
Мы сделали три независимых эксперимента, собственно из-за того, что у вас разный способ постановки эксперимента дает разную ошибку, чтобы говорить о том, что ошибка эта не доминирует, мы сделали три разных подхода. В одном случае мы просегментировали наши предложения и перемешали сегменты, в основном там были энграммы 2, 3, 4, 5, где-то так, оставались слова.
Второй подход – это мы просто использовали TTS-модель, которая генерирует из текста речь. Мы просто перемешали все предложения, в каждом предложении перемешали слова случайным образом и сгенерировали на основе текста аудиодорожку, и дальше смотрели, как эта аудиодорожка распознается.
Третий эксперимент – это мы просто записали своими собственными силами около 200 предложений и посмотрели, что же будет.
Вы можете сами попробовать записать предложение, здесь на английском, но можете сделать то же самое с русским предложением, перемешать слова и попробовать это записать.
(00:25:00)
На самом деле, те люди, для которых является родным языком английский, они сказали, что это было очень сложно записывать. В нашей голове уже автоматически существует какая-то лингвистическая модель, и поэтому нам очень тяжело записывать таким образом случайно перемешанные предложения.
Во всех трех экспериментах мы наблюдаем, что мы выучиваем, на самом деле, обе вещи: мы улучшаем и акустическое представление, и лингвистическое представление. Более детальные вещи вы можете найти в статье, а по поводу лингвистического представления собственно здесь на графике проведено сравнение для разных моделей и loss-функций, что происходит, когда мы начинаем дополнительно к акустической модели использовать Beam Search Decoder с энграммной моделью. Получается, что при обучении с псевдоразметкой мы видим, что декодинг с энграммной моделью уже не улучшает нам никаким образом наше качество. Это говорит о том, что мы полностью выучили эту энграммную модель внутри. Благодаря тому, что мы псевдоразметку генерировали энграммной моделью, мы дополнительно перенесли лингвистическую модель внутрь акустической модели, которую мы теперь выучиваем.
Теперь становится вопрос, а что если нам повторить нашу псевдоразметку несколько раз? Мы обучили одну модель, сделали псевдоразметку наших неразмеченных данных, обучили новую модель. После этого она получилась лучше, мы знаем это, теперь мы ее используем для того, чтобы сгенерировать опять псевдоразметку и повторить этот процесс снова.
Мы провели три разных эксперимента здесь, в зависимости от того, какое у вас число размеченных данных и неразмеченных данных, разная шкала использованных часов. Получаем, что round zero – это когда у вас просто модель обучена на размеченных данных, следующие 1, 2, 3 – это, соответственно, сколько раз вы сгенерировали псевдоразметку. Мы видим, что у нас каждый новый шаг нам улучшает предыдущую модель. В случае последнего сеттинга, когда у вас 1000 часов и 60 тысяч неразмеченных часов, мы видим, что улучшение уже идет очень-очень небольшое. Первая псевдоразметка вам дала очень большой прирост качества, а дальше уже практически не меняется. Но все равно мы видим, что немного, но оно помогает.
Мы можем здесь сделать перерыв на вопросы.
Николай Михайловский: Да, я думаю, это надо сделать, потому что вопросов у нас очень много, прямо в QNA девять вопросов. Давайте, может быть, я тогда их позачитываю, чтобы вам было немножко легче.
Татьяна Лихоманенко: Я просто их не вижу, я даже не могу на них перейти.
Николай Михайловский: Там, вероятно, у вас внизу где-то мигает QNA и чат.
Татьяна Лихоманенко: О’кей. Зачитывайте давайте.
Николай Михайловский: Петр Жижин спрашивает: «За счет чего получается улучшение качества в принципе, когда модель учится на свой собственный выход? За счет лингвомодели, за счет Beam Search, еще чего-нибудь? Где модель может найти выигрыш? Казалось бы, смысл-то модели – учить предсказывать саму себя».
Татьяна Лихоманенко: В последней серии экспериментов мы попытались ответить на этот вопрос. Выучиваются обе части, то есть очевидным образом происходит точно трансфер энграммной модели, которую мы используем для генерации транскрипции псевдоразметки, то есть здесь явным образом задействована лингвистическая модель. Эта лингвистическая модель, мы знаем, что она точно переносится внутрь акустической модели, которую мы учим далее с псевдоразметкой. За счет этого мы улучшаем модель. Мы видим, что декодинг после этого с энграммной моделью никак не помогает, то есть он дает практически тот же самый результат. До этого мы видели сильный прирост, а после этого мы не видим.
То же самое на самом деле происходит и если вы начнете использовать… в конце если мы отдекодим конволюционной моделью лингвистической или трансформером, мы увидим, что раньше мы имели какое-то улучшение, а теперь мы на 25% видим меньшее улучшение с использованием лингвистической модели.
(00:30:00)
Мы точно видим, что мы выучиваем лингвистическую модель.
Второй момент – это акустическая модель. С помощью этого эксперимента переставления слов мы явно видим, что́ модель начинает выучивать, это само акустическое представление. У вас данных сильно больше, сильно разнообразнее акценты, шумы и прочие вещи самой акустики, которую модель теперь видит во время обучения, и на ней пытается учиться.
Понятно, что еще один важный аспект – это аугментация данных. Все модели были обучены с аугментацией данных. Да, вы предсказываете разметку этих неразмеченных данных без всякой аугментации, то есть исходные данные, какие у вас есть. Но далее вы модель учите с аугментацией. Соответственно, ей становится сложнее распознавать, и она пытается это восстановить.
По тому же принципу и в картинках это работает, но здесь у нас есть два аспекта, и мы попробовали выделить оба, оба эти аспекта улучшаются благодаря псевдоразметке.
Николай Михайловский: Кстати, как раз Константин Слипенский, видимо, спрашивает: «Использовали ли spec_augment?»
Татьяна Лихоманенко: Да. Spec_augment использовался, да.
Николай Михайловский: Он же спрашивает: «Есть ли стандартизованный корпус для тестирования русскоязычного распознавания речи?»
Татьяна Лихоманенко: Хороший вопрос. Я видела корпус один, который недавно, полгода назад, наверное, появился. Если очень надо, я могу после презентации прислать ссылку. Но тут проблема, на самом деле, вопрос, скажем так, можете ли вы использовать эти данные или нет. Например, люди собрали корпус с YouTube, но вопрос, вы можете это использовать или нет, потому что доступ до данных – это большой вопрос. Я бы сказала так: корпусы есть, вопрос лицензии.
Николай Михайловский: Есть корпус под названием Open STT, и нам в чате тоже это подсказывают.
Татьяна Лихоманенко: А, да-да-да, вот этот именно, этот я имела в виду.
Николай Михайловский: Но действительно, там возникают определенные вопросы, связанные с лицензиями. Там есть несколько частей в этом корпусе, и они имеют разный характер и, скорее всего, должны быть под разными лицензиями, хотя можно надеяться, что там все хорошо. А во-вторых, вопрос в том, что такое стандартизированный, вот это тоже открытый вопрос, но он широко используется заинтересованными лицами.
Татьяна Лихоманенко: Я бы сказала, что Open STT, по крайней мере, я точно смотрела его, и с юристами мы обсуждали немного, с ним проблема может быть такая, что какие-то части можно использовать, какие-то части, например, YouTube не очень. По-хорошему, его нельзя использовать, тут права они не получили, то есть тут как бы вопрос. Можно фичи, наверное, вытащить, и это будет, наверное, о’кей, а дальше вопрос, если вы опубликуете какую-то модель, релизите ее или где-то используете в стартапе, вообще говоря, могут быть проблемы.
Николай Михайловский: Хорошо. Александр Абугалеев спрашивает: «Вы использовали word_lm или char_lm? Если word_lm, то возникла ли проблема, когда возникает куча гипотез, которые одинаковые в конце и незначительно отличаются в начале, то есть забитием Beam? Если да, то как боролись?»
Татьяна Лихоманенко: Мы использовали word-модель. Можно использовать, в принципе, и char-модель, мы делали на эту штуку статью, чтобы out of vocabulary слова выводить. Здесь, я бы сказала, больше вопрос был… Это не так сильно влияет, то есть гипотезы могут немножко отличаться. В недавней работе мы использовали даже рескоринг, то есть вы можете сделать Beam Search Decoding с энграммной моделью, после этого сделать рескоринг трансформером, и это еще лучше вам выдаст предсказание вашей псевдоразметки, и вы еще лучше обучите модель. Здесь можно, да, играться очень много.
Николай Михайловский: Александр Абугалеев спрашивает опять же: «Боролись ли с тем, что language model начинает сбоить и галлюцинировать при повторах и словах-паразитах, которые часто встречаются в разговорной речи и не встречаются в текстах?»
(00:35:01)
Татьяна Лихоманенко: О’кей. LibriSpeech не такой текст, поэтому в этом случае проблем таких не было. Это аудиокниги, да.
Николай Михайловский: Видимо, Александр работает с распознаванием живой человечьей речи.
Татьяна Лихоманенко: Да, скорее всего. Я могу сказать по поводу Seq2Seq, например. При декодинге в Seq2Seq есть проблема. Давайте так, я скажу… Я Seq2Seq немного чуть дальше буду рассказывать. Мы использовали для псевдоразметки СТС-модель, на самом деле, поэтому проблем никаких с самим декодером, в принципе, не было.
С фильтрацией слов-паразитов, я сказала, что тут… Я бы не сказала, что их так много все-таки. У вас есть акустическая модель, которая контролирует, что вы не должны эти слова выдавать, правильно? Плюс вопрос, где вы обучили лингвистическую модель. Если вы обучили лингвистическую модель на фильтрованном корпусе и не на тексте речи, то есть, допустим, в LibriSpeech отдельный корпус подготовлен книжек, или вы знаете примерно специфику своих данных, и вы ищете тексты, не используете только акустическую транскрипцию, чтобы обучить лингвистическую модель. Если вы лингвистическую модель учите на отдельных текстах, то, скорее всего, у вас этой проблемы не будет. Она может не знать слов-паразитов, она их просто не выведет.
Николай Михайловский: Хорошо. Спрашивает Роман Выгон, и к нему присоединяется Владимир Викулов. Роман Выгон спрашивает: «Будет ли точность модели улучшаться за счет pseudo labeling, если начальная модель дает не 5% вверх, а, например, 20, 30 или 40?»
Татьяна Лихоманенко: Сейчас про это буду рассказывать.
Николай Михайловский: Владимир добавляет: «Если моя начальная модель работает на уровне VER 40, могу я ее использовать для генерации псевдоразметки на новых данных, или качество начальной модели должно быть сильно лучше? Сложно получить такой VER, как на английском языке, на низкоресурсных языках».
Татьяна Лихоманенко: Сейчас я про это буду рассказывать как раз, что делать в этом случае.
Николай Михайловский: Хорошо. Константин Слипенский спрашивает: «Сколько эпох обучали на корпусе 60к?»
Татьяна Лихоманенко: 30-40 эпох, если я правильно помню.
Николай Михайловский: Спасибо. Петр Жижин делает замечание: «Использования псевдолейблов не единственный способ использовать неразмеченные данные. Есть, например, unsupervised pretraining, например, в wav2vec 2.0. Как обучение на псевдолейблах сравнимо с unsupervised pretraining?»
Татьяна Лихоманенко: Сейчас буду рассказывать.
Николай Михайловский: Хорошо. Владислав Мошкин спрашивает: «Проводили ли вы эксперименты с псевдоразметкой по переносу обучения с одного домена на другой, книге на медиа, например? языковая модель накладывает ограничения на доменную область».
Татьяна Лихоманенко: О’кей. Мы пока что начали, недавно опубликовали статью просто по изучению трансфера, что происходит, как у вас это обобщается, и сколько вам нужно часов. Я отсылаю пока на эту статью, то есть в процессе.
Николай Михайловский: Хорошо. Татьяна, вы же нам потом презентацией поделитесь?
Татьяна Лихоманенко: Да.
Николай Михайловский: А мы это все опубликуем. На самом деле, у нас в чате именно про это спрашивают, у нас еще в чате шесть вопросов. Можно считать, что побиты все рекорды активности.
Павел Богомолов спрашивает: «А какой моделью генерировались псевдолейблы в этом эксперименте? CTC плюс Engram Language Model?»
Татьяна Лихоманенко: Да. Мы использовали ее, потому что с Seq2Seq были проблемы на тот момент, сейчас я буду, в том числе, рассказывать, что за проблемы с Seq2Seq, и как их можно решать.
Николай Михайловский: Михаил Зурканеев спрашивает: «Можно ли сказать, что выборка dev/ada попала в ваши 65к часов, поскольку и то, и другое из LibriVox?»
Татьяна Лихоманенко: Статья по датасету ставила своей целью подготовить правильный benchmark. Собственно, что они делали? Они вычистили весь LibriSpeech и весь dev и test сеты таким образом, что вы можете снова использовать dev и test сеты как dev и test сеты и проводить все эксперименты честно.
(00:40:08)
Нет никакого пересечения ни по спикерам, ни по данным.
Николай Михайловский: Спасибо. Иван Захаров спрашивает: «А Text2Speech при генерации перемешанной речи аугментировали как-то, или были разнообразные голоса?»
Татьяна Лихоманенко: Никак не аугментировали, использовали не то что простую, а опенсорсную модельку, которая генерировала, на самом деле, один голос, то есть был один вообще спикер.
Николай Михайловский: Спасибо. Юрков Павел спрашивает, но я не могу это соотнести с тем, что говорилось: «А как такая модель работает с новыми словами? Русский очень богатый язык, может быть много незнакомых слов».
Татьяна Лихоманенко: О’кей, сейчас я в какой-то степени тоже закрою этот вопрос.
Николай Михайловский: Хорошо. Наконец, Дмитрий Миронов спрашивает: «Использовали ли ансамбли моделей для псевдоразметки?»
Татьяна Лихоманенко: Нет, не использовали, но это можно делать и, скорее всего, да, это улучшит модель, по крайней мере, первый раунд точно улучшит. Вопрос – финально насколько сильно это лучше будет. Но да, первый раунд, я уверена, что будет лучше.
Николай Михайловский: Хорошо. Давайте тогда вернемся к презентации. Тем, кто присоединился позже и тем, кто у нас впервые, я напоминаю, что все материалы будут потом опубликованы на сайте «НТР» и разосланы всем, кто зарегистрировался на вебинар. Татьяна, пожалуйста, опять вам слово.
Татьяна Лихоманенко: Теперь переходим к самому интересному. Я попытаюсь быстрее проговорить, потому что, видимо, у нас времени не так много остается. Понятно, что вот эту схему, когда мы генерируем псевдоразметку и заново обучаем модель, и повторяем это несколько раз, да, это очень дорого, потому что вы учите модель с нуля и на большом-большом количестве данных теперь. Мы видели, что после второй, уже на третьей итерации качество улучшается совсем чуть-чуть, не такое большое улучшение, как мы видим при первом использовании псевдоразметки. Соответственно, становится вопрос, можем ли мы бутстрэпить нашу модель, причем, бутстрэпить ее с плохого качества – собственно вопрос, который человек задавал в чате. Да, мы можем, на самом деле, это делать. Мы попытались сделать итеративную псевдоразметку. Отличается она тем, что в teacher-student подходе у вас каждый раз новая модель обучается на новом корпусе, можно сказать, а в итеративном псевдолейблинге мы будем продолжать учить ту же самую модель, просто добавляя новые данные, которые новые данные с точки зрения того, что вы используете те же самые неразмеченные данные, но используете новую псевдоразметку. Она будет просто учиться в течение времени, а надежда, что мы сможем это обучить сильно быстрее. Главное отличие, что здесь учится одна модель, и мы ее просто файнтюним на перегенерируемых псевдолейблах во времени.
Как алгоритм состоит? Мы просто обучаем на размеченных данных с аугментацией некоторое время модель, после этого мы выбираем подмножество наших неразмеченных данных, не обязательно все, потому что это может быть очень дорого, 60 тысяч часов разметить – это тоже время. После этого мы применяем наше текущее состояние модели на это подмножество, генерируем псевдоразметку с помощью декодера с лингвистической моделью, и после этого мы продолжаем обучение нашей модели на размеченных данных и на новых сгенерированных псевдоразмеченных данных, продолжаем обучение мы снова с аугментацией. Во время генерации псевдолейблов мы не используем никакую аугментацию, то есть это dropout выключен, аугментация не используется. Повторяем этот процесс через некоторое время снова.
Здесь главными компонентами, чтобы это все училось, благодаря дополнительным экспериментам обнаружили, что обязательно нужна аугментация данных во время обучения. Когда вы сгенерировали псевдоразметку, да, вы сгенерировали на оригинальных данных, но дальше вы используете с аугментацией. Второе – это что Beam Search Decoder должен быть, и использоваться достаточно хорошая лингвистическая модель.
(00:45:02)
Мы делали эксперименты с обоими, мы делали эксперименты, где вы генерируете с энграммной моделью, а можно делать еще дополнительно рескоринг трансформером полученной транскрипции, и получить еще boost в распознавании речи. В этом случае мы можем эффективно выполнять больше чем 25 перегенераций, и все они дают нам прирост качества.
В нашей схеме мы генерировали каждый… на LibriSpeech-экспериментах мы генерировали каждые 10 или 20 эпох новые псевдолейблы. В данной статье мы рассматривали только одну модель. Мы взяли трансформер, который мы до этого обучили с СТС-функцией потерь, и рассматривали в данном случае части слов как токены. Лингвистическая модель использовалась четырехграммная, и дополнительно, может быть, использовался рескоринг трансформером. Эксперименты проводились на LibriVox и на LibriSpeech с разными сеттингами, какое количество размеченных и неразмеченных данных дано.
Для этих экспериментов не исследовали никакое балансирование данных и не использовали никакое фильтрование псевдоразметки, потому что это СТС, и здесь снести с декодером проблем никаких нет. Но использовали 64 GPU для обучения каждой модели.
Рассматривали три сеттинга, какое число размеченных данных и какое число неразмеченных данных использовать. Если мы зафиксируем одно и то же время обучения для teacher-student подхода и итеративной псевдоразметки, то мы получаем, что за одно и то же время обучения, эффективное время обучения, сколько действительно она учится, с учетом времени на генерацию псевдоразметки, мы получили, что итеративная псевдоразметка будет нам давать сильно лучшее качество.
Если же мы зафиксируем теперь одинаковое значение ошибки и посмотрим, сколько времени потребуется teacher-student подходу или итеративной псевдоразметке достичь этого качества, то мы видим, что здесь у нас получается больше чем в два раза время, в два раза быстрее мы итеративной псевдоразметкой получим то же самое качество.
Теперь переходя к результатам собственно. Для 1000 часов размеченных и 54 тысяч часов неразмеченных данных у нас была модель, которая обучена только на размеченных данных, 5,5%, здесь указано, state of the art для текущей на тот момент на LibriSpeech. С итеративной псевдоразметкой мы получили 4,0%. 4,1%, на самом деле, это был наш предыдущий результат с teacher-student, то есть итеративная псевдоразметка нам дала тот же самый результат, но просто гораздо быстрее и более эффективно в данном случае. Плюс предыдущий наш результат с учетом LibriVox был на самом деле с Seq2Seq моделью, а здесь мы использовали просто СТС, которая supervised-модели сильно хуже, но в итоге мы получили качество чуть-чуть лучше, да. При 100 часах здесь активно wav2vec развивается при маленьком количестве часов размеченных данных. Здесь на тот момент мы получили, на момент публикации мы получили лучшие результаты в обоих случаях, на 1000 часах неразмеченных и на 54 тысячах неразмеченных данных по сравнению с wav2vec. Здесь указана supervised-модель, которая на 100 часах обучена, 28%, то есть вы 20% улучшаете, собственно к вопросу о том, можно ли начинать с плохой модели. Supervised-модель, здесь 28%, если мы с нее стартуем, на самом деле, мы чуть раньше стартуем, когда у нас качество еще хуже, мы можем получить 20% boost от использования псевдоразметки.
Здесь собственно исследование того, насколько нам нужна аугментация и Beam Search Decoder. Здесь показано, что если вы не будете использовать аугментацию и не будете использовать Beam Search Decoder, то ваши результаты будут сильно-сильно хуже.
(00:49:55)
Здесь видно, что мы стартуем нашу псевдоразметку с качества больше 30%, и оно в принципе работает, то есть порядка 33%, мы качество опустили ниже 20%.
Дальше вопрос становится, на самом деле, сколько данных нужно размечать. Можно переформулировать это через функции потери и балансирования данных. Мы просто ставили вопрос, какой процент от наших неразмеченных данных нужно использовать.
Здесь показано сравнение, сколько данных мы будем использовать, и примерно получается что 20-40% уже будет достаточно, чтобы получить хорошее качество. Если вы используете мало данных, то будет не очень, не так хорошо работает. Собственно эти 20 и 40 процентов во всех экспериментах, которые мы проводили, мы собственно и стали использовать, и показали, все эти результаты, которые я показываю, с этим числом и сделаны.
Здесь показано типичное обучение после уже публикации статьи на конференцию. Мы сделали также эти эксперименты на 10 часах, то есть когда у вас размеченных данных только 10 часов. Последний график, самый правый, здесь собственно показана эта модель. У нас исходная модель supervised давала качество чуть меньше 80% на 10 часах, тот трансформер СТС, который мы использовали. Соответственно, можете видеть, что мы даже можем стартовать с 80% и получить качество 20. Псевдоразметка работает даже при таких условиях.
О’кей. Далее дополнительный эксперимент мы сделали, сравнили, можем ли мы на самом деле использовать нашу обученную таким итеративным способом модель, сгенерировать псевдолейблы и обучить теперь модель с нуля. Может быть, мы застопорились в нашем обучении, и может быть, мы переобучились на лингвистическую модель и на что-то еще во время такого итеративного процесса. Может быть, мы ушли вообще в проблемы с оптимизацией, мы ушли куда-то не туда, может быть, мы можем получить сильно лучший результат. Если мы с этой моделью сгенерируем псевдолейблы и обучим заново модель с нуля, то мы получаем очень близкое качество. Они идентичны, практически идентичны и без декодера, и с использованием декодера и лингвистической модели, они дают очень близкие результаты, то есть итеративное обучение вполне себе стабильное.
Дополнительную вещь, которую мы сделали в статье, это очень важный аспект, это что какую лингвистическую модель вы используете. Ведь если мы обучили лингвистическую модель включать корпус текста LibriVox, то в этом случае фактически у нас происходит leak данных и мы начинаем использовать в нашей псевдоразметке те данные, которые мы заранее знали. Мы не предскажем что-то новое, она может заполнить предложения и их использовать при генерации псевдоразметки и, по сути, у нас leak.
Для того, чтобы честно поставить эксперименты, что мы сделали? Мы взяли корпус собственно Проекта Гуттенберг, то есть все английские книги, и его аккуратненько пофильтровали от книг LibriSpeech и от книг LibriVox. Мы подготовили новые корпуса и сделали две новые лингвистические модели, обученные на корпусе Гутенберг без LibriVox, и Гутенберг без LibriVox и без LibriSpeech. Конечно, мы почистили все dev и test сеты из этих корпусов, так что нет никакого пересечения и все честно.
Сами по себе обе эти модели, которые обучены, включая Гутенберг, они имеют перплексию лучше, чем корпус LibriSpeech. Это очевидно, потому что корпус сильно-сильно больше получился. Мы с ними дополнительно провели эксперименты и посмотрели, что же в действительности происходит. В действительности мы видим, что leak, да, происходит. Если мы теперь будем во время обучения использовать… Здесь я выделила все эксперименты, которые обучены на 100 часах размеченных и LibriSpeech плюс LibriVox, неразмеченные данные. Здесь мы видим, что в том случае… Самая правая модель, самая правая колонка, у нас это где leak случается, потому что у нас LibriSpeech включен в этот корпус, и мы видим, что качество у нас сильно лучше по сравнению, когда мы LibriSpeech вычистим тоже и будем использовать эту лингвистическую модель.
(00:55:05)
Но при этом все равно мы видим, что если мы полностью уберем leak, то мы видим все равно прирост качества благодаря этой новой лингвистической модели, которая получена на Гутенберг-корпусе. Мы видим, что если вы будете использовать сильно лучше лингвистическую модель во время генерации своей псевдоразметки в итеративном обучении, вы получите модель в итоге сильно лучше.
Но дополнительно проблема, с которой мы столкнулись, это то, что если вы посмотрите на все таблицы в статье, то вы увидите, что качество, на самом деле, даже здесь видно, между dev и test, test в скобках обозначен, очень большое. По сравнению со всеми цифрами, которые я до этого показывала, здесь может достигать 1% и чуть больше разница между dev и test. Это означает, что мы очень сильно переобучаемся.
Есть другие разные косвенные признаки того, что мы переобучаемся. Мы, например, пробовали контролировать дополнительно вес лингвистической модели в декодере, мы ограничивали его при итеративном процессе. Мы заметили, что мы в действительности начинаем переобучаться на лингвистическую модель. Это, с одной стороны, хорошо, потому что тогда акустическая должна учиться лучше, но этого не происходит, то есть мы сильно переобучаемся на лингвистическую модель. Соответственно, встал вопрос, а можем ли мы вообще убрать лингвистическую модель из нашего процесса итеративного обучения, может ли вообще такое работать? Ответ – да, это может работать. Последняя статья, которую мы пока на arXiv только выложили, про то, что мы можем делать итеративную псевдоразметку без помощи лингвистической модели.
Что это означает? Это означает, что наш метод будет теперь гораздо проще и более эффективным, потому что раньше мы использовали акустическую модель и лингвистическую вместе в Beam Search Decoder и генерировали псевдоразметку, на самом деле, это довольно существенное время тоже в обучении. Теперь мы можем их просто выкинуть. В нашем случае мы сказали, что мы можем давать просто пробовать и использовать arg max наших предсказаний акустической модели для того, чтобы сказать, какая у нас должна быть псевдоразметка. Это работает. Мы проверили, что это работает для разных токенов, мы можем использовать и буквы, и части слов, и в обоих случаях это работает. Мы можем использовать разные loss-функции, и это тоже будет работать, для CTC и для Seq2Seq.
Важно отметить, что по сравнению с предыдущей версией, когда мы использовали лингвистическую модель, мы по-прежнему используем аугментацию данных, это очень важно, без нее ничего работать не будет. Дополнительно мы проверили, что и при 100 часах, и при 1000 часах размеченных данных у вас все по-прежнему будет работать, то есть здесь опять-таки не настолько важно, какой у вас сеттинг.
К вопросу о Seq2Seq собственно. Проблема в том, что у Seq2Seq-моделей две известных проблемы. Они могут генерировать короткие или очень длинные транскрипции, большие, длинные транскрипции они генерируют, потому что происходит зацикливание, начинают повторяться какие-то энграммы. Для того, чтобы исходное итеративное обучение работало, когда вы используете лингвистическую модель при генерации псевдоразметки, для Seq2Seq просто необходимо использовать фильтрацию. Если вы не используете никакую фильтрацию, то ничего не будет работать, оно просто расходится, невозможно сделать его, чтобы оно сходилось. В случае же когда мы используем slimIPL, то есть без лингвистической модели, в этом случае на самом деле Seq2Seq будет сходиться, он работает. Но если мы сделаем дополнительную фильтрацию, мы немного улучшим качество.
Типичные фильтрации для Seq2Seq, предложенные на данный момент в статьях, это обычно оценить зависимость между предсказанием акустической моделью и длиной транскрипции на валидационном датасете, и после этого установить эту зависимость и использовать ее как аппроксимацию. Мы нашли, что это можно и не делать, можно использовать просто простую… По крайней мере, на LibriSpeech это работает очень хорошо, можно использовать простую эвристику по статистике данных. Что мы делаем? Мы строим зависимость между длиной аудио и количеством слов в транскрипции, включая пробелы, и после этого мы исключаем хвосты этого распределения, перцентиль от 1% до 99%, и рассматриваем только эту область.
(01:00:06)
Таким способом мы решаем проблему генерации слишком коротких предсказаний или слишком длинных предсказаний. Проблема дополнительного лупинга, зацикливания, который может все-таки еще оставаться в этом случае, и который может приносить дополнительные проблемы, мы просто фильтруем, просто статистически нашли, что если пятиграмма появляется чаще, чем один раз, то это плохое предложение, или если триграмма появляется больше двух раз, то тоже плохое предложение. Такая эвристика работает очень хорошо, и в этом случае псевдолейблинг с использованием лингвистической модели и декодера при генерации псевдоразметки становится стабильным и не расходятся, он будет работать.
Теперь переходя к результатам. На 1000 часах и 54 тысячах неразмеченных данных, в данном случае самой лучшей моделью была Seq2Seq, они близкие будут. В этом случае итеративный псевдолейблинг нам дает 1% улучшения и очень близко к моменту state of the art на тот момент, который был бы в wav2vec, предобученный, предобучение и потом fine tuning на 1000 часах.
В случае меньшего числа размеченных данных, при 100 часах, мы обучили, во-первых, новую state of the art result на 100 часах на только размеченных данных, это 11%, и с итеративной псевдоразметкой без лингвистической модели мы получаем практически близкий результат к wav2vec. В тот момент, когда wav2vec опубликовал результаты, их результаты были сильно лучше, чем итеративный псевдолейблинг с лингвистической моделью, они сильно улучшили свой подход предобучения. Но когда мы стали пробовать без лингвистической модели, мы смогли очень сильно приблизиться к их результату. Сейчас, по крайней мере, на 100 часах вы можете, если у вас 100 часов размеченных данных, вы можете не обязательно предобучать wav2vec, вы можете попробовать итеративную псевдоразметку и посмотреть, что́ будет. Я думаю, что будет очень близко. Это работает.
Возвращаясь к Seq2Seq. Здесь сравнение, что происходит, если вы обучаете Seq2Seq с учетом лингвистической модели при генерации псевдоразметки или без нее. Здесь, так как Seq2Seq фактически предназначен для того, чтобы выучивать, в том числе, хорошо и лингвистическую модель внутри самой акустической модели, то здесь сильно виден эффект того, что мы с итеративной псевдоразметкой с лингвистической моделью будем переобучаться на эту самую лингвистическую модель. Мы видим, что если мы лингвистическую модель не используем при псевдолейблах, то в этом случае у нас и декодер будет давать нам сильно больший прирост качества, и сама модель будет сильно лучше по сравнению с итеративной псевдоразметкой с использованием лингвистической модели.
Здесь дополнительное исследование, пример обучения, когда вы делаете фильтрацию и когда вы не делаете фильтрацию. Для slimIPL видно, что здесь какой-то небольшой артефакт, расхождение, но оно стабилизировалось во время обучения, и видно, что на протяжении всего обучения у вас с фильтрованными данными немного лучше качество. Оно не обязательно, но дает вам прирост. В случае если вы будете делать это с генерацией с лингвистической моделью и декодером, то вам обязательно нужно делать эту фильтрацию, иначе ничего работать не будет, просто уходит в предсказание повторов, одинаковых энграмм или очень-очень коротких предложений, и в итоге начинает предсказывать просто пустые приложения.
О’кей. Подводя итог. Да, неразмеченные данные могут улучшить ваше качество. Да, сейчас много разных подходов, как это можно использовать, самый-самый популярный – это wav2vec, потому что он умеет работать с 10 минутами размеченных данных. Но сама по себе псевдоразметка тоже работает сейчас очень хорошо и дает хорошие результаты.
(01:05:05)
Для самой псевдоразметки пока из всех наших экспериментов мы видим, что архитектура как таковая и функция потерь, которые вы обучаете, они не так важны, она будет работать со всеми. Это стабильно работает во всех сеттингах. Мы выучиваем одновременно обе вещи – улучшаем и акустическое представление внутри модели, и лингвистическое, перенося нашу лингвистическую модель, которую мы использовали при генерации псевдоразметки, внутрь самой модели. Да, несколько раундов псевдоразметки вам поможет, но при этом улучшение качества будет быстро уменьшаться.
Соответственно, как альтернатива, можно продолжить с итеративной псевдоразметкой, поскольку делать несколько раундов очень дорого. Да, мы можем бутстрэпиться с очень плохой модели, как я показывала, даже с 80% качества модели мы можем бутстрэпиться. В этом случае мы учим одну модель, и она итеративно просто во время обучения в какой-то момент перегенерирует псевдоразметку и продолжает ее использовать.
Ключевые моменты – это аугментация данных и декодер с хорошей лингвистической моделью. Можно использовать четырехграммную, обычно используем, но если вы делаете дополнительно рескоринг трансформером или используете нейросеточку без лингвистической модели, то ваши результаты будут сильно лучше, только здесь имейте ввиду по поводу переобучения на лингвистическую модель. Нужно контролировать отдельно вес лингвистики, который вы используете в Beam Search Decoder.
Самый простой подход, который сейчас мы показали, что хорошо работает, и он будет и быстрее, и эффективнее, сходимость точно такая же, как и в случае, если вы используете лингвистическую модель при генерации псевдоразметки, то здесь ускорение получается за счет того, что убирается полностью декодер, а все остальное обучение в принципе остается тем же самым, и сходимость будет примерно такая же.
Здесь я добавила ссылки на наши опубликованные модели и опубликованный код, если кто-то хочет запустить. Но предупреждаю, да, мы делаем все эксперименты на С++, поэтому welcome, если вы любите С++. Можно теперь вопросы, я думаю, если есть еще время. У меня время есть.
Николай Михайловский: Те, у кого времени нет, сами нас покинули. Если говорить лично обо мне, то 20 минут у меня точно еще есть. 20 минут я точно с вами.
Во-первых, большое спасибо за интересный рассказ. Справедливости ради отмечу, что, по всей видимости, одновременно с вами такую же работу делали авторы датасета Open STT, но они вместо того, чтобы опубликовать работу, опубликовали датасет. Поэтому, несмотря на то, что у них там тоже по слухам была итеративная псевдоразметка, и то, чем Open STT размечен, есть итеративная псевдоразметка, и точность там разная, скажем, это так в разных частях, по всей видимости, таким же способом они шли.
Теперь к вопросам. Опять у нас есть много вопросов и в QNA, и в чате. Константин Слипенский спрашивает: «Как управляли Learning Rate при iterative pseudo labeling обучении?»
Татьяна Лихоманенко: О’кей. На самом деле, ничего заумного не придумывали. Поскольку это трансформер, то есть Warmup, мы увеличиваем с нуля до определенного значения, а дальше мы учили с константным Learning Rate, и его делили пополам только когда видели, что на валидации мы выходили на плато.
Николай Михайловский: О’кей, спасибо. Петр Жижин спрашивает: «Надо ли усиливать аугментацию в процессе обучения IPL, или все время использовалась аугментация одной и той же силы?»
Татьяна Лихоманенко: О’кей. Мы такие эксперименты не пробовали. На самом деле, мы во время всего обучения… Я могу ответить, во время всего обучения мы использовали довольно сильную аугментацию, которую недавно Google опубликовала в недавних статьях, в последних, по Conformer, аугментацию, которую они более оптимальную нашли для LibriSpeech, это раз.
(01:10:12)
Второе, что мы делали. Supervised-модель обученная, например, на 100 часах, имела dropout 03, потому что данных мало. Когда вы начинаете учить, уже модель будете с итеративной псевдоразметкой, мы начинаем использовать dropout 01. Мы знаем, что supervised-модель с dropout 03 достигает какого-то качества, дальше мы начинаем с нуля учить с псевдоразметкой, мы начинаем псевдоразметку только после такого предтренинга немного на supervised-данных, и изначально мы модель учим с dropout 01. Здесь, скорее, capacity модели контролировалась dropout. Аугментация сильная, возможно, может помочь, но мы не тестировали это. Она уже была довольно серьезная, то есть там параметры довольно большие уже стояли, вероятность и покрытия, которые в параметрах spec_augment.
Николай Михайловский: Спасибо. Роман Выгон спрашивает: «Будет ли работать псевдолейблинг, если неразмеченные данные будут принадлежать другому домену?»
Татьяна Лихоманенко: Я думаю, что да, он будет работать. Я не думаю, что это проблема домена. Если говорить по поводу, например, итеративного обучения без лингвистической модели, slimIPL, то он точно будет работать, потому что в данном случае вы никак не завязаны на лингвистику. Вы предсказали ваш другой домен, теперь вы начинаете использовать данные, и начинаете выучивать эту акустику, которая собственно ваш другой домен. Лингвистику она собственно начнет учить по ходу дела тоже, но этого bias сильного нет. Я бы пробовала без лингвистической модели обучаться, если данные двух разных доменов. Здесь, скорее всего, трансфер произойдет более гладко.
Кслову о новых словах, отвечая на предыдущий вопрос, out of vocabulary, собственно если вы не используете лингвистическую модель при генерации, то все out of vocabulary слова будут сгенерированы, потому что это просто arg max предсказания, то есть если слова не было в лексиконе, то вы его сгенерируете.
Николай Михайловский: Спасибо. Павел Богомолов спрашивает: «Несколько контринтуитивно, при IPL Language Model в псевдолейблах была необходима для сходимости. Что изменилось?»
Татьяна Лихоманенко: Я бы так сказала – наверное, проблема в том, какую модель мы использовали для итеративного псевдолейблинга исходно. Это была Word Piece CTC модель, и декодер на 100 часах. Проблема, скорее всего, в том, что Word Piece на 100 часах просто очень плохие. Если вы заглянете в статью по slimIPL, то там результаты с Word Piece, оно не дает state of the art, оно работает, оно улучшает качество, да, но оно сильно хуже. Это проблема, скорее всего, самой модели.
Сейчас лингвистическая модель здесь, по крайней мере, некоторый ablation я делала, для тех моделей, для которых я делала, для всех я могу показать, что использование лингвистической модели и не использование, они дают в итоге одно и то же качество. Исходно для сходимости, просто потому, что Word Piece СТС не работает без лингвистической модели очень хорошо, он не очень хороший. Проблема Word Piece, которые составлены на маленьком корпусе. Тоже можете иметь в виду проблему такую.
Николай Михайловский: Петр Жижин спрашивает: «Как часто перегенерируются псевдолейблы для IPL?»
Татьяна Лихоманенко: Мы перегенерировали каждые 10-20 эпох.
Николай Михайловский: У меня связанный вопрос. Вы говорили, 20-40%, псевдолейбл 20-40%, от чего? От размеченного корпуса или от чего?
Татьяна Лихоманенко: Нет, от исходного. В экспериментах, когда мы использовали… когда весь LibriSpeech как неразмеченные данные, мы использовать весь LibriSpeech, потому что он не такой большой.
(01:15:04)
В случае, когда LibriVox и 60 тысяч часов, мы использовали 20-40% от этих данных.
Николай Михайловский: Которые случайно выбирались.
Татьяна Лихоманенко: Да. Каждый раз подвыборка просто случайно… Да, каждый раз просто случайно подвыборка… Каждые 10 эпох случайная подвыборка из LibriVox выбирается, размечается, и дальше она используется следующие 10 эпох.
Николай Михайловский: Спасибо. Константин Слипенский спрашивает: «Имеет ли значение корпус, на котором обучаются WPM?»
Татьяна Лихоманенко: Да, имеет. По всей видимости, поэтому на 100 часах так плохо и slimIPL работает с Word Piece, потому что 100 часов – это мало. Если вы обратите внимание, Google, например, они тоже публикуют с teacher-student подходом псевдолейблинг, последние работы у них были на LibriSpeech, но они не публикуют результаты, кроме как LibriSpeech плюс LibriVox, они не публикуют результаты 100 часов, 10 часов, 1 час и прочее. Я подозреваю, что это, скорее всего, из-за того, что они используют везде Word Piece модели, а Word Piece хорошо могут быть обучены только на большом корпусе. Дополнительная проблема с Word Piece в том, что они, на самом деле, отражают больше лингвистическую структуру, но никак не акустическую модель. Проблема, что они не сильно подходят. Мы знаем эту проблему, да.
Николай Михайловский: О’кей. Илья Водов спрашивает: «Когда вы сравните IPL с teacher-student, вы рассматриваете разметку, сформированную teacher, как модель ручной разметки, и поэтому говорите, что это дорого? Было на одном из последних слайдов».
Татьяна Лихоманенко: Можете еще раз повторить вопрос?
Николай Михайловский: «Когда вы сравниваете IPL с teacher-student, вы рассматриваете разметку, сформированную teacher, как модель ручной разметки, и поэтому говорите, что это дорого?»
Татьяна Лихоманенко: Да, да, потому что… О’кей, в этом случае… О’кей, это дорого не потому, что нам нужно делать разметку, в итеративном псевдолейблинге мы тоже делаем разметку, правильно. Это дорого потому, что мы в teacher-student обучаем модель с нуля. Если мы сейчас на итеративном псевдолейблинге, например, на качестве 30%, мы сгенерировали данные, мы дальше продолжаем учить эту модель, то в подходе teacher-student мы начинаем модель учить с нуля, и вам надо снова ждать это время, когда она обучится с нуля до 30% и дальше пойдет учиться дальше. Проблема именно в переобучении с нуля в подходе teacher-student. Причем, в teacher-student мы не ограничены только текущей моделью, мы можем взять… Не знаю, у нас модель обучена Seq2Seq, а дальше мы предсказали разметку, а дальше мы обучаем модель СТС, или наоборот. Или мы вообще обучили, например, HMM, сгенерировали разметку, а после этого обучаем СТС.
Николай Михайловский: Андрей Ануфриев спрашивает: «Можно подробнее об аугментации? Какую делали – time masking, frequency masking или что-то еще? Как параметры под аугментацию подбирали?» Здесь в чате цитируют вашу статью, насколько я понимаю. We use spec_augment 2728 with the mask…
Татьяна Лихоманенко: Да-да. Отсылаю в статью. Не использовали time warping, раз, второе, полностью практически использовали просто параметры из последних статей Google, где они собственно репортили последние свои аугментации. Мы проверили, что их аугментация работает, последняя, которую они зарепортили, лучше, например, в Conformer, отсылаю в статью, в Conformer, она для нас работала лучше, чем предыдущая, которую они опубликовали в оригинальном spec_augment, и мы ее стали использовать. Да, параметры указаны в статье, так что просто за деталями – в статью.
Николай Михайловский: Владимир Паж, если правильно произнес: «Возможно, что-то пропустил, так что лучше использовать для продакшна – wav2vec 2 или wav2letter?»
(01:19:58)
Татьяна Лихоманенко: О’кей. Хороший вопрос. На самом деле, зависит от того, какая задача, я бы сказала, потому что… Я не показывала результаты… Давайте так. Результаты wav2vec на 10 минутах, 1 часе, 10 часах пока лучше, чем псевдоразметка. Если у вас такой разброс размеченных данных, то, да, используйте wav2vec пока. В случае если у вас есть 100 часов размеченных, то… О’кей. Зависит, но псевдоразметка, кажется, будет проще. Здесь к вопросу о том, что wav2vec очень… Проблема wav2vec в том, что это двухфазовое обучение, и проблема в том, что ваш CPC Loss никак не… он скореллирован, конечно, с downstream-задачей, но не настолько сильно.
К вопросу о том, как выбирать промежуточный snapshot, с которого файнтюнить после этого модель, это остается большим вопросом. На эту штуку мы делали отдельное исследование, могу тоже добавить эту ссылку, что можно делать одновременное обучение СРС и СТС вместе, и тогда вы можете получить такое же качество, как в wav2vec в статье, но с точки зрения гиперпараметров и всякой оптимизации это будет сильно-сильно проще.
Я бы сказала так, что если у вас есть 100 часов, то пользуйтесь псевдоразметкой, потому что это просто тупо проще для продакшна и для отлавливания ошибок, и для файнтюнинга, и для подбора всяких гиперпараметров, их сильно меньшие, и сильно проще это делать, в отличие от wav2vec, где вам нужно предобучить, и еще непонятно, как тестировать, что downstream-задача будет работать. Не каждый же snapshot делать. У них там специфический очень Learning Rate Schedule, который тоже отдельный вопрос, насколько это легко адаптировать. С точки зрения практического применения, именно сколько у вас времени есть на то, чтобы зафайнтюнить и сколько ресурсов на то, чтобы подобрать все гиперпараметры, я бы советовала псевдоразметку. О’кей, я тут bias, (01:22:20) поэтому больше _____ псевдоразметки.
Николай Михайловский: Хорошо. Давайте немножечко начнем сворачиваться. Последний вопрос из списка QNA. Павел Богомолов спрашивает: «То есть итоговый вывод такой, что если IPL используется с СТС-символьным таргетом, то Language Model не нужна, а если Word Piece – нужна?»
Татьяна Лихоманенко: О’кей. Я могу так сказать: да, для СТС, если это буквы, то можно без использования лингвистической модели, если это word pieces, то, скорее всего, будет плохо. Для Seq2Seq, если вы учите Seq2Seq, можно и леттеры, и вордписы, оно работает, по крайней мере, скорее всего, будет работать лучше.
Николай Михайловский: Хорошо. Из чата вопрос Дарья Студенова задает: «Вы упомянули достаточно хорошую Language Model в отношении энграммной модели. Какими метриками мерили? Перплексия, замер VER в связке с акустической моделью, что-нибудь более интересное, а также А-данные из «Википедии» добавляли к книгам в Language Model, или они недостаточно чистые? Если добавляли, то как сказалось на качестве?
Татьяна Лихоманенко: «Википедию» мы не добавляли, это чистый Гутенберг, просто потому, что он будет покрывать LibriSpeech, то есть мы исследовали in domain лингвистическую модель.
Николай Михайловский: Про измерение качества.
Татьяна Лихоманенко: Да, про измерение качества. Измерение качества мы делаем стандартно, лингвистические модели сравниваются по перплексии, в этом случае мы берем dev и test сеты LibriSpeech, на которых мы меряем акустическое качество, мы на них измеряем, какая будет перплексия, и по ним выбираем лучшую модель. До этого в других статьях делали исследования в зависимости от лингвистической модели. Пока мы видели тренд такой, что… Это когда мы экспериментировали с конволюционными лингвистическими моделями, меряется точно так же перплексия, и строили график зависимости, где показывали, что если перплексия улучшается, то и декодинг будет лучше. Здесь напрямую сильная корреляция между перплексией и улучшением в декодере.
(01:24:51)
Единственное, что могу сказать из своего собственного опыта экспериментов, наступает такой порог, когда вы начинаете… уже лингвистическая модель хорошая, но вы начинаете ее улучшать на одну перплексию, на две перплексии, например, трансформер и лингвистическую модель, то есть это уже такой потолок, вы, может быть, и будете бить state of the art, который… люди борются за один-два уменьшения перплексии, то в этом случае в этом режиме, скорее всего, для акустической модели будет все равно. Если я улучшала перплексию на один-два, то в конце уже, когда модель явно уже очень хорошая, оно никак не улучшало декодинг, такое же качество было.
Николай Михайловский: О’кей. Андрей Иванов спрашивает: «Так slimIPL имеет какой-то _____ (01:25:43) фильтрации, или там стоит, условно, только Greedy Decoder?»
Татьяна Лихоманенко: Только Greedy Decoder, ничего больше нет. Фильтрация делается только для Seq2Seq, просто потому, что иначе он будет… Фильтрация немного помогает в случае slimIPL, в случае IPL она просто необходима.
Николай Михайловский: О’кей. Он же спрашивает: «А что если делать не текстовые псевдолейблы, а считать loss прямо по лождетсам СТС-вариантов? Это имеет хоть какой-то смысл?»
Татьяна Лихоманенко: Это к вопросу о том, что speech отличается от машинного перевода и от картинок. У нас не выровненный… Похоже на машинный перевод, что у нас не выровненный, и СТС возвращает не выровненную, правильно, вещь, и сказать, как использовать не hard labels, а soft labels, не очень понятно. Становится очень большой вопрос, как это делать. В СТС у нас есть бланки, и количество фреймов не соответствует количеству слов. Мы решаем задачу сегментации. Как это делать, это отдельный вопрос, возможно, нужно менять модель. Есть, например, модель, тоже от нашей группы, которая напрямую выдает слова. Возможно, там это как-то можно сделать, там проще будет.
Николай Михайловский: О’кей. Последний, все, последний вопрос, Петр Васильев: «Какие планы на будущее по развитию?»
Татьяна Лихоманенко: Доделать хорошо slimIPL, чтобы было совсем-совсем хорошо.
Николай Михайловский: Хорошо. Большое спасибо, Татьяна. Я пользуюсь возможностью анонсировать следующие наши два вебинара. На следующей неделе у нас вебинара не будет, потому что в России это 23 февраля, праздник. 2 марта у нас будет Павел Денисов из Штутгартского университета с рассказом про вообще Unsupervised Learning. Наконец, 9 марта будет наш Роман Выгон, «НТР» и ТГУ, с рассказом про то, как мы сделали state of the art в Keyword Spotting. Всех приглашаю, кому интересна тема распознавания речи. У нас была длинная серия женских выступающих, 6 или 7 человек подряд, а сейчас у нас длинная серия по распознаванию речи, тоже четвертый подряд, если я правильно помню, или даже потом пятый будет.
Спасибо большое, Татьяна. Спасибо всем, кто был с нами, и до свидания.
(01:28:50) (Конец записи)