Введение в семантическое моделирование

Dmitriy Monakhov
7 min readJun 29, 2018

Эта статья содержит простое описание идеи семантического моделирования для решения задачи обработки запросов на естественном языке (NLP).
Так как семантическое моделирование часто сравнивается с лингвистическим, лучше всего начать со сравнения обоих подходов.

Linguistic vs. Semantic

Семантические и лингвистические модели определяют формальный способ кодирования понятий естественного языка. Упрощенно говоря, основное различие в подходах заключается в типе кодируемой информации. Лингвистическая модель оперирует лингвистическими категориями, такими как существительные, глаголы и так далее, а семантическая — смысловыми, такие как ПЕРСОНА или КОМПАНИЯ.

И лингвистический и семантический подходы к анализу текстов появились примерно в одно и тоже время, в семидесятых годах. Лингвистическое моделирование постоянно развивается и на протяжении многих лет является основополагающей базой для общего развития NLP.
Семантическое моделирование, в свою очередь, вызвало первоначальный всплеск интереса, но быстро отступило на задний план из-за технических сложностей реализации. Тем не менее, в последние годы интерес к семантическому моделированию возрождается. На сегодняшний день данный подход является основой почти всех коммерческих NLP ассистентов, таких как Google assistant, Cortana, Siri, Alexa и так далее. Данный подход является базовым и для компании ​​DataLingvo (компания, развивающая идею семантического моделирования, в которой работает автор статьи).
Самый простой способ понять разницу между семантической и лингвистической грамматикой — рассмотреть следующую иллюстрацию:

Один и тот же текст здесь разбирается согласно разным критериям.

Нижняя часть анализируется с использованием традиционной лингвистической грамматики, и как результат мы видим набор POS тегов (Point of of Speech): NN для существительных, JJ для прилагательного и так далее.

Верхняя часть — результат использования семантической модели, и вместо отдельных слов, с POS тегами, слова и словосочетания образуют более высокоуровневые семантические категории, такие как DATE или GEO.

Эта способность группировать отдельные слова в высокоуровневые семантические сущности была введена для разрешения важной проблемы, характерной для ранних NLP система — лингвистической неопределенности.

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

Лингвистическая неопределенность

Посмотрите на картинку внизу

Пусть наша задача найти в тесте строку по существующему шаблону.

На картинке представлены два предложения со схожей структурой на выходе лингвистического анализатора.

POS теги у них практически совпадают, но предложения совершенно не похожи друг на друга. Поиск/сопоставление предложений с совпадающими или схожими тегами ничего нам не даст.

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

С другой стороны, семантическое моделирование позволяет разрешить подобные неоднозначности простым и гарантированно надежным способом. Используя правильно построенную семантическую грамматику, слова “friday” и “Alexy” будут отнесены к разным элементам модели, как следствие в данных предложениях не будет найдено ничего общего.

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

Пример использования семантической грамматики

Рассмотрим максимально простой вариант семантического моделирования.
Независимо от типа конфигурации, грамматика модели определяется как совокупность семантических сущностей, где каждый объект имеет (как минимум) имя и список синонимов, с помощью которых этот объект может быть обнаружен в тексте.
Пример. Простейшее определение объектов WEBSITE и USER с их синонимами:

<WEBSITE>:
- website,
- http website,
- https website,
- http domain,
- web address,
- online address,
- http address
<USER>:
- user,
- web user,
- http user,
- https user,
- online user

Учитывая введенную грамматику, все последующие предложения, такие как

  • Website user
  • HTTP address online user
  • Website online user

будут поняты и представлены как те же две семантические сущности:

<WEBSITE> <USER>

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

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

Предопределенность против вероятности

Задача NLP ассистента — разобрать предложение и обнаружить в нем сущности, определяющие intent.

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

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

Как результат, семантическая грамматика гарантирует качество системы.

Вероятностный подход может прекрасно работать для многих задач, таких как категоризация документов, разметка текстов по настроению, поддержка некоторых чатботов и так далее — но все это просто невозможно использовать например, для основанных на NLP / NLU систем построения отчетов и выдачи данных бизнес аналитики.

