Привет. Меня зовут Александр Родченков, я занимаюсь речевой аналитикой в центре машинного обучения «Инфосистемы Джет». Тут я расскажу о биграммах и триграммах на примере реального, хоть и довольно скромного, кейса. Что же это за «граммы» такие, с чем их «едят» и зачем они нам? Кейс решал задачу сбора и обработки данных одной из продовольственных компаний. Сложность задачи заключалась в том, что в речи было очень много специфических терминов и аббревиатур. Как мы с этим справились, и с какими неожиданностями столкнулись после, читай под катом.
Биграммы и триграммы. Теория
Когда мы читаем текст, интуитивно понимаем контекст и знаем, какое будет последующее слово, исходя из предыдущих. Так, например, последовательность двух слов (двухсловное сочетание) образует биграмму, а трех — триграмму. Бывают и последовательности из четырех, пяти слов и больше. Именно граммы (я позволю себе именно так их называть далее по тексту) классически используются в построении языковой модели. Если коротко, то N-граммная модель рассчитывает вероятность последнего слова, если известны все предыдущие.
Исследовательские центры Google использовали N-граммные модели для широкого круга исследований и разработок. Например, для статистического перевода с одного языка на другой, распознавания речи, исправления орфографических ошибок, извлечения информации. Для этих задач были использованы текстовые корпусы, содержащие несколько триллионов слов.
Биграммы и триграммы: практикуемся в использовании
Кейс
В нашем кейсе заказчик для регистрации информации в отчет использовал специфические термины. Оператор надиктовывал на планшет информацию вроде «поле двадцать пять, оператор Иванов Алексей Михайлович, препарат аксиал двести сто литров, трактор мтз восемьдесят, госномер…»
Естественно, этих терминов не было в языковой модели, и результат работы был не очень. Вот тут на помощь и пришли граммы. Наша задача заключалась в расширении языковой модели новыми терминами, а точнее — в расширении словаря и модели грамм.
Нам понадобился специальный инструмент — набор программ SRILM. Использовали мы утилиты ngram-count и ngram.
1. Первый шаг — подготовка данных
Прослушав записи, мы выписали для себя неизвестные словосочетания, точнее, те, на которых модель распознавания речи чаще всего ошибалась.
На практике используется несколько иной подход и руками не приходится ничего делать, данных-то ого-го. Текст, как есть, обрабатывается скриптом, который разбивает предложения на слова, убираются стоп-слова и тому подобное. Результатами работы такого скрипта становятся справочник новых слов (тех, которых нет в языковой модели) и граммы.
Небольшой список словосочетаний для улучшения нашей модели следующий:
● трактор мтз госномер
● препарат аксиал
● препаратом аксиал
● тотал препарат
● обработка сплошными гербицидами
● опрыскиватель амазон
2. Второй шаг — построение модели
Итак, словосочетания есть, настала пора построить грамм-модель. Используем утилиту: на входе — наши словосочетания, на выходе — грамм-модель.
- ngram-count -wbdiscount -order 4 -text extra.txt -lm extra.lm.gz
wbdiscount — алгоритм сглаживания (Witten and Bell, 1991).
Пример нескольких биграмм из итогового файла грамм-модели. В начале каждой строки десятичный логарифм вероятности конечного слова.
-1.602058 опрыскиватель амазон
-1.90309 препарат аксиал
И еще один, более наглядный пример. При ошибке распознавания последнего слова неразборчиво произнесли, например, «Вася» — наиболее вероятное, нежели чем «вась» или «вас». Именно поэтому без грамм не обойтись ну никак.
-4.152215 привет вас
-4.018019 привет василий
-4.47028 привет вась
-3.772877 привет вася
Тут вам может показаться, что все прошло без сучка без задоринки, но не тут-то было.
О неожиданностях
На следующем этапе проекта, когда нам дали следующие тридцать отчетов для обработки, нас ждал сюрприз. В начале мы, как и положено, передали данные на разметку нашим коллегам. Им всего-то надо было послушать отчеты и записать эталонные тексты. Когда они попали ко мне в руки, прогнав через распознавалку, я удивился, почему же такая большая ошибка в точности распознавания….
Прослушав отчеты, по которым расшифровки получились с кучей ошибок, я смеялся и плакал…
Оператор надиктовывал информацию, безнадежно проигрывая ветру борьбу за микрофон! И в результате, половина данных оказалась неразборчивой. Естественно, переход ко второму шагу, — извлечение сущностей — не имел смысла.
Тут напрашиваются выводы:
● Надо всегда запрашивать наихудшие данные и проверять на них модели. На следующих шагах это избавит от лишней работы.
● Автоматизация невозможна без корректировки бизнес-процессов. Это — очевидная истина. В нашем случае, чтобы получить корректные расшифровки, заказчику нужно сформулировать технические требования для отчетов и проследить, чтобы сотрудники их выполняли. В этом случае можно будет получать данные нормального качества для расшифровки, и модель будет работать.
Я немного отвлекся от темы биграмм и триграмм, но без этого небольшого факапа кейс был бы слишком ровный, а мне не хотелось вводить вас в заблуждение, что бывают проекты по машинному обучению, которые проходят вообще без каких бы то ни было проблем.
Будет круто, если поделитесь своим опытом по распознаванию текста или по другим задачам речевой аналитики в комментариях.
Александр Родченков, центр машинного обучения «Инфосистемы Джет»
gleb_l
— А все вокруг и так вертится днем и ночью, — сказала Алиса, очень довольная возможностью блеснуть своими познаниями. — Земля делает полный оборот за двадцать четыре часа. Уж вам-то пора бы...
— Топора бы, топора! — сказали Ее Высочество.— И снять с нее голову!