NLU: что это такое и как с этим работать?
Что такое NLU?
NLU (с англ. Natural-language understanding, понимание естественного языка) – это система/сервис/программа, отвечающая за разбор высказываний пользователей/клиентов и понимание их смысла. Является наиболее сложной и важной частью диалоговой платформы и в целом разговорного ИИ. Он необходим как в чат ботах, так и в голосовых ботах и даже в голосовых интерфейсах.
В самом упрощённом виде, процесс "понимания" языка состоит из следующих крупных этапов:
- предварительная обработка текста (запроса)
- классификация запроса, соотнесение с одним из классов, известных системе (определение намерения)
- извлечение параметров запроса (извлечение сущностей)
Естественный язык – это язык, который используется группами людей для передачи информации друг другу, для общения. Естественным он называется, потому что образовался и развивается естественным путём, то есть его не создавала группа людей целенаправленно. Например, русский язык, английский, немецкий, французский, испанский и далее.
Агент – это обученная и пригодная для использования модель NLU.
Модель – это несколько нейронных сетей и набор правил, характерные для конкретной проблемы/предметной области/сценария/вида диалогов. Модель включает данные для обучения, конкретный набор правил и обученные нейронные сети.
Намерение – это то, что хочет пользователь, его замысел, что он хочет получить от бота, какая цель его обращения, в чём его суть и смысл.
Сущность – это конкретный параметр текста, какая-либо точная информация из него, например дата, время, место, адрес, ФИО, числа, денежные единицы, расстояние, продолжительность, номера телефонов, количество чего-либо, температура, объём, url адреса.
Как устроен NLU?
В нашем случае NLU состоит из 5 частей:
- Подготовка текста, она включает:
- Лемматизация – приведение каждого слова в каждом обучающем примере к его начальной/словарной форме (т.е. к форме, в которой слово пишется в словаре).
- Стемминг – удаление в каждом слове в каждом обучающем примере окончаний и некоторых простых суффиксов (т.е. от каждого слова остаётся только его основа).
- Лемматизация со стеммингом – сначала выполняется лемматизация, а затем стемминг.
- Удаление всех символов, кроме букв русского и английского алфавита, знаков препинания и цифр (данная операция зависит от языка, с которым работает NLU).
- Перевод текста в последовательность чисел – так как любые компьютеры могут работать только с числами, текст в начале необходимо перевести в набор чисел по определённым правилам. За это отвечает "языковая модель".
- Классификация текста/определение намерения/темы – это соотнесение полученного текста с одним из известных классов/намерений. Это попытка понять, что хочет пользователь, какое у него намерение, что он хочет получить от бота, какая цель его обращения, в чём его суть и смысл.
- Извлечение стандартных (базовых) сущностей – это извлечение базовых параметров текста, таких как: дата, время, место, адрес, ФИО, числа, денежные единицы, расстояние, продолжительность, номера телефонов, количество чего-либо, температура, объём, url адреса.
- Извлечение специфичных сущностей – это извлечение специфичных для конкретного варианта использования параметров текста (например, вес и размеры посылки, название товара или услуги, вид транспорта, вид деятельности).
Каждая часть, за исключением четвёртой, зависит от результатов работы предыдущих частей.
Результатом работы NLU является классифицированное намерение и набор сущностей, которые удалось извлечь. Затем эти значения отправляются в "ядро" бота, где уже на их основании и с помощью конкретного сценария выбирается ответная реакция бота.
Следует помнить, что NLU в любом случае, вне зависимости от присланного текста и каких-либо параметров, пытается соотнести его с каждым намерением, которое он знает. А в ответе он выводит список из всех намерений и вероятность принадлежности присланного текста к каждому намерению.
Как работает NLU и как его обучать?
Большую часть NLU составляют искусственные нейронные сети. То есть NLU работает по тем же принципам, что и используемые в нём нейронные сети.
Для понимания работы нейронных сетей можно применить аналогию с обучением ребёнка. Изначально у нейронной сети, как и у ребёнка, нет никакого понимания того, что от неё хотят. И мы, с помощью обучающих примеров, должны научить нейронную сеть делать то, что нам нужно, как маленького ребёнка мы учим понимать алфавит, простые распространённые фразы, читать, строить предложения, говорить и т.д.
Это означает, что от качества и количества наших обучающих примеров полностью зависит то, как хорошо NLU будет понимать и уметь делать то, что мы от него хотим.
Соответственно, для получения качественной модели NLU, нужно:
- максимально чётко разграничивать намерения, что бы вероятность смыслового пересечения между намерениями была минимальной
- подбирать обучающие примеры так, что бы они были максимально приближены к реальным возможным фразам от живых людей
- покрывать обучающими примерами как можно больше различных ситуаций, характеризующих конкретное намерение
- пытаться максимально полно "смоделировать" конкретную проблему/предметную область/сценарий/вид диалога, что бы у NLU было как можно более целостное представление о том, "что он делает"
- прорабатывать и анализировать основные паттерны поведения людей в тех темах/проблемах/сценариях, которым мы хотим обучить NLU
- учитывать, что намерения никак не связаны с "ядром" бота, сценарием и контекстом диалога, в котором они используются. Они всегда должны отражать суть фразы или слова без учёта контекста диалога
В большинстве случаев, качество и точность обученной модели NLU зависит примерно на 60-70% от того, на каких данных она обучалась, и примерно на 30-40% от самого NLU. NLU – это по сути инструмент, который мы обучаем и используем для анализа фраз от людей, их реакций на те или иные события, их поведения, целей и намерений.
Так же большую роль в работе NLU играет языковая модель. Она отвечает за перевод слов в последовательность чисел. От качества этого перевода зависит то, сколько слов будет понимать NLU, будет ли он различать похожие слова, синонимы и антонимы, корректно обрабатывать фразы с ранее неизвестными словами.
Сейчас языковая модель строится следующим образом: все обучающие примеры в каждом намерении разбиваются на слова и словосочетания, затем они объединяются в один общий список и каждому слову и словосочетанию присваивается уникальное число. Этот подход имеет много недостатков и в будущем будет заменён другим, более качественным и точным, который будет содержать несколько миллионов слов и связей между ними.
Однако и на данный момент, и в будущем, особенно важно максимально полно прорабатывать предметную область будущей модели, что бы все компоненты получили целостное представление о том, "что они делают".
Рекомендации по обучению NLU
Для пользователей NLU процесс его обучения заключается в формировании списка намерений, сущностей и обучающих примеров для них в виде различных текстовых фраз.
Хоть NLU у нас существует относительно недолго, мы уже успели выделить основные рекомендации по формированию данных для обучения NLU, что бы получить стабильную и качественную модель.
Условно все намерения можно разделить на 2 "вида": значимые и обычные. Значимые намерения – это намерения, которые сильно влияют на ход диалога с клиентом, от которых зависит исход диалога и удовлетворённость клиента общением с ботом. А обычные намерения – это все остальные.
Основные рекомендации следующие:
- Значимые намерения должны содержать не менее 30 обучающих примеров, а обычные - не менее 15. Если обучающих примеров будет меньше - NLU не сможет полноценно понять, что из себя представляет это намерение и в чём его смысл.
- Не допускается сильный разброс в количестве обучающих примеров в намерениях. Допустим разброс не больше 15% внутри одного вида намерений.
- Примеры для намерения нужно составлять не просто по ключевым/опорным словам/словосочетаниям, но и добавлять различный контекст к ним. То есть опорные слова должны быть в обучающих примерах в разных местах, должно быть много разных вариантов употребления опорных слов и количество слов в обучающих примерах так же должно отличаться. Ключевое/опорное слово/словосочетание - это самое значимое слово в некотором наборе обучающих примеров, которое несёт больше всего смысла. Например, ключевое/опорное слово "оплатить" или "оплатить картой" в намерении "Как оплатить картой". В таком случае, контекстом будут примеры вида "как оплатить", "хочу оплатить картой", "можно ли оплатить", "хотел бы оплатить картой", "оплату картой принимаете" или даже "вы карту принимаете".
- Не допускается использование одних и тех же или очень похожих по смыслу обучающих примеров в разных намерениях. Это приведёт к ошибкам при распознавании намерений, потому что NLU будет сложно определить, какое именно намерение имеется ввиду.
- Не допускаются намерения с крайне низким числом примеров, например 2-3-5-8-10. В противном случае NLU не сможет научиться корректно его определять в ситуациях, когда полученный текст очень слабо похож на какой-либо в обучающих примерах.
- При использовании сущностей необходимо учитывать, что многие из них являются стандартными (базовыми) и извлекаются по умолчанию. То есть такие сущности, как дата, время, место, адрес, имя, ФИО, число, сумма и прочее заводить не имеет смысла - они извлекаются в любом случае и только излишне усложнят обучающие примеры.
Считается, что для качественного обучения NLU нужно хотя бы 500-800 обучающих примеров. Однако мы стремимся сильно уменьшить их количество без особых потерь в качестве и точности работы.
Updated over 4 years ago