Компьютерная лингвистика: как компьютеры распознают речь
Двадцать или тридцать лет назад о распространённых сегодня голосовых помощниках приходилось только мечтать: качество распознавания речи было ниже. Большой рывок в этой отрасли позволили сделать нейросети.
Мы попросили двух экспертов рассказать о том, как сегодня компьютеры распознают человеческую речь. Дмитрий Ильвовский, доцент факультета компьютерных наук НИУ ВШЭ, расскажет о теоретической части, а Екатерина Еникеева, разработчик службы качества машинного перевода Яндекса, — о том, чем занимается компьютерный лингвист.
Как машины распознают речь?
Сперва нейросеть выделяет из звуковой дорожки фрагменты, которые соответствуют отдельным звукам, фонемам. Дальше с этими маленькими звуковыми фрагментами сопоставляются буквы из текстового словаря.
Дмитрий Ильвовский, доцент факультета компьютерных наук НИУ ВШЭ
После этого модель пытается сложить из букв слова, далее слова складываются в предложения, из которых уже составляется готовый текст. Всё описанное происходит внутри одной модели, которая состоит из нескольких компонентов. Но с точки зрения обычного человека процесс распознавания представляет собой некий чёрный ящик, то есть на вход мы подаём звуковой сигнал, а на выходе получаем текст. И в середине ничего осмысленного для пользователя не происходит — но это и не требуется.
Но при этом модель сперва должна обучиться?
Для обучения модели нужны данные, причём чем больше их будет, тем лучше. Это важная особенность нейросетей: с увеличением количества данных всегда есть прирост качества, особенно на начальных этапах. Для нормального обучения обычно требуются сотни или даже тысячи часов записей голоса и соответствующие им тексты.
Дмитрий Ильвовский, доцент факультета компьютерных наук НИУ ВШЭ
На вход модели подаются элементарные блоки — обучающие примеры. Как правило, это одно предложение или короткий текст. Далее модель переводит звук в текст, а потом на выходе сравнивает с текстом, который соответствует звуковой дорожке. Расшифрованный текст может отличаться от правильного, и тогда модель корректирует свою работу со звуком, чтобы текст совпал с правильным.
При распознавании голоса модель делит звуковой пример на элементы и определяет вероятность того, какому слову или части слова они соответствуют. Дальше работа ведётся уже с вероятностным распределением. Чем выше вероятность того или иного слова, тем больше шансов, что именно оно будет на выходе. При этом модель ещё и проверяет, насколько вероятно, что первый слог (или слово) может сочетаться с тем или иным вторым слогом (или словом), и выбирает наиболее вероятные предположения.
Далее из слов с помощью вероятностного распределения (но уже другого) составляются предложения. Модель смотрит, насколько, например, вероятно, что слова «Маша», «дорогая» и «привет» могут оказаться рядом. Итоговый текст с точки зрения модели наиболее вероятен или осмыслен. То есть таким образом модель учится учитывать контекст.
Кажется, что автоматические переводчики очень хорошо справляются со своей работой. И это действительно так. Поэтому сложно найти возможности для улучшений, хотя они есть. И ещё: современные модели перевода, основанные на нейросетях, требуют много данных. В некоторых случаях мы до сих пор сталкиваемся с проблемой нехватки достаточно качественных данных для обучения.
Екатерина Еникеева, разработчик службы качества машинного перевода Яндекса
А что будет, если разговаривающие люди вдруг перейдут на английский?
Модель, как правило, обучается для одного конкретного языка, иначе она будет путаться в похожих языках, где есть похожие сочетания звуков. Если нужна модель, которая будет работать для многих языков, то обычно на входе используют модуль, распознающий язык, а уже дальше модель будет переводить звук в текст. Иногда заранее известно, каким языком владеет пользователь, и при распознавании подключается модель, работающая с этим языком.
Дмитрий Ильвовский, доцент факультета компьютерных наук НИУ ВШЭ
Задачи распознавания языка называют задачами классификации: у нас есть заранее известное множество языков и нам нужно звуковую дорожку, которую мы имеем на входе, соотнести с одним из этих языков. На вход подаются, условно говоря, некие метки или уникальные идентификаторы языка, и модель учится определять их в звуковых фрагментах.
Так как эта задача проще, чем расшифровка звука, обученные модели достаточно качественно определяют язык. Правда, с текстом это сделать проще, со звуком — сложнее, потому что голосовые фрагменты порой сильно пересекаются в разных языках. Тем не менее можно сделать модель, которая будет работать с фиксированным набором разных языков. Она будет определять, какой язык наиболее вероятен в том или ином конкретном случае.
И всем этим занимаются компьютерные лингвисты?
Верно! Я занимаюсь разработкой машинного перевода и других функций Яндекс Переводчика: готовлю и обрабатываю данные — в основном параллельные корпуса, это текст с параллельным переводом на разные языки. Ещё я пишу код для бэкенда.
Екатерина Еникеева, разработчик службы качества машинного перевода Яндекса
Проще объяснить на примере: я работала над выводом вариантов использования слов и фраз под окном перевода. Нужно было собрать данные — предложения и информацию о них — из разных источников: субтитров, книг, новостей. И разработать алгоритм поиска и ранжирования выдачи. Тут задействуются разные технологии NLP: например, синтаксический анализ, оценка вероятности перевода.
Компьютерный лингвист — это прежде всего программист?
Основное время занимает написание кода, я программирую на Python и C++. Сейчас примерно половина дня уходит на разработку продуктовых фич, а вторая — на обучение моделей перевода.
Екатерина Еникеева, разработчик службы качества машинного перевода Яндекса
И то и другое требует каких-то повторяющихся действий: например, при подготовке данных. Я стараюсь такие действия автоматизировать, чтобы ускорить процесс. Ещё одна важная сторона работы — оценка качества. Всегда полезно посмотреть на результаты, проверить какие-то крайние случаи или, например, выделить систематические ошибки перевода.