DeepPavlov — диалоговый ИИ-фреймворк с открытым исходным кодом

Вот несколько ключевых концепций и как начать использовать DeepPavlov

Введение

В целом, целью большинства сред разработки чат-ботов является создание среды, которая позволяет техническим специалистам среднего уровня легко адаптироваться.

И только выполнение НЛП позволяет создать простую среду ввода-вывода данных.

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

  • Многозначность
  • отступление
  • Управление резервным распространением
  • Восстановление контекста
  • Автообучение
  • Домен и неактуальность
  • Обработка составных намерений
  • Смешанная модальность и разговорные компоненты
  • Контекстные объекты
  • Вариация

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

Чем более бескодовым или малокодовым становится решение, тем меньше вариантов тонкой настройки становится меньше. Тем более тонкая настройка, сложность.

Интерфейсы с низким кодом доступны через один или набор инструментов, которые по своей природе очень графичны; и изначально интуитивно понятен в использовании. Таким образом создается видимость быстрой адаптации и ускоряется процесс доставки решений в производство.

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

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

  • Формы и слоты
  • Намерения
  • Сущности
  • Генерация естественного языка (NLG)
  • Диалоговое управление
  • Отступление
  • Многозначность




Где вписывается DeepPavlov?

DeepPavlov определенно находится на более высоком уровне; будучи нативной/про-кодовой структурой с подходом машинного обучения.

DeepPavlov ссылается на семантический фрейм. Это включает в себя понимание естественного языка, включая обнаружение домена, намерение и объекты.

В мире DeepPavlov цифровой агент состоит из набора навыков, которым управляет Менеджер навыков.

Навык состоит из разных Компонентов.

  • Навык выполняет цель пользователя в определенной области.
  • Модель — это любая модель НЛП, которая не обязательно общается с пользователем на естественном языке.
  • Компоненты — это многократно используемые функциональные части модели или навыка.
  • Существуют модели на основе правил и модели машинного обучения.
  • Модели машинного обучения можно обучать независимо и в сквозном режиме, объединяя их в цепочку.
  • Диспетчер навыков выполняет выбор правильного навыка для формирования ответа.
  • Цепник строит конвейер модели из разнородных компонентов (на основе правил/ML/DL). Это позволяет обучать и делать выводы

Целенаправленный бот в DeepPavlov

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

В настоящее время DeepPavlov поддерживает два способа определения модели предметной области и поведения заданного целевого навыка — RASA (domain.yml, nlu.md, stories.md) или формат DSTC2.

Данные обучения/проверки/тестирования хранятся в файлах JSON… ниже приведен пример данных обучения:

