Как я могу программировать простого чат-бота AI?

32
задан Rakete1111 21 September 2016 в 19:15
поделиться

8 ответов

Вы, вероятно, хотите изучить Цепи Маркова как основы для бота AI. Я записал что-то давным-давно (код, к которому я не горжусь вообще и нуждаюсь в некоторых модификациях для работы Python> 1.5), который может быть полезным стартовым местом для Вас: http://sourceforge.net/projects/benzo/

РЕДАКТИРОВАНИЕ: вот минимальный пример в Python Цепи Маркова, которая принимает вход от stdin и выходного текста на основе вероятностей слов, следующих друг за другом во входе. Это оптимизировано для журналов чата стиля IRC, но выполняющий любой текст достойного размера через него должен продемонстрировать понятия:

import random, sys

NONWORD = "\n"
STARTKEY = NONWORD, NONWORD
MAXGEN=1000

class MarkovChainer(object):
    def __init__(self):
        self.state = dict()

    def input(self, input):
        word1, word2 = STARTKEY
        for word3 in input.split():
            self.state.setdefault((word1, word2), list()).append(word3)
            word1, word2 = word2, word3 
        self.state.setdefault((word1, word2), list()).append(NONWORD)

    def output(self):
        output = list()
        word1, word2 = STARTKEY
        for i in range(MAXGEN):
            word3 = random.choice(self.state[(word1,word2)])
            if word3 == NONWORD: break
            output.append(word3)
            word1, word2 = word2, word3
        return " ".join(output)

if __name__ == "__main__":
    c = MarkovChainer()
    c.input(sys.stdin.read())
    print c.output()

Это довольно легко отсюда до, включают персистентность и библиотеку IRC и имеют основание типа бота, о котором Вы говорите.

23
ответ дан 27 November 2019 в 20:57
поделиться

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

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

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

5
ответ дан 27 November 2019 в 20:57
поделиться

Люди уже упомянули, что с сохранением информации не большой компонент типичных чат-ботов:

  • чистый Марков реализации могут выразить очень свободный вид состояния, если это выращивает свой словарь и таблицу в реальном time— более раннее произнесение собеседником - человеком может быть извергнуто случайно позже в conversation— но модель Маркова не имеет никакого свойственного механизма для выбора или создания таких ответов.

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

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

  • Создают стопку ключевого слова. Как Ваш человеческий вход предложений, проанализируйте ключевые слова от их операторов/вопросов и броска те ключевые слова на какой-то стек. Когда Вашему чат-боту не удается придумать что-то заставляющее для ответа на в новом input— или, возможно, просто наугад, для смешивания вещей up— вернитесь к своему стеку, захватите предыдущее ключевое слово и использование что отобрать Ваш следующий синтез. Для бонусных очков имейте бота, явно подтверждают, что он возвращается к предыдущему предмету, например, "Ожидают, ЧЕЛОВЕК, ранее Вы упомянули нечто. [Предложение, отобранное нечто]".

  • Встраивают подобную RPG логику диалога в бота. Как Ваш вход человека парсинга, переключите флаги для определенных диалоговых подсказок или содержания от пользователя и условно измените то, что чат-бот может говорить о, или как это связывается. Например, ощетинивание чат-бота (или выговор или смех) в грязном языке довольно распространено; чат-бот, который станет возмущенным, и условно , остается таким, пока не принес извинения , будет интересная вариация с сохранением информации на это. Вывод переключателя ко ВСЕМ ЗАГЛАВНЫМ БУКВАМ, добавьте конфронтационную риторику или требования или рыдание, и т.д.

можно ли разъяснить немного, что Вы хотите, чтобы состояние помогло Вам выполнить?

14
ответ дан 27 November 2019 в 20:57
поделиться

Я думаю для запуска этого проекта, было бы хорошо иметь базу данных с вопросами (организованный как дерево. В каждом узле один или несколько вопросов). На эти вопросы нужно ответить с "да" или "нет".

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

Редактирование: Вот является somple одним записанным в рубине, с которого можно запустить: rubyBOT

2
ответ дан 27 November 2019 в 20:57
поделиться

Я думаю, что можно посмотреть на код для Идиотский , и IIRC, он также использует Цепи Маркова.

Также проверяют идиотские кавычки , они были показаны на Кодировании Ужаса недавно, и некоторые веселы.

3
ответ дан 27 November 2019 в 20:57
поделиться

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

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

0
ответ дан 27 November 2019 в 20:57
поделиться

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

0
ответ дан 27 November 2019 в 20:57
поделиться

Если вы просто балуетесь, я считаю, что Pidgin позволяет вам настраивать поведение в стиле чата. Часть структуры, вероятно, фиксирует состояние того, кто и когда отправил сообщение, и вы хотите вести журнал внутреннего состояния вашего бота для каждого из последних N сообщений. Решения о будущих состояниях можно жестко запрограммировать на основе проверки предыдущих состояний и содержимого нескольких последних сообщений. Или вы можете сделать что-то вроде обсуждаемых цепей Маркова и использовать это как для синтаксического анализа, так и для генерации.

0
ответ дан 27 November 2019 в 20:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: