NLU: что это такое и как с этим работать?

Что такое NLU?

NLU (с англ. Natural-language understanding, понимание естественного языка) –  это система/сервис/программа, отвечающая за разбор высказываний пользователей/клиентов и понимание их смысла. Является наиболее сложной и важной частью диалоговой платформы и в целом разговорного ИИ. Он необходим как в чат ботах, так и в голосовых ботах и даже в голосовых интерфейсах.

В самом упрощённом виде, процесс "понимания" языка состоит из следующих крупных этапов:

  • предварительная обработка текста (запроса)
  • классификация запроса, соотнесение с одним из классов, известных системе (определение намерения)
  • извлечение параметров запроса (извлечение сущностей)

Естественный язык – это язык, который используется группами людей для передачи информации друг другу, для общения. Естественным он называется, потому что образовался и развивается естественным путём, то есть его не создавала группа людей целенаправленно. Например, русский язык, английский, немецкий, французский, испанский и далее.

Агент – это обученная и пригодная для использования модель NLU.

Модель – это несколько нейронных сетей и набор правил, характерные для конкретной проблемы/предметной области/сценария/вида диалогов. Модель включает данные для обучения, конкретный набор правил и обученные нейронные сети.

Намерение – это то, что хочет пользователь, его замысел, что он хочет получить от бота, какая цель его обращения, в чём его суть и смысл.

Сущность – это конкретный параметр текста, какая-либо точная информация из него, например дата, время, место, адрес, ФИО, числа, денежные единицы, расстояние, продолжительность, номера телефонов, количество чего-либо, температура, объём, url адреса.



Как устроен NLU?

В нашем случае NLU состоит из 5 частей:

  1. Подготовка текста, она включает:
    1. Лемматизация – приведение каждого слова в каждом обучающем примере к его начальной/словарной форме (т.е. к форме, в которой слово пишется в словаре).
    2. Стемминг – удаление в каждом слове в каждом обучающем примере окончаний и некоторых простых суффиксов (т.е. от каждого слова остаётся только его основа).
    3. Лемматизация со стеммингом – сначала выполняется лемматизация, а затем стемминг.
    4. Удаление всех символов, кроме букв русского и английского алфавита, знаков препинания и цифр (данная операция зависит от языка, с которым работает NLU).
  2. Перевод текста в последовательность чисел – так как любые компьютеры могут работать только с числами, текст в начале необходимо перевести в набор чисел по определённым правилам. За это отвечает "языковая модель".
  3. Классификация текста/определение намерения/темы – это соотнесение полученного текста с одним из известных классов/намерений. Это попытка понять, что хочет пользователь, какое у него намерение, что он хочет получить от бота, какая цель его обращения, в чём его суть и смысл.
  4. Извлечение стандартных (базовых) сущностей – это извлечение базовых параметров текста, таких как: дата, время, место, адрес, ФИО, числа, денежные единицы, расстояние, продолжительность, номера телефонов, количество чего-либо, температура, объём, url адреса.
  5. Извлечение специфичных сущностей – это извлечение специфичных для конкретного варианта использования параметров текста (например, вес и размеры посылки, название товара или услуги, вид транспорта, вид деятельности).

Каждая часть, за исключением четвёртой, зависит от результатов работы предыдущих частей.

Результатом работы NLU является классифицированное намерение и набор сущностей, которые удалось извлечь. Затем эти значения отправляются в "ядро" бота, где уже на их основании и с помощью конкретного сценария выбирается ответная реакция бота.

Следует помнить, что NLU в любом случае, вне зависимости от присланного текста и каких-либо параметров, пытается соотнести его с каждым намерением, которое он знает. А в ответе он выводит список из всех намерений и вероятность принадлежности присланного текста к каждому намерению.



Как работает NLU и как его обучать?

Большую часть NLU составляют искусственные нейронные сети. То есть NLU работает по тем же принципам, что и используемые в нём нейронные сети.

Для понимания работы нейронных сетей можно применить аналогию с обучением ребёнка. Изначально у нейронной сети, как и у ребёнка, нет никакого понимания того, что от неё хотят. И мы, с помощью обучающих примеров, должны научить нейронную сеть делать то, что нам нужно, как маленького ребёнка мы учим понимать алфавит, простые распространённые фразы, читать, строить предложения, говорить и т.д.

Это означает, что от качества и количества наших обучающих примеров полностью зависит то, как хорошо NLU будет понимать и уметь делать то, что мы от него хотим.