На самом деле зачастую не имеет большого значения, верно ли вы определили настроение текста — с точностью 85% или 86%, главное в данном случае правильно определенный вектор. Но отчет о продажах, должен на все 100% соответствовать данным системы учета. Даже результат с высокой степенью вероятности, такой как «ваши продажи за последний квартал составляли XXX долларов с вероятностью 97%», почти всегда бесполезен.

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

Универсальность или Данные узкого профиля

В отличии от лингвистической грамматики, универсальной для всех областей данных (поскольку она имеет дело с универсальными лингвистическими конструкциями, такими как глаголы и существительные), семантическая грамматика, сопоставляющая данные на основе синонимов, ограничивается определенной, зачастую очень узкой, предметной областью. Причиной этого является то, что для создания семантической модели нужно определить исчерпывающий набор всех ее сущностей и, самое сложное, множество всех их синонимов.
Для конкретной области данных это сложная, но решаемая задача, особенно когда на помощь приходят современные компьютерные системы. Но для общего случая, когда вам нужно понять любого собеседника, поднимающего любые темы, семантическое моделирование просто не работает.
Имеется ряд довольно успешных попыток продвижения идеи семантического моделирования в совокупности с курированием процесса обработки текста (контролем и разрешением коллизий со стороны человека), а также процессом контролируемого самообучения системы. Но несмотря на это, на сегодняшний день, факт остается фактом — семантическое моделирование может быть успешно применено только при работе с определенной, четко очерченной, узкой и хорошо описанной областью данных.

Стоит отметить, что популярный подход Deep Learning (DL) на сегодняшний день тоже недостаточно эффективно используется в NLP / NLU для работы даже с узкопрофильными данными. Это связано с отсутствием больших тренинговых наборов, необходимых для обучения модели DL, их просто неоткуда пока взять. Поэтому и по сегодняшний день семантическое моделирование чаще используется с более традиционными системами, использующими контроль коллизий и контролируемые самообучающиеся алгоритмы.

Курирование и контролируемое самообучение

Человеческий контроль (курирование) и контролируемые алгоритмы самообучения — два взаимосвязанных метода, помогающих решить проблему недостаточного для полноценной работы набора семантических сущностей и всех необходимых синонимов, при использовании новой семантической модели на начальном этапе ее разработки.

Как это работает:
Вы начинаете с создания семантической модели с базовым набором синонимов для тех семантических сущностей, которые можно относительно легко сконфигурировать и описать. После того, как приложение NLP / NLU, использующее эту модель, начинает работу, пользовательские запросы, которые не могут быть автоматически обработаны моделью, перейдут к Куратору. Во время процесса курирования пользовательский запрос будет скорректирован так, чтобы он мог быть обработан системой автоматически на базе существующей модели, а алгоритм самообучения учтет эту “поправку“ и автоматически использует ее при следующем таком же или подобном запросе уже без участия человека.

Последовательность работы:

  • Куратор во время работы изменяет запрос пользователя таким образом, что система сможет ответить на скорректированный вопрос автоматически с помощью существующей версии семантической модели. Как правило, это исправление орфографических ошибок, просторечных и прочих выражений, сленга, удаление стоп-слов или добавление отсутствующего или нераспознанного содержимого.
  • Это изменение пользовательского запроса запоминается алгоритмом самообучения и используется при повторном обращении с этим же или “схожим“ запросом. Поскольку изменение первоначально выполнялось человеком, подобное самообучение является контролируемым процессом, позволяющим избежать кумулятивных ошибок.

Особенно важно то, что система развивается и становится ”умнее” с каждой такой итерацией. Каждая процедура курирования (помощь при разборе неотвеченного автоматически запроса) и последующее самообучение делают модель все более полной. Таким образом разработчик модели может начать с малого, далее модель будет развиваться и настраиваться с помощью пошагового взаимодействия с человеком — процесс непохожий на большинство AI приложений.

Выводы

За последние 50 лет семантическое моделирование прошло через целую серию подъемов и спадов. Благодаря техническому прогрессу последних лет, а также новым методам самообучения и технологиям разрешения коллизий и курирования результатов, семантический подход стал на сегодняшний день основной технологией для большинства современных NLP / NLU систем. Когда вы в следующий раз спросите что-либо у Siri или Alexa — знайте, что где-то на серверах Apple или Amazon уже идет обращение к семантическим моделям, помогающим подобрать ответ.

--

--