Клипы против NN, чтобы создать чат-бота - PullRequest
0 голосов
/ 01 декабря 2018

Я впервые знакомлюсь с CLIPS и пытаюсь понять, является ли это лучшим способом реализовать чат-бота.Насколько я понимаю до сих пор, он широко используется для создания экспертных систем и полностью основан на правилах.Я пытался использовать NN для создания диалогового механизма, но он с треском проваливается даже для простых вариаций обучающих данных, которые очень легко обрабатываются с помощью правил.

Теперь правила могут быть написаны на любом языке.Каковы преимущества CLIPS над любым другим языком?

РЕДАКТИРОВАТЬ 1: Ответы показывают, что CLIPS является хорошим выбором, поскольку он использует алгоритм сопоставления с образцом.Однако, немного поэкспериментировав с CLIPS, я не смог понять, почему объявление правил, которые запускаются, когда активирован факт правила LHS, является лучшим подходом.Позвольте мне привести пример:

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

BOT: What are you looking for?
      1. grade
      2. subjects
USER: grade
BOT:  Enter stream name.
USER: electrical
BOT:  Enter student name
USER: john
BOT:  grade in electrical for john is 56%

Это сценарий CLIPS, который я написал для этого:

(defrule main-intent
(initial-fact)
=>
(printout t"What are you looking for?
1. grade
2. subjects
")
(assert(why))
(assert(intent (read)))
)

;;;======================================================
(defrule grade-intent
(intent grade)
=>
(printout t"Enter stream name."crlf)
(bind ?stream (read))
(assert (stream-name ?stream))) ;;;There should be stream name validator here

;;;======================================================
(defrule stream-name
(stream-name ?stream)
=>
(printout t "Enter student name "crlf)
(bind ?user (read))
(assert (user-name ?stream ?user))) ;;;There should be student name validator here

;;;======================================================
(defrule user-name-rule
(user-name ?stream ?user)
=>
(printout t"grade in " ?stream " for " ?user " is 56%" crlf)
(bind ?grade 60)
(assert(grade-is ?grade)))
;;;======================================================


(defrule explanation
(why)
=>
(printout t "==============================" crlf)
(retract 0)
(facts)
(printout t "==============================" crlf)
)

С другой стороны, у меня в Python есть диалоговый движок, основанный на правилах, где я обучил модель NLP извлекать намерение и сущность из пользовательского запроса.Я использую файл конфигурации, как показано ниже, для определения потока диалога:

ask_stream:
    call_python_fn: "validate_stream" # python routine that check against DB if stream exist. Returns value valid/invalid
    properties:
      prompt: "Enter stream name"
    transitions:
        valid: "ask_user" # if return value is valid, goto next state, ask_user
        invalid: "ask_stream" # else again ask for correct stream name

ask_user:
    component: "validate_user" # python routine that check against DB if student exist. Returns value valid/invalid
    properties:
      prompt: "Enter student name"
    transitions:
        valid: "hit_grade_api" # if return value is valid, goto next state
        invalid: "ask_user" # else again ask user

hit_grade_api:
    component: "grade_api" # python routine that hits an API to fetch grades
    properties:
      variable: "grade"
      prompt: "grade in"+%stream+"for"+%user+" is "+%grade

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

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Взгляните на уровень техники, чтобы понять, применимо ли это к тому, что вы пытаетесь сделать.Если вы ищете «исходный код eliza», вы найдете реализации этого чат-бота на нескольких языках (включая версию Java на https://github.com/codeanticode/eliza).). В этих программах используются скрипты, которые упрощают постепенное увеличение количества ответов, которые можно обрабатывать.Вот часть сценария для Eliza:

key: my 2
  decomp: $ * my *
    reasmb: Lets discuss further why your (2).
    reasmb: Earlier you said your (2).
    reasmb: But your (2).
    reasmb: Does that have anything to do with the fact that your (2) ?
  decomp: * my* @family *
    reasmb: Tell me more about your family.
    reasmb: Who else in your family (4) ?
    reasmb: Your (3) ?
    reasmb: What else comes to mind when you think of your (3) ?
  decomp: * my *
    reasmb: Your (2) ?
    reasmb: Why do you say your (2) ?
    reasmb: Does that suggest anything else which belongs to you ?
    reasmb: Is it important that your (2) ?

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

0 голосов
/ 02 декабря 2018

CLIPS является реализацией алгоритма RETE .RETE - это один из наиболее эффективных алгоритмов для реализации экспертных систем, поскольку он сводит к минимуму объем сопоставления с образцом, требуемый процессами логического вывода.

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

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

Еще одна причина попробовать CLIPS - это обширная документация , которая оченьХорошая отправная точка для людей, которые хотят изучать искусственный интеллект за пределами простых статистических решений, столь популярных в наше время.

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

CLIPS также хорошо поддерживается на Python благодаря его привязкам (более старые pyclips и более новые clipspy).Вы можете легко расширить язык CLIPS, внедрив в него код Python ( пример ).Это позволяет вам портировать любую библиотеку Python в CLIPS и сразу использовать ее.

0 голосов
/ 01 декабря 2018

У CLIPS есть множество преимуществ.

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

Прелесть заключается в подходе, ориентированном на правила.У вас есть отношение «если-то» с несколькими дополнительными понятиями, такими как значимость сверху.Таким образом, если логика меняется, вам нужно всего лишь изменить несколько правил, и все готово.А благодаря CLIPS с алгоритмом повторных вычислений он - несмотря на его абстрактную концепцию - очень быстрый.

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

В принципе можно предположить, что NN будет обобщать лучше с меньшими усилиями.Но сейчас я бы так не сказал.Вам нужно достаточно данных, и я полагаю, что вам не хватает необходимого количества на порядки.Кроме того, NN можно играть легко.Подумайте о боте Твиттера Microsoft TAY.Кроме того, у вас нет вычислительной мощности для обучения NN, который работает на том уровне, на котором вы хотите его выполнять.

Для чат-бота я бы выбрал CLIPS.Я думаю, что вы получаете максимальную отдачу от вашего доллара.Вам придется жить с ограничениями, но это нормально.Вы всегда можете расширить свой набор правил, пока не будете удовлетворены.И для новичка это лучше, потому что вы можете воспроизвести то, что он делает.

...