Да, цепь Маркова - это машина конечных состояний с вероятностными переходами состояний. Для генерации случайного текста с помощью простой цепочки Маркова первого порядка:
- Собрать статистику биграмма (смежная пара слов) из корпуса (сборник текста).
- Создайте цепочку марков с одним состоянием на слово. Зарезервируйте специальное состояние для конца текста.
- Вероятность перехода из состояния / слова x в y - это вероятность слова y , следующего сразу за x , по оценкам от относительных частот биграмм в тренировочном корпусе.
- Начните со случайного слова x (возможно, определяемого тем, как часто это слово встречается в качестве первого слова предложения в корпусе). Затем выберите состояние / слово y для случайного перехода, принимая во внимание вероятность y , следующую за x (вероятность перехода состояния). Повторяйте, пока не дойдете до конца текста.
Если вы хотите извлечь из этого что-то полуинтеллектуальное, то ваш лучший способ - обучить этому множеству тщательно собранных текстов. Часть "жребий" заставляет его с высокой вероятностью производить правильные предложения (или правдоподобные высказывания IRC); «тщательно собранная» часть означает, что вы контролируете то, о чем идет речь. Введение цепей Маркова высшего порядка также помогает в обеих областях, но требует больше места для хранения необходимой статистики. Вы также можете посмотреть на такие вещи, как статистическое сглаживание.
Тем не менее, если ваш IRC-бот действительно реагирует на то, что ему говорят, это на лот больше, чем у цепей Маркова. Это можно сделать, выполнив текстовую категоризацию (так называемое выделение темы) в отношении сказанного, а затем выбрав цепочку Маркова для конкретного домена для генерации текста. Наивный Байес - популярная модель для определения темы.
Керниган и Пайк в Практика программирования исследуют различные стратегии реализации алгоритмов цепей Маркова. Это, и генерация естественного языка в целом, подробно освещены Юрафски и Мартином, Обработка речи и языка .