Спикер о презентации:
Задача понимания речи (spoken language understanding, SLU) традиционно решается в два этапа: сначала система распознавания речи преобразует речь в текст, затем модель понимания естественного языка (Natural Language Understanding, NLU) выделяет смысл из полученного текста. Замена этих двух этапов единой сквозной (end-to-end) нейросетевой моделью имеет ряд преимуществ, но осложнено относительно малым количеством размеченных данных доступных для тренировки моделей, что решаемо разнообразными методами переноса обучения (transfer learning).
В этой презентации я расскажу о нашем методе создания сквозной модели понимания речи, который заключается в копировании параметров моделей распознавания речи и понимания естественного языка с последующим кросс-модальным дообучением методом Учитель-Ученик. Используя модель семантического представления предложений Sentence-BERT в качестве Учителя, мы дообучаем нашу модель понимания речи для вывода аналогичного семантического представления аудио записей, получаемых на входе. Наши эксперименты с классификацией типов высказываний (dialog act) и намерений пользователя (intent) показывают, что без использования соответствующих задаче размеченных аудио записей точность сквозной модели близка к точности традиционного двухэтапного подхода, а также что результаты сквозной модели могут быть улучшены дообучением на нескольких размеченных аудио записях на класс.
Запись прошедшего вебинара: https://youtu.be/-fZdVIUKKAM
Презентация: https://drive.google.com/file/d/1bwayYZgsu9zNSPAzro8if01RUH0NeOLS/view?usp=sharing
Код, использовавшийся в экспериментах:
— модификация ESPnet: https://github.com/akreal/end-to-end-slu-espnet
— модификация Hugging Face Transformers: https://github.com/akreal/end-to-end-slu-transformers
Статья, которую Павел упоминал в ответе на вопрос: https://arxiv.org/pdf/1803.00831.pdf
(00:00:00) (Начало записи)
Николай Михайловский: Я Николай Михайловский — генеральный директор компании NTR. Я приветствую всех на очередном вебинаре, который NTR проводит вместе с Высшей IT Школой Томского государственного университета. Сегодня у нас в гостях Павел Денисов из университета Штутгарта с рассказом про… По-русски сразу не знаю, как это сказать. С понимаем прямо из речи. Правильно смысл передал?
Павел Денисов: Да.
Николай Михайловский: У нас как-то названо. Сквозная модель понимания речи с помощью кросс-модального обучения методом учитель-ученик. Я думаю, что мы ждем еще пару минут и начинаем. У нас сегодня 70 с чем-то зарегистрировавшихся. На самом деле, стандартное количество людей уже собралось. Половина зарегистрировавшихся уже собралась, поэтому я думаю, что мы можем начинать. Павел, передаю вам бразды правления. Прежде, чем вы начнете, коллегам, которые нам слушают. Во-первых, можно задавать вопросы в чате, можно задавать вопросы в Q&A. Павел, как вам удобнее будет отвечать на вопросы? По ходу, по кускам, в конце?
Павел Денисов: Можно по ходу, наверно. Можно в конце.
Николай Михайловский: Давайте мы будем следить за вопросами. Если их наберется за раз много, мы начнем их зачитывать, чтобы вам все время не следить за тем, что происходит в чате и в Q&A. Поскольку у вас голова будет забита тем, чтобы рассказывать или прочитать. Тогда мы будем смотреть, как поступили вопросы, и по ходу решим. Все, передаю вам слово.
Павел Денисов: Спасибо. Меня зовут Павел. Я учусь в Штутгардском университете, в институте NLP. В основном там все занимаются NLP. Я больше специализируюсь на SR — speech recogniton. Сегодня я расскажу про то, как мы попробовали скрестить SR и NLP, и что из этого вышло. Целью было получить сквозную модель, которая извлекает напрямую из речи ее смысл.
Традиционно это делается в две ступени. Берется речь, прогоняется через SR, преобразуется в текст. Потом текст скармливается какой-нибудь NLU модели для понимания языка. Эта модель уже производит классификацию сказанных предложений. Например, это можно использовать для классификации между типами утверждений и вопросы _____ (00:03:48). Интент — это то, что определяет, что хотел пользователь или диктор. В общем, с таким подходом есть некоторые проблемы или неприятности в том, что текст — это дискретное представление речи. Некоторая информация потеряна в тексте по сравнению с тем, что мы произносим голосом. Чтобы преобразовать речь в текст, мы должны обычно делать BIM search. Это дороговато по вычислительным ресурсам и требует разных хитростей. Часто мы теряем на этих хитростях, потому что хотим сэкономить вычислительные ресурсы. В конце концов, чтобы что-нибудь оптимизировать на новых данных, нужно по отдельности настраивать SR, NLU.
(00:05:09)
Тоже хотелось бы использовать что-нибудь более автоматическое. Всего этого можно было бы избежать, если бы мы это все объединили в общую модель SLU, которая представляет собой единую нейронную сеть, принимающую на входе речь и на выходе выдающую какое-нибудь векторное, беспрерывное отображение этой речи, и которую можно использовать для конечной задачи. _____ (00:05:45), как здесь указано. С этим есть проблемы в том, что нет таких больших data set, которые аннотированы напрямую для таких задач.
В NLU в последнее время с довольно большим успехом использовались self-supervised методы, когда берется просто огромное количество текста из интернета, выкидываются какие-то определенные куски случайно, и модель тренируется предсказывать эти куски. Оказывается, что этого достаточно, чтобы натренировать модель понимания текста. С речью такое сделать пока сложновато, потому что в речи гораздо больше всяких переменных. К тому же, у нас уже есть хорошие модели для SR и NLU. Хотелось бы эти модели тоже использовать. В этом и состоит идея этого проекта.
Что мы предлагаем? Мы предлагаем взять параметры из энкодера ASR модели и параметры из NLU модели и просто соединить их. Так как они друг с другом не очень хорошо работают, мы еще должны сделать какую-то дополнительную донастройку или дотренировку. Мы попробовали использовать Teacher-Student — учитель-ученик модель для этого. Мы рассматриваем нашу новую SLU модель как ученика и пытаемся выровнять ее выход к выходу исходной NLU модели с использованием обычных SR data set, где у нас просто есть пары между речью и текстом. NLU модель предсказывает какой-то семантический эмбеддинг для предложения. SLU предсказывает какой-то аналогичный семантический эмбеддинг — просто один вектор — для речи. Мы пытаемся минимизировать расстояние между ними. При этом NLU модель у нас заморожена, мы просто делаем forward pass, а SLU модель частично разморожена и некоторые слои в ней тренируются, чтобы уменьшить это расстояние от NLU модели.
Теперь я расскажу немного про настройки, как мы проводили эти эксперименты. Мы использовали довольно стандартную трансформер-модель sequence-to-sequence для SR. Обычный, стандартный рецепт из ESPnet, основанный на LibriSpeech. Для улучшения результатов sequence-to-sequence также используется CTC, который вторично…
Николай Михайловский: Анонимный посетитель спрашивает: как вычисляется расстояние?
Павел Денисов: Я к этому перейду довольно скоро. Если коротко, то мы попробовали три разных функции. Я покажу. Обратно к экспериментам. SR модель натренирована на нескольких английских data set. В общем три тысячи часов. На входе 80-канальный log Mel filterbank, на выходе 100 word piece или подслов.
(00:10:24)
Для NLU мы использовали модель, которая называется sentence-BERT. Это обычный BERT, но натренированный или настроенный для предсказания sentence эмбеддинга — это отдельные единичные векторы для предложения, относительно которых подразумевается, что они содержат весь смысл предложения. Для того, чтобы получить SLU модель, мы взяли энкодер блоки из ASR и энкодер блоки из NLU и вставили линейный слой между ними. На выходе мы получили один вектор, который представляет всю запись. Этот вектор получается усреднением всех векторов на выходе. Для того, чтобы уменьшить расстояние с NLU моделью мы использовали три data set — LibriTTS, Common Voice и M-AILABS. Особенность этих data set в том, что они содержат транскрипцию вместе с капитализацией, с пунктуацию и другими дополнительными форматированиями, которые обычно в ASR не используются, но предположительно содержат немного дополнительного смысла. К сожалению, я до этого не добрался, чтобы проверить.
В конце концов для того, чтобы посмотреть, как эта SLU модель работает мы использовали три data set: два из них — это Dialog Act classification, один из них — это Intent detection. Это Smart Speaker (00:12:34) data set. Что-то вроде Алексы или Алисы.
В качестве бейслайна мы попробовали тренировать классификатор на выходе NLU модели. Мы предположили, что у нас есть совершенно безошибочная транскрипция, и что ASR не делает никаких ошибок. Для data classification (00:13:11) мы видим, что все равно классификация не очень работает. Для Smart Speaker (00:13:22) и Speech Commands (00:13:23) классификация полностью идеальная. Это связано с тем, что в этом data set вся разница между тренировочными данными и проверочными данными заключается в записи, а транскрипции полностью пресекаются. Это было ожидаемо. Потом мы проверили, как такой классификатор будет работать на нашей ASR модели. Так как она делает ошибки, классификатор тоже делает ошибки. Мы видим, что accuracy упал. ASR тут приведет для понимания того, насколько данные тяжелые, сложные. Для data classification word error rate довольно высокий. Это значит, что записи либо низкого качества, либо транскрипции не очень хорошие. Есть проблемы.
Теперь мы перейдем к результатам. Я также расскажу про то, как считали расстояние и находили другие параметры. Мы использовали два сценария. Первый сценарий мы называем zero-shot. Это значит, что у нас есть только тексты, которые аннотированы для Dialog Act или для Intent. Мы тренируем классификатор на этих текстах, на векторах, которые NLU выдал нам. Потом пробуем тестировать классификаторы на векторах, которые SLU выдало для записей. Мы называем это zero-shot, потому что мы не используем никакие записи речи, аннотированные для конечной задачи Dialog Act classification или Intent Detection. Это можно сравнить с pipeline или с каскадным подходом, который я показал в самом начале, где мы берем отдельный ASR, который просто натренирован на SR, транскрибируем в текст и скармливаем это все в NLU, который натренирован на тексте.
(00:15:58)
Как мы видим, результаты немного хуже, чем pipeline. Также мы видим, что в зависимости от того, какие слои в конечной модели мы настраиваем, что-то работает лучше, что-то хуже. В самой первой строке мы не настраиваем вообще никакие перенесенные слои, параметры. Мы только настраиваем mapper (00:16:32) между ASR энкодером и NLU энкодером. Во всех последующих строках я попробовал разморозить разные слои, потому что было не очень понятно, какие слои стоит оставить, а как слои стоит донастраивать. В результате видно, что в среднем лучше донастраивать два верхних слоя в ASR энкодере. Validation loss здесь показывает значение расстояния SLU и NLU. Зачем это здесь приведено? Чтобы показать, что есть какая-то связь между уменьшением расстояния и accuracy на конечной задаче. Чем меньше расстояние, тем лучше получаются вектора, тем лучше они работают для линейного классификатора.
Также тут есть небольшая информация про то, как лучше настраивать. Оказалось, что трансформеры довольно хрупкие или деликатные, когда они тренируются на речи. Пришлось перебирать довольно много параметров. Оказалось, что простой переборкой параметров для learning rate или для продленной тренировки можно улучшить результаты, приблизиться к результатам pipeline.
В конце концов к расстоянию. Мы попробовали три разных расстояния: Cosine distance, L1 и L2. L1 — это обычное расстояние, когда берется расстояние между каждым элементом векторов и складывается. L2 — это то же самое, но квадратичное расстояние. Cosine — это довольно популярная метрика для расстояний в семантических представлениях. Как оказалось, все они дают почти одинаковые результаты, но L1 немного лучше. Для validation я пробовал посчитать, какие будут значения для других расстояний для разных моделей, оптимизированных с разным расстоянием. Чтобы посмотреть, например, когда я использую L1 для оптимизации, связано ли это как-то с Cosine. Оказалось, что связано. Cosine тоже уменьшается. Получается одно и то же расстояние, не важно, что я использую. Когда мы выбрали L1, попробовали оптимизировать дальше — больший _____ (00:19:50). Оказалось, что можно до 60 раз это повторять и получать какие-то улучшения, но все еще довольно расстояние от каскадного подхода.
Чтобы посмотреть, что происходит с классификатором и найти дополнительные преимущества использования SLU по сравнению с каскадным подходом, мы еще подумали, что, возможно, ASR делает ошибки, которые фонетически не очень значимые, но на смысл могут влиять довольно сильно. Чем больше таких ASR-ошибок, возможно, тем больше преимущество в использовании беспрерывного отображения в SLU по сравнению с текстом.
(00:20:52)
Чтобы это увидеть мы посмотрели, что происходит с записями, которые вызывают много ошибок в ASR. Здесь, например, мы сгруппировали по word error rate. Можно увидеть, что записи с очень высоким word error rate, например, 70% Fluent Speech Commands или 90% для _____ (00:21:18) classification. Accuracy end-to-end (00:21:24) модели выше, чем accuracy у pipeline. Тогда как в идеальных записях, где word error rate, например, между ноль и десять, то pipeline работает, конечно, лучше.
Так как SLU — это просто нейронная сеть, а классификатор — это просто линейный слой сверху, довольно заманчиво звучит идея все это соединить вместе и взять несколько аннотированных записей речи и донастроить эту нейронную сеть на этих записях. Почему это заманчиво? Потому что в речи, как я уже сказал, содержится больше информации, чем в тексте. Так как эта информация не использовалась или почти не использовалась в изначальном SLU моделировании, чтобы модель научилась ее использовать, требуется хотя бы несколько образцов показать ей для _____ (00:22:41), для Intent classification, для Dialog Act classification.
Мы попробовали взять один-два-три образца на каждый класс для конечной задачи. Смотрели accuracy на предыдущих трех data set. Мы увидели, что на двух из них… Слева мы видим три колонки для эксперимента, где мы только настраиваем линейный классификатор, то есть мы заморозили все слои и настраиваем только последний слой. Справа мы видим три колонки, которые отображают, что будет, если мы разморозим некоторые слои в середине модели. Так как это все одна модель, то мы можем донастраивать по выбору: не только последний слой, но и слои, которые ближе ко входу, чтобы предположительно научиться использовать дополнительную информацию, которая содержится в речи. Мы видим, например, что на Switch board (00:24:00) и на Fluent Speech Commands мы смогли получить accuracy немного выше, чем pipeline. Также мы видим, что есть смысл размораживать слои не только в конце, но и в середине модели. Backpropagation через все эти слои довольно полезен.
На этом я подхожу к концу. Просто для повторения: мы предложили метод, чтобы соединить ASR и NLU модели, чтобы извлечь смысл из речи напрямую. Мы установили, что этот метод может работать сравнимо с классическим pipeline и может быть улучшен на 10 экземплярах на класс с аннотированными данными. На этом все. Спасибо.
Николай Михайловский: Спасибо, Павел. Пожалуйста, коллеги, ваши вопросы. Мария Ярославцева спрашивает: «На каком языке были данные?»
Павел Денисов: Все на английском: и ASR, и конечные задачи Dialog Act classification (00:25:42), Intent detection.
Николай Михайловский: Пока коллеги думают над своими вопросами… Вот еще прилетел вопрос. Опять Мария Ярославцева спрашивает: «Какая гипотеза о том, какое влияние пунктуация и заглавные буквы оказывают на результат? Я поняла, что тестов пока не было, но, если поспекулировать? Все же пунктуация — это про язык, а не про речь».
(00:26:06)
Павел Денисов: Да, это больше спекуляция, но, например, для Dialog Act, где мы хотим различить между утверждением и вопросом, пунктуация довольно полезна, потому что у нас есть, например, вопросительный знак. В речи это выражается через интонацию и через порядок слов, а в тексте у нас есть пунктуация. Порядок слов опять же в английском помогает. Смысл в том, что если бы у нас не было пунктуации, то минимизация расстояния не научилась бы извлекать интонацию. С вопросительными знаками модель, возможно, выучилась также извлекать вопросительную интонацию.
Николай Михайловский: Хорошо, спасибо, Павел. Константин Слепенский спрашивает: «Пробовали учить в лоб сквозную модель голос-класс без использования текстового представления вообще?»
Павел Денисов: Я не пробовал, но мой коллега пробовал какое-то время назад. Я могу прислать ссылку на его статью. Я не могу точно сравнить, потому что в его случае он использовал только Dialog Act. У него была модель, которая использовала не только текущее предложение, но и некоторый контекст. Он смотрел, какие в разговоре были предложения до этого. Я для простоты это исключил, не использовал в модели, поэтому его результаты немного лучше, чем мои.
Николай Михайловский: Спасибо. Пока еще коллеги думают над вопросами, я хочу свой вопрос задать. Чтобы его правильно задать, давайте вернемся к вашей общей схеме того, как работает pipeline. Где-то у вас была. Это pipeline, а дальше ваша система, где у вас есть общий эмбеддинг, правильно я помню?
Павел Денисов: Да.
Николай Михайловский: Правильно я понимаю, что у вас подается _____ (00:28:37), то есть кусок речи. Мы делаем некий эмбеддинг.
Павел Денисов: Да.
Николай Михайловский: Мы берем транскрипцию того же кусочка речи. Делаем эмбеддинг. Дальше мы берем эти два эмбеддинга и стараемся уменьшить расстояние между ними.
Павел Денисов: Абсолютно верно.
Николай Михайловский: Это делается с помощью какого-то contrastive loss (00:29:10)?
Павел Денисов: Обычная разница между векторами, например, L2.
Николай Михайловский: Обычная разница. Дальше вы поверх этой штуки хотите сделать, например, каким-нибудь линейным или небольшой глубины классификатором классификацию в интенты, например?
Павел Денисов: Например, да.
Николай Михайловский: Вопрос: почему тот эмбеддинг, который получается, может оказаться разделимым по, например, интентам, если мы при обучении об этом не думали?
Павел Денисов: Тут предполагается, что этот sentence embedding из NLU описывает смысл предложения. Этот смысл также может использоваться для разделения между интентами или Dialog Act или чем-нибудь еще.
Николай Михайловский: То есть мы считаем, что sentence embedding — это такая здоровская штука, которая уже хорошо разделяет интенты?
Павел Денисов: Да.
Николай Михайловский: И что мы не пытаемся улучшить с помощью речи то, как она разделяет, а с помощью ее пытаемся улучшить то, что происходит у нас в речи?
Павел Денисов: Я не очень понял.
Николай Михайловский: Речь — штука более богатая.
Павел Денисов: Да, мы как бы притягиваем речь к этому sentence embedding, и наоборот.
Николай Михайловский: Если у нас ведущий источник — это текстовые эмбеддинги, то мы теоретически можем, добавив к ним чего-то хорошего из речевых эмбеддингов улучшить качество.
(00:31:16)
Павел Денисов: Теоретически — да.
Николай Михайловский: Получается, что происходит как бы немножко наоборот. Мы с помощью хорошим текстовых эмбеддингов немножко улучшаем плохие. Как-то эту ситуацию бы развернуть.
Павел Денисов: Можно, наверное, сказать, что мы это делаем в последнем эксперименте, где мы берем этот интент классификатор, который натренирован на этих sentence embedding, присоединяем к SLU модели и fine tune все вместе. Таким образом мы надеемся, что если в речи есть какая-то дополнительная информация, то наша модель научается разделять еще лучше.
Николай Михайловский: Да, но я веду к тому, что, возможно, если бы мы fine tune этот эмбеддинг прямо на интент или еще какую-то штуку, которая нам важна, с помощью contrastive loss или другой функции, то, вероятно, мы бы получили более интересные результаты. Потому что не по всем пунктам вы бьете прямой pipeline.
Павел Денисов: Да.
Николай Михайловский: Чтобы побить прямой pipeline, надо взять ту функцию, которая вам интересна, и заточить ее на ту цель, которую вы преследуете. То есть еще на уровне эмбеддинга попробовать потренировать на что-то такое, что потом выразится в хорошее разделение интентов или что вы там хотите замерить. Нам в чате задают вопросы. «Для каждого теста была обучена отдельная модель или использовалась общая» — спрашивает Александр Батальщиков.
Павел Денисов: Использовалась общая модель.
Николай Михайловский: То есть все data set, которые упоминались, просто на одной и той же модели эмбеддинга потом тренировались?
Павел Денисов: Да.
Николай Михайловский: Окей. Коллеги, пожалуйста, еще вопросы. У нас сегодня довольно большое количество народа. Сорок шесть посетителей — это довольно много. Петр Жижин задает вопрос: «Реально ли, используя эмбеддинги предложений, улучшить качество распознавания речи? Казалось бы, понимая смысл предложения, можно восстановить слова».
Павел Денисов: Возможно, да. Я бы для этого не использовал эмбеддинги предложений, а скорее эмбеддинги токенов.
Николай Михайловский: На самом деле мысль… Петр, а давайте я вам дам право говорить, чтобы вы подробнее рассказали, что именно вы имеете в виду. Потому что эмбеддинги предложений тоже откуда-то надо взять.
Петр Жижин: Может быть, я не очень правильно понял смысл. Насколько я понял, эмбеддинг используется с выхода ASR, а не самого предложения, верно?
Павел Денисов: Из самого предложения. У нас есть эмбеддинг предложения. Есть эмбеддинг речи. В каком-то смысле мы получаем похожие эмбеддинги из речи, из предложения. Как я вижу, как это могло улучшить — это если бы мы использовали сверху этого эмбеддинга речи, который уже выровнен с эмбеддингом предложения, для ASR как-то. В этом случае он бы содержал какую-то дополнительную информацию по сравнению с обычным ASR, потому мы тут имеем также NLU слои.
(00:36:33)
Николай Михайловский: У меня в голове крутится. Где-то год назад была какая-то статья, где тоже делались совместные эмбеддинги из речи и из текста. Их там выравнивали. У меня в голове не всплывает, что там за задача была. Потому что получить эмбеддинг предложения задаром — это ситуация, которая не очень часто бывает. Эмбеддинг предложения можно получить в том случае, когда у вас есть какой-то предзаданный интент, либо это эмбеддинг не предложения, а какой-нибудь эмоции. В каких-нибудь таких задах. Поэтому как улучшить распознавание речи в каком-то практическом смысле — нужно, чтобы эти данные откуда-то взялись. Не знаю, Петр, ответили мы на ваш вопрос или нет.
Майк Сапунов спрашивает: «А вы инициализировали веса (00:37:45) моделей из предобученных моделей ASR и NLU или учили с нуля?»
Павел Денисов: Мы использовали предобученные модели. NLU — это fine tune BERT. Мы просто взяли уже обученный кем-то другим. ASR мы обучали на ASR data set. Чтобы сделать то, что изображено на этой картинке, мы уже использовали предобученные веса (00:38:16). В этом состоит половина метода, чтобы переиспользовать веса (00:38:22), которые уже обучены на каких-то других задачах.
Николай Михайловский: Еще одна мысль состоит в том, что в похожих задачах линейный классификатор — часто не самый оптимальный. Тот же KNN (00:38:42) или даже SVM (00:38:48) зачастую дают лучшие результаты, чем линейный классификатор, потому что у вас неразделяемые множества получаются, а KNN (00:39:00) свободно и спокойно с нераздялемыми множествами работает. Это относительно дешевый способ получить лишние два процента, которые нужны для того, чтобы _____ (00:39:18) побить.
Павел Денисов: Можно попробовать.
Николай Михайловский: Андрей Парков спрашивает: «Вы в двух случаях объединяете две модели ASR и NLU. Модели одинаковые. За счет чего ускорение скорости в инференсе?» Если честно, я не вполне понимаю вопрос. Павел, вы понимаете вопрос?
Павел Денисов: Тоже не совсем.
Николай Михайловский: Давайте мы Андрею дадим возможность говорить.
Андрей Парков: В двух случаях вы используете две одинаковые модели, что внутри SLU и что отдельно.
Павел Денисов: Да, понятно.
Андрей Парков: Откуда увеличение скорости?
Павел Денисов: Наверное, я понял вопрос. Экономия небольшая происходит на том, что не нужно для ASR делать BIM search — этот авторегрессивный декодер. Ему нужно декодировать один шаг, потом перейти на следующий шаг и так далее, чтобы пройти всю запись речи. Потом только мы получаем на выходе текст. Мы должны для NLU ждать какое-то время, пока ASR отработает. Тогда как у нас просто одна трансформер модель, то это обычно куча перемножений матрицы. Мы можем это все делать параллельно. Ускорение больше спекулятивное здесь.
Андрей Парков: То есть в ASR модели вы берете только акустическую модель, а языковую модель убираете?
Павел Денисов: Да.
(00:42:07)
Андрей Парков: Спасибо.
Николай Михайловский: Спасибо, Андрей. Роман Козьмин нас спрашивает: «Эмбеддинг предложений содержит в себе в том числе и пунктуацию. Эмбеддинг от ASR, как я понимаю, содержит только слова. Не совсем понимаю, как пунктуация из второго позволяет улучшить первый?»
Павел Денисов: Изначально эмбеддинг из ASR содержит не слова, а подслова или буквы. Путем уменьшения этого расстояния между эмбеддингом текста и эмбеддингом речи мы как бы заставляем эту ASR модель вместе с NLU моделью выдавать, дофантазировать что-то, что будет более близко к эмбеддингу предложения. Так как, например, люди же могут писать предложения с пунктуацией, с заглавными буквами из речи, несмотря на то что в речи мы не произносим специально пунктуацию и так далее. Просто, потому что мы знаем, как писать. Здесь принцип такой же.
Николай Михайловский: Я бы немножко дополнил. Эмбеддинг от ASR не то, чтобы содержит только слова. Просто обычно мы языковой моделью из этого эмбеддинга, по сути, получаем только слова без пунктуации. Мы точно так же в свою CTC loss модель вставить, например, запятые и точки. Оно у нас с некой вероятностью их тоже будет предсказывать. В том числе, потому что там характерные паузы в речи есть. Поэтому сказать, что именно эмбеддинг от ASR содержит только слова — это не совсем правильно. Просто мы так обычно на уровне CTC loss это все делаем. Это не значит, что сам эмбеддинг содержит только это. В данном случае Павел использует именно эмбеддинг. Он языковую модель не использует.
Майк Сапунов спрашивает: «Пробовали ли вы другие модели ASR и NLU? Почему остановились конкретно на этих?»
Павел Денисов: Для ASR не пробовали. Как взяли sequence-to-sequence, так и использовали. Для NLU изначально я пробовал обычный BERT. На самом деле, как-то не очень работало почему-то. То есть расстояние здесь уменьшается, вектора получаются очень похожие, но когда я пробую тестировать с линейными классификаторами на конечной задаче, ничего не работает.
Николай Михайловский: Это, наверное, как раз та история, которую я вам рассказывал. Почему оно вообще обязано это делать? Из общих соображений — не обязано, если его этому не учили. Научите, будет обязано.
Коллеги, пожалуйста, еще вопросы. Хорошо, похоже больше вопросов к Павлу нет. Тогда большое спасибо всем присутствующим. Через неделю у нас будет наш Роман Выгон из NTR и Томского университета рассказывать, как мы по keyword spotting обогнали Google.
Вот у нас Георгий Брегман просит слова, поднимает руку. Георгий, пожалуйста.
Георгий Брегман: Добрый день. Меня зовут Георгий Брегман — РоботоЛАБ «Сколково». Я не сразу подключился. Хотел спросить: можно ли какие-то ссылки в качестве примеров прислать потом, чтобы посмотреть? Может быть, _____ (00:47:02) есть посмотреть.
(00:47:05)
Павел Денисов: _____ (00:47:05) нет, но есть два репозитория с модификациями, которые я делал для ESPNet и для Hugging Face transformers. Код не очень рабочий, у меня не нашлось времени доотладить его, но можно использовать для справки.
Николай Михайловский: Да, через некоторое время после вебинара мы всем участникам, всем зарегистрировавшимся рассылаем материалы вебинара, которые выступающий нам предоставит. Обычно это какие-то презентаций, в каких-то случаях статьи или ссылки на статьи и запись вебинара в том случае, когда корпоративная политика компании, в которой работает выступающий, этого не запрещает. Мы надеемся, что университет Штутгарта не запрещает распространения выступлений своих сотрудников и аспирантов. Мы через некоторое время — это единицами дней обычно измеряется — материалы вебинара всем участвовавшим разошлем. Всем большое спасибо. До свидания.
Павел Денисов: Большое спасибо за внимание. До свидания.
(00:48:40) (Конец записи.)