Программы-собеседники: разработчику на заметку
Анализ фраз и построение ответа (идеи, которые можно использовать)

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

* * *

В пособиях по практической психологии нередко упоминается прием "перефразирование" (один из приемов, которым надо владеть, дабы прослыть умелым слушателем). Его можно использовать как в "содержательной" человеческой беседе (в случае, когда непонятно, что ответить на реплику собеседника, а отвечать что-то надо), так и в пустой болтовне. Например:
- Время от времени мне кажется, что ты умеешь читать мысли.
- Если я правильно тебя понял, ты считаешь, что я ясновидящий?


Или более простой пример:
- Ты ничего не знаешь.
- Ты считаешь, я ничего не знаю?


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

(использован фрагмент диалога с программой Ланса)

См. пример программы, меняющей 1-е лицо на 2-е и наоборот ("я-ты", "мой-твой"...) (архив RAR, 115 Kb)
Внимание! Программа только иллюстрирует принцип преобразования фразы. Правильное преобразование произвольной введенной реплики не гарантируется, т.к. количество рассмотренных словоформ крайне ограниченно. Кроме того, могут неправильно преобразовываться вопросительные предложения, вводные слова и т.д..

* * *

Вообще возможность распознавания синонимов, а также фраз, просто близких по смыслу, - очень большой плюс. Особенно часто бывает нужно распознавать ответы "Да" ("Ага", "Угу", "Конечно", "Разумеется", "Естественно" и т.д.), "Нет", "Не знаю" ("Понятия не имею", "Откуда я знаю?" и т.д.), приветствия ("Привет", "Здравствуй"...), прощания ("До свидания", "Пока", "Прощай", "До встречи"...). Конечно, можно было бы просто забить в базу энное число синонимов к каждому такому слову. Однако есть некоторые сложности. Во-первых, у слов бывают омонимы. Они не всегда верно распознаются даже в устной речи (в отрыве от контекста), а уж в письменной-то, где не ставится ударение, - тем более. Чаще всего возникают проблемы со словом "Пока" (очень многие программы ассоциируют это слово исключительно с прощанием). Довольно удачный выход из положения можно увидеть в программе Болтун:

- Не стоит.
- Ударение на какой слог ставить в слове "стоит"?

- Уже.
- Куда ударение в слове "уже" ставить?

- ...тогда ты меня поймешь.
- "Тогда" в смысле "в таком случае" или "в то время"?

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

* * *

Что касается распознавания форм слов (определить, что слово является, например, глаголом I спряжения, первое лицо, единственное число, время - прошедшее и т.п.), это вещь хотя и сложная, но полезная. Строго говоря, программа-собеседник (если это не искусственный интеллект, а именно программка, созданная для развлечения), умея это делать, сможет правильно обрабатывать многие фразы, даже не понимая их смысла (количество форм слов в русском языке хотя и крайне велико, но все же явно меньше, чем общее число даже наиболее часто используемых слов, поэтому такой путь перспективнее, чем простой поиск ключевых слов; лучше же параллельно использовать при анализе фразы и то, и другое). Пример возможной реакции:
- Глокая куздра штеко будланула бокра и кудрячит бокренка.
Варианты ответа:
- Будланула бокра? Почему?
- Наверное, все куздры время от времени кудрячат бокренка...
- А ты можешь будлануть бокра?
- А зачем она кудрячит бокренка?
- Такова судьба бокров. Ничего с этим не поделаешь.

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

* * *

Для генерации фраз можно использовать шаблоны. Этот вариант применяется уже давно, в очень многих программах развлекательного характера, но осмысленности в генерируемых текстах, как правило, мало - за исключением случаев, когда генерируемые тексты либо "псевдонаучные", либо определенной тематики - чем точнее задана тема, тем осмысленнее тексты. Например, генератор хокку (нерифмованные трехстишия):

{СДЕЛАЛ} {КАК}/{ОН}/{ГДЕ}.
Скрылся на ветру
Померанца аромат
В чашечке цветка.


{КАК} {ДЕЛАЮТ}/{КАКИЕ} {ОНИ}/{ГДЕ}.
Неподвижно спят
Первые листья плюща
В солнечных лучах.


{ОН}/{КАК} {ДЕЛАЕТ}/{ГДЕ}.
Аромат цветов
Сквозь дождь падает с небес
В зарослях травы.


{КАК} {СДЕЛАЛА}/{ГДЕ}/{КАКАЯ} {ОНА}.
Тихо спряталась
В зарослях сорной травы
Поздняя осень.


{КАК} {ДЕЛАЕТ}/{ГДЕ}/{КАКАЯ} {ОНА}.
Печально поет
У подножия горы
Дикая буря.


{КАК} {ДЕЛАЮТ}/{ГДЕ}/{КАКИЕ} {ОНИ}.
На ветру плачут
На неподвижных ветках
Первые цветы.


{СДЕЛАЛИ} {КАК}/{ОНИ}./{КАКОЙ} {ОН}.
Осыпались вдруг
Лепестки камелии.
Нежный вишен цвет.

(См. также: Другие примеры сгенерированных хокку; скачать программу)

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

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

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

© Инга Кесс

При полном или частичном использовании этих материалов на своем сайте не забудьте поставить ссылку на Растрепанный Блокнот :)...

 
На главную страницу
 
Все о программах-собеседниках

Hosted by uCoz