[
  [
    {
      "speaker": 2,
      "text": "Hello, welcome to the Cambridge restaurant system. You can ask for restaurants by area, price range or food type. How may I help you?",
      "slots": [],
      "act": "welcomemsg"
    },
    {
      "speaker": 1,
      "text": "cheap restaurant",
      "slots": [
        [
          "pricerange",
          "cheap"
        ]
      ]
    },
    {
      "speaker": 2,
      "text": "What kind of food would you like?",
      "slots": [],
      "act": "request_food"
    },
    {
      "speaker": 1,
      "text": "any",
      "slots": [
        [
          "this",
          "dontcare"
        ]
      ]
    },
    {
      "speaker": 2,
      "text": "What part of town do you have in mind?",
      "slots": [],
      "act": "request_area"
    },
    {
      "speaker": 1,
      "text": "south",
      "slots": [
        [
          "area",
          "south"
        ]
      ]
    },
    {
      "speaker": 2,
      "text": "api_call area=\"south\" food=\"dontcare\" pricerange=\"cheap\"",
      "db_result": {
        "food": "chinese",
        "pricerange": "cheap",
        "area": "south",
        "addr": "cambridge leisure park clifton way cherry hinton",
        "phone": "01223 244277",
        "postcode": "c.b 1, 7 d.y",
        "name": "the lucky star"
      },
      "slots": [
        [
          "area",
          "south"
        ],
        [
          "pricerange",
          "cheap"
        ],
        [
          "food",
          "dontcare"
        ]
      ],
      "act": "api_call"
    },
    {
      "speaker": 2,
      "text": "The lucky star is a nice place in the south of town serving tasty chinese food.",
      "slots": [
        [
          "area",
          "south"
        ],
        [
          "pricerange",
          "cheap"
        ],
        [
          "name",
          "the lucky star"
        ],
        [
          "food",
          "chinese"
        ]
      ],
      "act": "inform_area+inform_food+offer_name"
    },

Теперь вы можете перебирать пакеты предварительно обработанных диалогов DSTC-2:

User utterances:
----------------
[   {'prev_resp_act': None, 'text': ''},
    {'prev_resp_act': 'welcomemsg', 'text': 'id like to find a restaurant'},
    {'prev_resp_act': 'request_pricerange', 'text': 'in appleton wiscon'},
    {   'db_result': {   'addr': '88 mill road city centre',
                         'area': 'centre',
                         'food': 'chinese',
                         'name': 'rice house',
                         'phone': '01223 367755',
                         'pricerange': 'cheap'},
        'prev_resp_act': 'api_call',
        'text': 'in appleton wiscon'},
    {'prev_resp_act': 'offer_name', 'text': 'restaurant'},
    {   'prev_resp_act': 'offer_name',
        'slots': [['food', 'irish']],
        'text': 'irish food'},
    {   'db_result': {},
        'prev_resp_act': 'api_call',
        'slots': [['food', 'irish']],
        'text': 'irish food'},
    {'prev_resp_act': 'canthelp_food', 'text': 'appleton wisconsin'},
    {'prev_resp_act': 'canthelp_food', 'text': 'thank you'},
    {'prev_resp_act': 'canthelp_food', 'text': 'good bye'}]
System responses:
-----------------
[   {   'act': 'welcomemsg',
        'text': 'Hello, welcome to the Cambridge restaurant system. You can '
                'ask for restaurants by area, price range or food type. How '
                'may I help you?'},
    {   'act': 'request_pricerange',
        'text': 'Would you like something in the cheap, moderate, or expensive '
                'price range?'},
    {   'act': 'api_call',
        'text': 'api_call area="dontcare" food="dontcare" '
                'pricerange="dontcare"'},
    {   'act': 'offer_name',
        'slots': [['name', 'rice house']],
        'text': 'Rice house is a great restaurant.'},
    {   'act': 'offer_name',
        'slots': [['name', 'rice house']],
        'text': 'Rice house is a great restaurant.'},
    {   'act': 'api_call',
        'slots': [['food', 'irish']],
        'text': 'api_call area="dontcare" food="irish" pricerange="dontcare"'},
    {   'act': 'canthelp_food',
        'slots': [['food', 'irish']],
        'text': 'I am sorry but there is no irish restaurant that matches your '
                'request.'},
    {   'act': 'canthelp_food',
        'slots': [['food', 'irish']],
        'text': 'I am sorry but there is no irish restaurant that matches your '
                'request.'},
    {   'act': 'canthelp_food',
        'slots': [['food', 'irish']],
        'text': 'I am sorry but there is no irish restaurant that matches your '
                'request.'},
    {'act': 'bye', 'text': 'You are welcome!'}]

Тестирование бота после обучения в блокноте Collab. Ссылка на блокнот ниже.





Подробнее о подходах к разработке диалогов

Подробнее читайте здесь

Холст Дизайна

Преимуществаэтого подхода:

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

Недостатокэтого подхода:

  • Сложность крупных внедрений
  • Управление изменениями и оценка воздействия
  • Устранение неполадок и определение точек разрыва разговора.
  • Несколько условий для каждого диалогового узла, на которые влияет изменение параметров.

Конфигурация диалога

Преимуществаэтого подхода:

  • Чуть более сжатое изложение беседы
  • Ограничительный характер запрещает импульсивные изменения.
  • Более технический характер с различными уровнями конфигурации.
  • Подходит для быстрого прототипирования.

Недостатокэтого подхода:

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

Собственный код

Преимуществаэтого подхода:

  • Неправильный с точки зрения среды разработки язык.
  • Гибкость и приспособленность к изменениям масштабирования (в принципе)
  • Требуются неспециализированные, специальные навыки или специальные знания.
  • Портирование кода или даже повторное использование.

Недостатокэтого подхода:

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

Истории машинного обучения

Преимуществаэтого подхода:

  • Все знают, что конечный автомат нужно упразднить; это достигает этого.
  • Время обучения разумное.
  • Специальное или специальное оборудование не требуется.
  • Никаких специализированных экспертов по машинному обучению и специалистов по данным не требуется… ИИ для масс.
  • Сложность скрыта в представленном упрощенном виде.

Недостатокэтого подхода:

  • Кому-то этот подход может показаться абстрактным и неосязаемым.
  • Опасения в случаях, когда необходимо собрать обязательные данные. Или там, где законодательство диктует условия. Однако здесь в игру вступает политика форм.

Заключение

Я нашел довольно много ссылок на сайте DeepPavlov неработающими, а некоторые демоверсии не работали. Тем не менее, нет никаких сомнений в технической и архитектурной проницательности платформы диалогового ИИ DeepPavlov.

DSTC2 очень похож на Rasa ML Stories.

Преимущества:

  • DeepPavlov открыт и легко настраивается.
  • Масштабируемость и гибкость имеют первостепенное значение.
  • Комплексная документация.

Задачи:

  • Чрезвычайно крутая кривая обучения.
  • Сложная и сложная среда.
  • Выполнение задач НЛП будет намного проще, чем диалоговый интерфейс.
  • Построение и производство крупномасштабного решения потребуют замечательной технической проницательности.



«Подпишитесь на мою рассылку.
НЛП/НЛУ, Чат-боты, Голос, Разговорный UI/UX, CX Designer, Разработчик, Вездесущие пользовательские интерфейсы, Ambient…кобусгрейлинг. мне"