В данной статье я наглядно показываю пример создания интеллектуальной систему поиска при купле/продажи жилых квартир и домов.
Теория
Я уже писал что такое ИС, и что это не тот "расширенный поиск" которые видны на kv.ee и city24.ee, скорей dom.ru и gdeetotdom.ru, propsmart, zillow, cazoodle потому что поиск должен быть не только многопараметрическим но и "взвешенным", как будто клиента опрашивал бы живой человек, эксперт в своей области.
Агент - аппарат или программа, способная действовать в интересах целей, поставленных перед ним пользователем или владельцем Mike Wooldridge
Язык входа и выхода
Для начала необходимо понимать, что на данный момент все магазины и рынки труда не учитывают человеческий фактор, именно поэтому каждый раз когда человек решает купить телефон, компьютер или автомобиль, поехать в туристическую поездку или поменять место работы то ему приходится просматривать мегабайты данных по одному или если повезёт - нескольких характеристиках.
Поэтому слева я выписал все возможные характеристики квартир, а справа - характеристики человека, которые могут нам быть полезны что-бы автоматизировать понимание человека.
Возможные переменные
| Квартира (База данных), по важности | Человек |
|
|
Определение целевой аудитории
| Зодиакальные характеристики в Sims 2 |
|||||
| Zodiac Sign | Neat | Outgoing | Active | Playful | Nice |
| Aries | 5 | 8 | 6 | 3 | 3 |
| Taurus | 5 | 5 | 3 | 8 | 4 |
| Gemini | 4 | 7 | 8 | 3 | 3 |
| Cancer | 6 | 3 | 6 | 4 | 6 |
| Leo | 4 | 10 | 4 | 4 | 3 |
| Virgo | 9 | 2 | 6 | 3 | 5 |
| Libra | 2 | 8 | 2 | 6 | 7 |
| Scorpio | 6 | 5 | 8 | 3 | 3 |
| Sagittarius | 2 | 3 | 9 | 7 | 4 |
| Capricorn | 7 | 4 | 1 | 8 | 5 |
| Aquarius | 4 | 4 | 4 | 7 | 6 |
| Pisces | 5 | 3 | 7 | 3 | 7 |
Как можно видеть, параметры квартиры достаточно обширны, а их важность достаточно субъективна. Для многих людей очень важно местоположение и площадь. Для других не обязательно жить в центре, потому что есть машина и для них важно что-бы дети ходили в школу неподалёку. Что-бы определить ценности надо понять человека. И самый простой способ - дедукция т.е. выводы от общего к частному.
Группировать аудиторию можно по разным признакам, в зависимости от вашей цели:
- Антропологически - мало зависящие от человека параметры (физиогномика, привлекательность, телосложение, состояние здоровья, группа крови, раса, национальность)
- Культурно (религия, политика, искусство, одежда и внешний вид, хобби, спорт, музыка, литература, кино, кругозор знаний)
- Психологически (эмоциональность, аккуратность, гуманизм, концептуализм, экстраверт-интроверт)
- Социально - статус и отношения с другими людьми (популярность, класс - воины/торговцы/интеллигенция, семья, этикет)
- Экономически (профессия, заработок, капитал, место жительства)
- Интеллектуально (образование, авторитетность, профессия, IQ)
- Исторически и географически по принципу "здесь и сейчас" (язык, поколение, возраст) в том числе - совместный опыт (одноклассники, однокурсники, однополчане, сокамерники, соседи, коллеги)
А если вы видели "Futurama", то заметили насколько различны характеры у персонажей. В действительности они характеризуют разные психотипы, тоесть устойчивые черты характера. Характер как и рост формируется до 20 лет и неустойчивые черты просто отторгаются, а комбинация оставшихся и описывает психотип.
Примером определения психотипа может быть и тест Шмишека. Существует также и эннеаграмма личности, описывающая все возможные характеры в девять групп, называющихся соответсвенно своей цифре:
- Реформисты, судьи, идеалисты. Стремятся к совершенству
- Помогающие, дающие, заботящиеся. Стремятся быть любимыми
- Достигающие, исполнители, искатели статуса. Стремятся к процессу победы и надежде
- Романтики, индивидуалисты, атеисты, актёры. Стремятся познать себя, самореализоваться, быть оригинальным
- Изучающие, эксперты, обозреватели. Стремятся делать выводы на основе существующих данных и быть этим полезными
- Герои, защитники, скептики. Стремятся к продолжительному постоянству мира.
- Энтузиасты, авантюристы. Стремятся к многогранному испытанию всего своими руками
- Боссы, кандидаты, утвердители. Стремятся управлять своей жизнью и судьбой
- Медиаторы, миротворцы. Стремятся избегать конфликты и по возможности уменьшать их силу, понимая доводы обоих сторон конфликта
Да и наверняка вы слышали про разделение на темпераменты:
- Холерик. Активен, эмоционален, агрессивен
- Сангвиник. Непостоянен, энергичен, в меру эмоционален, общителен
- Флегматик. Уравновешен, спокоен
- Меланхолик. Робок, замкнут, нерешителен
Но надо помнить, что это не основная наша цель, поэтому надо выделить только наиболее тематически важные черты входного языка.
| Психотип | Черты характера |
| Активные акцентуации | |
| Профессор / Доктор House (Шизоид) | теоретизирование, неэнергичен, неаккуратен, занимается тем что ему интересно, не общителен, критичен, иногда гениален |
| Бендер (Гипертрим) |
не любит подчиняться, критику не воспринимает, груб |
|
Лила (Параноидал) |
целеустремлённый, дисциплинирован, неэмоционален, требователен и критичен |
| Гермес (Эпилептоид) |
прагматичен, ленив, традиционен, морализатор, надежность, исполнительность, бюрократ |
| Зепп (Истероидал) | Демонстративен, завышенная самооценка, пуглив |
| Защитные акцентуации |
|
| Зойдберг (Астоник) | не уверен в себе, раним, ипохондрик, нерешителен |
| Фрай (Неустойчивый) |
плохо организован, ленив, безответсвеннен, болезненно относится к критике, легко попадает под чужое влияние |
| Эмми (Лабил) |
Весел, добродушен, открыт, частые смены настроения, внушаем и робок, мягкосердечен и добродушен |
| Киф (Сенситив) |
Эмоционален, впечатлителен, невыразителен, не способен дать отпор, утомителен, завидует успешным |
Практика
Реализовать простейший опрос можно на любом языке программирования, но поскольку эта работа ограничена университетскими требованиями, я использую Corvid.
Corvid Exsys
Corvid это графический интерфейс для создания экспертной/интеллектуальной/интеллигентной системы на основе правил - т.н. rule-based logic. Corvid генерирует несколько своих файлов (с раширениями .cvr, .cvd, cvru), которые можно использовать потом java-аплете (смотрите ниже пример).
Мы уже познакомились со входными и выходными переменными, но поскольку Corvid занимается фактически заменой языков программирования в своей узкой области, и в нём есть свои переменные нескольких типов:
- Static - статичные переменные с заданными вариантами, аналог
<input type='radio'> - Dynamic list - ??
- Continuous - по умолчанию аналог
<input type='text'> - Collection - фактические данные искомых объектов (если они есть и их много), аналог базы данных - вводится в виде текстового файла с tab-разделителем данных
- Confidence - тип переменной, указывающей на порядок результатов (ranking). Может вычисляться по алгоритмам - Sum, Average, Multiply, Min / Max.
Выбранные переменные
Глядя на возможные переменные, я пытаюсь обойтись наиболее важными - сразу бросаться и вводить все возможные типы я не хочу, можно сразу утонуть в обилии информации.
| Выходные переменные | Входные переменные |
|
|
Внутренние переменные служат в качестве базы знаний о человеке либо временному поиску объекта. Например это может быть список отклонённых предложений (квартир), из которых можно так же делать выводы.
- distance - рассчитываемая переменная между preferred_location и настоящим местоположением квартиры (разница в координатах), в метрах
- lift_importance - нужда в лифте или нижних этажах
Правила
Правила, или Business Rules это жёсткие выводы, которые симулируют гибкую логику (fuzzy logic) благодаря использованию алгоритмов взвешивания (важности) переменных. Если мы не хотим делать выводы, то можно просто прикрутить эдакий бегунок (slider) где пользователь будет гибко указывать насколько тот или иной параметр ему важен, а система уже будет переводить это в реальные цифры - мегабайты, метры 2, расход топлива и тп.
Но в Corvid'е все правила начинаются с ввода переменных - открываем Logic block, добавляем IF-условие и автоматически пользователю будет задан вопрос. После ввода можно добавлять THEN-действия присваивания или вызова комманд.
| Вход | Влияния | Пояснение |
| cost | price |
Цена - чем больше зарплата или капитал, тем дороже можно себе позволить жильё. Возможно для вас будет откровением, но формула для расчёта ежемесячной
платы на самом деле не такая простая. Вот к примеру как расчитывается
цена в эстонском SEB-банке (источник - javascript код на kv.ee) |
| family |
type |
Этаж и лифт - новорожденных таскать на 5 этаж очень тяжко |
| has_car |
distance, |
Расстояние между желаемым местоположением и фактическим может быть дальше Парковка или гараж необходимы для удобства |
| urgency | overall_state |
В случае спешки не подходят строящиеся дома. В случае если есть семья, то состояние должно быть лучше что-бы избежать стрессов |
| age |
rooms, |
Если молод и нет семьи то большой дом или пяти-комнатная квартира не подходят. |
| preferred_location(x,y) | location (x,y) |
Местоположение - В качестве предлагаемого места жительства могут выступать места учёбы, работы, места жительства родственников. |
| animals | garden_distance, activity, floor, has_lift, square_area |
Наличие собак говорит о ежедневных прогулках, поэтому желательно что-бы рядом был парк, а по ступенькам бегать можно было меньше. Для домашних животных, как и для детей надо больше пространства что-бы они не сходили с ума. |
| popularity |
has_open_kitchen, |
Общительность значит возможное гостеприимство, следовательно открытая кухня и местоположение ближе к центру города, либо собственный дом. |
| sport |
center_distance, garden_distance |
Лучше подальше от центра - там больше свободных тротуаров. Также лучше поближе к паркам, где можно побегать. |
| culina | has_open_kitchen, kitchen_area |
Любители готовить нуждаются в большой площади и желательно открытой кухне |
Под конец я избавился от спорта и предполагаемого местоположения - их я сделаю в более удобной среде.
Вопросы
Итого вопросы примерно такие..
- Сколько вы готовы тратить на кредит в месяц?
- Есть ли у вас семья?
- Сколько вам лет?
- У вас есть автомобиль?
- Как срочно вам нужна квартира?
- У вас есть домашние животные?
- Любите ли вы готовить?
- Считаете ли вы себя социально активным?
Правила как формулы
Вы наверняка догадываетесь что такое нечёткая логика. Например - до скольки лет можно ребёнка называть младенцем? Имитировать нечёткую логику можно либо указав вручную как дискретные входы влияют на выходы, либо что проще - математической формулой.
Пример из проекта. Я придумал вот такой вот расчёт на каком-то шаге для расчёта расстояния до парка:
[garden_distance] = [garden_distance]*0.6+0.4*10*(50 - 0.5*NUM([animals]))
Видно, что раньше это значение уже было каким-то образом установлено, но теперь я влияю на старое значение, заменяя 40% из старого значения плавающим значением веса, зависящего от уровня "животной активности" (оценивается тоже в %).
В приведённом случае зависимость линейная (функция NUM просто конвертирует строку в целочисленное значение), но приходится вспоминать и квадратичные, логарифмические и модульные функции, проходимые ещё в школе.
Вывод результатов
После ввода результатов, присваивания значений весов, в конце надо вывести результат о том чего мы добивались в результате теста - выходных переменных. Для этого в конце логического блока надо добавить "продвинутую комманду" DERIVE RESULTS, которая выведет переменные у которых был отмечен флажок "Final Results Display Tag".
P.S. quarti.ru я уже зарегил :)
По теме:
Комментарии
Я написала у себя в блоге отзыв:-)
http://www.creshka.ru/?p=489
как открыть твой файл по этой проге??
у меня нет крэка ???
скинь если есть возможность на мыло??? эту работу по Эс и крек!!заранее спасибо!!!!
Классические принципы экспертных систем в любой области, будь то промышленность http://zekakt.ru/expertSystems или недвижимость как у вас http://quarti.ru это нужно развивать причем очень активно!