Универсальная база
Что может входить в запись базы некой абстрактной программы-собеседника?
- Ключевые слова последней реплики пользователя, с использованием логических операций. Например:
слово1 И (слово2 ИЛИ слово3 ИЛИ слово4) И (слово5 ИЛИ слово6) И НЕ слово7
Вместо собственно ключевых слов могут использоваться их синонимы. Например:
СИНОНИМ(да)
СИНОНИМ(нет)
СИНОНИМ(до свидания)
и т.д.
Такая запись полезна для сокращения объема базы. При этом список синонимов хранится отдельно.
Почему нельзя просто автоматически заменять все слова, для которых есть синонимы, на какой-то один из синонимов? Дело в том, что есть устойчивые словосочетания, для которых такая замена невозможна.
В дальнейшем под ключевыми словами будут подразумеваться или собственно слова, части слов, словосочетания и даже целые предложения (слово1, слово2...), или обозначения их синонимов (СИНОНИМ(слово1), СИНОНИМ(слово2) и т.д.)
- Ключевые слова предпоследней реплики человека (перед только что сказанной), с использованием логических операций.
- Ключевые слова последней реплики программы (перед той, которая сейчас будет выведена), с использованием логических операций.
- Ключевые слова контекста, с использованием логических операций (неважно, в чьей именно фразе встретились эти слова; глубина просмотра предыдущих реплик может быть фиксированной - например, 5 последних фраз, или же все предыдущие реплики диалога; можно также завести дополнительный параметр "глубина просмотра" и указывать его значение в записи базы, при этом по умолчанию - если глубина не указана - может просматриваться весь диалог)
- Наиболее актуальная тема разговора, или несколько тем - с использованием логических операций. В разговоре в той или иной степени могут затрагиваться различные темы. Программа может отслеживать уровень заинтересованности той или иной темой (например, по ключевым словам) и в дальнейшем реагировать в зависимости от того, какая тема больше всего затрагивалась в последнее время (желательно, чтобы с течением времени интерес к неподдерживаемой теме автоматически падал).
Почему отдельно записывается тема, а отдельно - ключевые слова контекста? Дело в том, что некоторые темы встречаются достаточно часто, и ключевых слов для этих тем много. В этом случае поле "тема" вместо конкретных ключевых слов позволит существенно сократить объем базы. В то же время есть темы, встречающиеся редко, и ключевых слов для них не очень много; их можно занести непосредственно в базу (если не отслеживать интерес к редко встречающимся темам, обработка фразы существенно ускорится).
- "Эмоции" программы. В простейшем случае - просто настроение (хорошее, плохое, нормальное); в более сложном варианте - что-то типа строки параметров, в которой могут присутствовать идентификаторы основных обнаруженных эмоций: радость, печаль, удивление, злоба, обида, равнодушие и т.д. Возможно, эмоции тоже записываются в виде логического выражения:
эмоция1 И (эмоция2 ИЛИ эмоция3)
и т.п.
Если идентификаторы не обнаружены, считается, что запись подходит для любого настроения.
- Эмоции, обнаруженные программой у человека. Формат записи тот же.
- Если программа, помимо вывода реплик, способна выполнять какие-то еще действия (открывать программы, выводить изображения и т.д.), в базе может учитываться факт выполнения тех или иных действий в недавнем прошлом.
- Варианты ответов (в случае, если программой обнаружено соответствие записи параметрам введенной реплики, выдается случайным образом один из ответов).
- Значения, на которые нужно изменить (уменьшить или увеличить) тот или иной параметр эмоционального состояния человека или программы. Если изменение значения того или иного параметра непосредственно в базе не прописано, оно не меняется. Это команда, выполняющаяся вне зависимости от того, выбрана ли запись данная базы в качестве ответной; важно лишь то, что запись в той или иной степени соответствует введенной фразе человека.
- Значения, на которые нужно изменить степень заинтересованности той или иной темой.
- Действия, которые нужно выполнить в случае, если запись была выбрана в качестве ответной (запустить то или иное приложение, закрыть окно программы и т.д.).
- Дополнительно: для записей, добавленных в процессе обучения, - автор записи, дата добавления.
- ...
При проверке соответствия записи базы введенной реплике и значениям различных параметров может выбираться или первая подходящая реплика, или наиболее подходящая (во втором случае нужно выработать критерии сравнения - с каким коэффициентом берется степень соответствия контексту, "эмоциям" программы, эмоциям человека и т.п.)
В некоторых случаях возможен также множественный выбор: для ответа на реплику человека используется сразу несколько записей базы. В таком случае удобно добавить еще одно поле к записи базы: "можно использовать в качестве дополнения к ответу".
Не все поля являются обязательными для заполнения. В каждой записи базы должно присутствовать хотя бы одно поле, по которому запись будет сравниваться с текущей ситуацией (ключевые слова последней и/или предпоследней фразы человека и/или программы, ключевые слова контекста, тема, эмоции человека, эмоции программы, недавно выполненные действия), и хотя бы одно поле с реакцией (ответные фразы, изменение эмоций, выполняемое действие). Например, возможна запись, вообще не учитывающая слова последней реплики человека, зато учитывающая последнюю реплику программы и ее "эмоциональное состояние"; или запись, при использовании которой не выводится никакая ответнаЯ фраза, зато выполняется действие или изменяется эмоциональное состояние.
При обучении в процессе диалога: в записи, добавляемой в базу, могут присутствовать только наиболее часто используемые поля. При редактировании базы с помощью специально созданной программы (редактора баз) или "вручную", в текстовом редакторе, возможно добавление записей с редко используемыми полями.
Синтаксис, приведенный в примерах, условный; естественно, в какой-то конкретной базе он может быть иным.
© Инга Кесс. Октябрь 2003.
При полном или частичном использовании этих материалов на своем сайте не забудьте поставить ссылку на Растрепанный Блокнот :)...
|