Алгоритмы генерации текста

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

Что такое генерация текста? Генерация текста это создание текста по определенному закону. Чем “человечнее” нужен текст тем сложнее алгоритм описывающий генерацию. Начнем с самых простых алгоритмов.

Алгоритм первый. Равновероятный. Если вероятность любой буквы алфавита (включая и пробел) примерно одинакова, то получим следующий текст:

пзятпедвярне поыйяьозпосиенапя моеывйоизчткн првждячашъ

Очевидно, что распознать что перед ним набор символов, а не текст поисковики могут. Значит этот алгоритм нам не подходит. Идем дальше.

Алгоритм второй. Частотно-вероятный. В любом реальном языке какие-то буквы встречаются чаще чем другие (например, в любом, достаточно большом тексте буква “О” будет составлять 11% от всех букв, а вот твердых знак всего лишь 0.03%). Учитывая это, а также что в среднем, в слове 8 букв, можно получить такие результаты:

аонлатраеа оноон илзаеок онаое тло енасопна онрвемду кяпоае

Уже что-то начинает вырисовываться, но все еще очень плохо.

Алгоритм третий. цепи Маркова. Этот алгоритм и его производные, являлся одним из самых популярных несколько лет назад. Но поисковые механизмы не стоят на месте. Вкратце, алгоритм такой – если проанализировать текст, то увидим что вероятность сочетаний пар букв различается. Например, после буквы “о” с гораздо большей вероятностью следует “р” чем “м”.  На практике использовались более сложные алгоритмы – исследовалась вероятность появления за данным словом другого слова или пары слов. На основе этих данных генерировался текст. Вот пример работы генератора над этим абзацем:

Назад но поисковые механизмы не стоят на практике использовались. Более сложные, алгоритмы исследовалась.

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

Алгоритм четвертый. Генерация по паттерну. Давайте глянем в сторону программ проверки правильности написания (тот же SpellCeck в MS Word). Что же они делают? Они проверяют правильность расстановки запятых, точек и прочих знаков препинания, проверяют некие простые лингвистические правила. ПС безусловно все это умеют. Значит, что бы выдать генерированный текст за настоящий нам необходимо создавать его по определенным правилам. Так как, правил в русском языке в разы больше чем в английском, рационально использовать так называемый паттерн или шаблон. Рассмотрим простой пример предложения:

Солнце светит горячо и ярко

Если составить шаблон по членам предложения и частям речи, опустив предлоги и союзы, то получим:

1.$Подлежащие $сказуемое $обстоятельство1 и $обстоятельство2
1.$Существительное $глагол $наречие1 и $наречие2

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

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

Закладка Постоянная ссылка.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *