Подтвердить что ты не робот

Используя цепи Маркова (или что-то подобное) для создания IRC-бота

Я попробовал google и нашел мало того, что мог понять.

Я понимаю цепи Маркова на очень базовом уровне: это математическая модель, которая зависит только от предыдущего ввода состояния изменения. FSM с взвешенными случайными шансами вместо разных критериев?

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

Я не могу придумать поисковые термины, чтобы найти это, так может ли кто-нибудь связать меня или объяснить, как я могу создать что-то, что дает полуинтеллектуальный ответ? (если вы спросите его о пироге, он не начнет рассказывать о войне вьетнамской войны, о которой он слышал)

Я планирую:

  • Наличие этого бота в IRC-каналах для бит
  • Сбросьте любые имена пользователей из строки и сохраните как предложения или что-то еще
  • Со временем используйте это как основу для вышеуказанного.
4b9b3361

Ответ 1

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

  • Соберите статистику биграмм (смежных слов) из корпуса (сбор текста).
  • Создайте цепочку марков с одним состоянием на слово. Зарезервируйте специальное состояние для завершения текста.
  • Вероятность перехода из состояния/слова x в y является вероятностью слов y, непосредственно следующих за x, оцененных по относительным частотам биграмм в учебном корпусе.
  • Начните со случайного слова x (возможно, определяется тем, как часто это слово встречается как первое слово предложения в корпусе). Затем выберите состояние/слово y, чтобы перейти к случайным образом, принимая во внимание вероятность y после x (вероятность перехода состояния). Повторяйте, пока не нажмете конец текста.

Если вы хотите получить что-то полуинтеллектуальное из этого, тогда ваш лучший выбор - тренировать его на множестве тщательно собранных текстов. Часть "лотов" позволяет с высокой вероятностью давать правильные предложения (или правдоподобные IRC); "тщательно собранная" часть означает, что вы контролируете то, о чем она говорит. Представление цепочек Маркова более высокого порядка также помогает в обеих областях, но требует большего объема памяти для хранения необходимой статистики. Вы также можете изучить такие вещи, как статистическое сглаживание.

Однако, если ваш босс IRC на самом деле реагирует на то, что ему говорят, он занимает гораздо больше, чем цепочки Маркова. Это можно сделать, выполнив категоризацию текста (ака по темам) по сказанному, а затем выбрав цепочку Markov для генерации текста. Naïve Bayes - популярная модель для определения тем.

Керниган и Пайк в Практика программирования исследуют различные стратегии реализации алгоритмов цепи Маркова. Эти и генерация естественного языка в целом подробно рассматриваются Юрафским и Мартином, Речевая и языковая обработка.

Ответ 2

Вы хотите найти текстовое поколение Ian Barber (phpir.com). К сожалению, сайт отключен или отключен. У меня есть копия его текста, и я хочу отправить его вам.

Ответ 3

Мне кажется, вы одновременно пытаетесь выполнить несколько действий:

  • извлечения слов/предложений на холостом ходу в IRC
  • создание базы знаний
  • прослушивание чата, разбор ключевых слов
  • создать предложение относительно ключевых слов

Это в основном очень разные задачи. Марковские модели часто используются для машинного обучения. Я не вижу много обучения в ваших задачах.

larsmans answer показывает, как вы генерируете предложения из основанных на словах марков-моделей. Вы также можете тренировать весы в пользу тех пар-слов, которые использовали другие пользователи IRC. Но тем не менее это не будет генерировать предложения, связанные с ключевыми словами, потому что создание/уточнение марковской модели - это не то же самое, что "управлять" ею.

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