Соответственно, для получения качественной модели NLU, нужно:

  • максимально чётко разграничивать намерения, что бы вероятность смыслового пересечения между намерениями была минимальной
  • подбирать обучающие примеры так, что бы они были максимально приближены к реальным возможным фразам от живых людей
  • покрывать обучающими примерами как можно больше различных ситуаций, характеризующих конкретное намерение
  • пытаться максимально полно "смоделировать" конкретную проблему/предметную область/сценарий/вид диалога, что бы у NLU было как можно более целостное представление о том, "что он делает"
  • прорабатывать и анализировать основные паттерны поведения людей в тех темах/проблемах/сценариях, которым мы хотим обучить NLU
  • учитывать, что намерения никак не связаны с "ядром" бота, сценарием и контекстом диалога, в котором они используются. Они всегда должны отражать суть фразы или слова без учёта контекста диалога

В большинстве случаев, качество и точность обученной модели NLU зависит примерно на 60-70% от того, на каких данных она обучалась, и примерно на 30-40% от самого NLU. NLU – это по сути инструмент, который мы обучаем и используем для анализа фраз от людей, их реакций на те или иные события, их поведения, целей и намерений.

Так же большую роль в работе NLU играет языковая модель. Она отвечает за перевод слов в последовательность чисел. От качества этого перевода зависит то, сколько слов будет понимать NLU, будет ли он различать похожие слова, синонимы и антонимы, корректно обрабатывать фразы с ранее неизвестными словами.

Сейчас языковая модель строится следующим образом: все обучающие примеры в каждом намерении разбиваются на слова и словосочетания, затем они объединяются в один общий список и каждому слову и словосочетанию присваивается уникальное число. Этот подход имеет много недостатков и в будущем будет заменён другим, более качественным и точным, который будет содержать несколько миллионов слов и связей между ними.

Однако и на данный момент, и в будущем, особенно важно максимально полно прорабатывать предметную область будущей модели, что бы все компоненты получили целостное представление о том, "что они делают". 



Рекомендации по обучению NLU

Для пользователей NLU процесс его обучения заключается в формировании списка намерений, сущностей и обучающих примеров для них в виде различных текстовых фраз.

Хоть NLU у нас существует относительно недолго, мы уже успели выделить основные рекомендации по формированию данных для обучения NLU, что бы получить стабильную и качественную модель.

Условно все намерения можно разделить на 2 "вида": значимые и обычныеЗначимые намерения – это намерения, которые сильно влияют на ход диалога с клиентом, от которых зависит исход диалога и удовлетворённость клиента общением с ботом. А обычные намерения – это все остальные. 

Основные рекомендации следующие:

  1. Значимые намерения должны содержать не менее 30 обучающих примеров, а обычные - не менее 15. Если обучающих примеров будет меньше - NLU не сможет полноценно понять, что из себя представляет это намерение и в чём его смысл.
  2. Не допускается сильный разброс в количестве обучающих примеров в намерениях. Допустим разброс не больше 15% внутри одного вида намерений.
  3. Примеры для намерения нужно составлять не просто по ключевым/опорным словам/словосочетаниям, но и добавлять различный контекст к ним. То есть опорные слова должны быть в обучающих примерах в разных местах, должно быть много разных вариантов употребления опорных слов и количество слов в обучающих примерах так же должно отличаться. Ключевое/опорное слово/словосочетание - это самое значимое слово в некотором наборе обучающих примеров, которое несёт больше всего смысла. Например, ключевое/опорное слово "оплатить" или "оплатить картой" в намерении "Как оплатить картой". В таком случае, контекстом будут примеры вида "как оплатить", "хочу оплатить картой", "можно ли оплатить", "хотел бы оплатить картой", "оплату картой принимаете" или даже "вы карту принимаете".
  4. Не допускается использование одних и тех же или очень похожих по смыслу обучающих примеров в разных намерениях. Это приведёт к ошибкам при распознавании намерений, потому что NLU будет сложно определить, какое именно намерение имеется ввиду.
  5. Не допускаются намерения с крайне низким числом примеров, например 2-3-5-8-10. В противном случае NLU не сможет научиться корректно его определять в ситуациях, когда полученный текст очень слабо похож на какой-либо в обучающих примерах.
  6. При использовании сущностей необходимо учитывать, что многие из них являются стандартными (базовыми) и извлекаются по умолчанию. То есть такие сущности, как дата, время, место, адрес, имя, ФИО, число, сумма и прочее заводить не имеет смысла - они извлекаются в любом случае и только излишне усложнят обучающие примеры.

Считается, что для качественного обучения NLU нужно хотя бы 500-800 обучающих примеров. Однако мы стремимся сильно уменьшить их количество без особых потерь в качестве и точности работы.