Мозг и когнитивные функции

суббота, 18 декабря 2010 г.

"Социальные" рекомендации #2

Продолжается "эпопея" социальных рекомендаций.

Даже, учитывая всю ущербность коллаборативной фильтрации и доказанные/неоспоримые преимущества персональных рекомендаций (которые сильные мира сего окрестили "примитивными") закончен прототип именно "социальных" рекомендаций. Прототип выполнен в рамках поставленной задачи - сделать "что-нибудь". Т.е. "от столба и до обеда". Прототип не содержит ни капли интеллектуальной собственности и основан ТОЛЬКО на open source решениях и алгоритмах. Прототип выполнен "в одно лицо" за 4-ре дня в режиме "full-time".

Тезисно, его особенности:
  • Поддерживается граф социальных связей (друзья/фоловеры);
  • Любая активность тех за кем вы следите попадает в список ваших социальных рекомендаций;
  • Персональные рекомендации строятся на основе коллаборативной фильтрации;
  • Ваши социальные рекомендации строятся как список рекомендованного вашими друзьями + коллаборативная фильтрация на подмножестве пользователей которые являются вашими друзьями;
  • НИКАКОЙ специализации на специфику образцов, равно как и НЕТ персональных предпочтений (на основе особенностей характера, вкусов, возрастных и гендерных характеристик). Кстати, именно такие рекомендации и являются “настоящими”. Учитываются ТОЛЬКО рейтинги;
  • В прототипе НЕ поддерживаются рейтинги по категориям: позитивные/нейтральные/негативные. Только средний рейтинг;
  • Прототип готов к использованию в односерверном варианте;
  • Используется НЕ эффективная сериализация (протокол между клиентом и сервером);
  • Прототип может использоваться в продакшине при ограниченных нагрузках (не более 150 друзей, не более 500 заблокированных экземпляров – это такие, которые удалили из списка рекомендованных и других ограничения – которые будут выявлены при стресс тестировании);
  • Прототип НЕ поддерживает холодный старт и НЕ содержит ничего, что имеет хоть какую-то ноу-хау составляющую или интеллектуальную собственность (ну что могло бы быть оценено в 100 рублей за произведение). Отсутствие холодного старта – это пустой список рекомендованного если не накоплена статистика;
  • Прототип может быть изменен/доработан (поддерживается гибкая система конфигурирования и кастомизации) либо полностью заменен;
  • Имеется рудиментарный WEB UI для демонстрации;
  • Прототип поставляется как один JAR + конфиг для него;
  • Хранилища прототипа реализованы полностью на файлах и не требуют наличия какой-либо базы данных.
Некоторые подробности

Как я писал ранее, "социальные" рекомендации являются "новой струёй" в индустрии. Они основываются на активностях ваших друзей (графе социальных связей) и банально сводятся к следующему алгоритму. Если вашему другу понравился образец (музыкальный трек/пылесос/автомобиль BMW x6/кефир/фильм/...) то всем его друзьям (фоловерам - т.е. тем кто за ним "следит" в соц.сетях) будут рекомендовать те же образцы, только с определенным "весом". Например, ваш друг купил образец - тогда вам рекомендуют тот же образец с весом X. Если ваш друг оценил образец (ну понравился ему купленный x6, а вы даже не имеете и трети стоимости этой бэхи) - тогда вам рекомендуют BMW x6 с весом Y. Если ваш друг, посоветовал остальным пользоваться iPad'ом (а вы не любите поделки Apple и предпочитаете Android) - тогда вам таки рекомендуют iPad с весом Z. Результирующий список "социальных" рекомендаций будет собран и отсортирован в соответствии с весами. Это и есть "гениальное" изобретение именуемое "социальными" рекомендациями. То что это полнейшая лажа - я оспаривать не буду, да и в полемику обычно не вступают те люди которые принимают решения и которым втюхивают подобное. Главное, что прототип делает то что заказывали :) На этом фоне, поискать похожие оценки (рейтинги) на подмножестве друзей методом подобия Пирсона или др. - будет "великой наукой" (кстати, прототип это тоже делает). Конечно, алгоритм может и должен быть более "замысловатым", но это уже "наука" и НЕ open source решения.

Перспективы
Учитывая предыдущий опыт общения "по существу" с сильными мира сего и с работодателями (которые и заказывали исполнение прототипа - сделать хоть что нибудь), даже не берусь прогнозировать дальнейшее развитие событий. Кроме того, одному за условную неделю, родить то, что ваяли коллективом из 5+ человек 6-ть месяцев и то, что преподносилось как "настоящее" ... это, ну, ... не хочу ругаться (с оговорками). Отвечая на любимый вопрос В.И. Ульянова-Ленина: "Кому это выгодно?" - могу сказать лишь то, что в сложной "иерархии" каждый преследует свои интересы. К сожалению, эти интересы не имеют общего вектора (как лебедь рак и щука). Время покажет.

Продолжение следует...

вторник, 7 декабря 2010 г.

"Социальные" рекомендации

Что это - новая струя в индустрии или хорошо забытое старое, а может профанация? С этим, нам и предстоит разобраться.

Коротко напомню читателям, что же такое есть эти "рекомендации".
С появлением в интернете большого количества контента и разнообразных товаров (доступных для on-line покупок) появилась задача автоматически рекомендовать посетителям сайтов (покупателям) другие, подобранные по различным критериям, товары/услуги или контент. С примерами подобных автоматических рекомендаций мы сталкиваемся постоянно. Когда покупаем книги на Ozon.ru (в секции "Купившие этот товар также покупают"), или когда когда выбираем музыку на last.fm (под названием "радио").

Коллаборативная фильтрация
В основе автоматических рекомендаций лежат методы поиска подобия среди различных элементов (их чаще называют образцами) в коллекции (каталоге). Причем, методов поиска подобия образцов много, они специфичны для каждой предметной области и существовали еще со времен первого алгоритма сортировки. Стоит ли говорить, о том что они (методы) так же давно и успешно применялись в различных программах. Однако, впервые, применимость этих методов для поиска подобия по рейтингу на множестве образцов была озвучена Дэвидом Голдбергом в 1992 году в статье "Using collaborative filtering to weave an information
tapestry" (и с тех пор ставшая известной как "коллаборативная фильтрация").

Основной принцип поиска подобия в "коллаборативной фильтрации" прост. Рассмотрим его на примере. Допустим у нас есть 1000 образцов и 5000 пользователей. Некоторые пользователи оценили некоторые образцы, выставив им оценку (от 0 до 10). Отсутствие оценки обозначено как "-". Отобразим это в виде таблицы, где в колонках представлены образцы, а в строках пользователи и выставленные ими оценки:

Пользователь/образец | Продукт:творог | Фильм:"Аватар" | ... | Продукт:Молоко |
---------------------|----------------|----------------|-----|----------------|
Василий | - | 8 | | 5 |
Петр | 10 | 3 | | 2 |
Степан | 5 | 10 | | 10 |
................... | .............. | .............. | ... | .............. |
кот Мурзик | 5 | - | | 10 |

В примере: пользователь Василий - не очень любит молочные продукты и никогда не ел творог, но любит фантастику, поэтому он поставил оценки творогу/фильму/молоку соответственно -/8/5; пользователь Петр - очень любит творог, но не переносит лактозу, кроме того, он аналитически подходит ко всему и увидел в фильме "Аватар" бесконечное количество несуразиц, поэтому он поставил оценки творогу/фильму/молоку соответственно 10/3/2; пользователь Степан - нейтрально относится к творогу, очень любит спец.эффекты в фильмах и жить не может без молока, поэтому он поставил оценки творогу/фильму/молоку соответственно 5/10/10; кот Мурзик индифферентен к фильмам и к большинству человеческих благ (в том числе on-line шоппинг), но очень любит молоко, а творог для плотоядного саблезубого хищника как нечто среднее (из разряда съесть можно), поэтому он поставил оценки творогу/фильму/молоку соответственно 5/-/10.

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

Эти и другие недостатки "коллаборативной фильтрации" я описывал ранее в статье о системе персональных рекомендаций Оракул. Однако, это не означает, что данный подход является "ущербным" и не может работать при однородных множествах, определенных допущениях и прочих оговорках. Кстати, об этом Голдберг и упоминает в своей статье. Только количество этих оговорок и допущений настолько велико, что не встречается в реальной жизни (только в "лабораторных" условиях и математических моделях).

Однородные множества
Конечно, можно собрать в одно множество только фильмы или только молочные товары, или прочее. Это повысит эффективность "рекомендаций". Кроме того, множество образцов не сравнимо мало с множеством пользователей. Последних может быть миллионы (в сравнении с тысячами образцов). И если образцы можно сгруппировать в сравнительно "однородные" множества (фильмы к фильмам а книги к книгам), то пользователей группировать по общим оценкам - это безумие. Каждый человек индивидуален! Каждый желает индивидуального подхода.

Как оценить пользователя и сравнить его с другими "похожими". Эта задача пересекается с психологией и множеством других "пограничных" наук. Я предлагал оценивать персональные особенности пользователей по их типам характеров (К. Леонгард – демонстративный, педантичный,
застревающий, возбудимый). Эта классификация наиболее коррелирует с предпочтениями человека. Можно оценивать человека и по его 7-ми радикалам (В. Пономаренко - истероидный, эпилептоидный, паранойяльный, эмотивный, шизоидный, гипертимный, тревожный). Так или иначе, каждый человек индивидуален. Даже в группе "друзей", каждый человек индивидуален и в одной группе не будет четко выраженных демонстративных типов характеров или эпилептоидов. Однако, группа "друзей" сокращает множество пользователей с миллионов до сотен и так же может повысить эффективность рекомендаций от "коллаборативной фильтрации". Это ограничение существенно повысит скорость расчета коэффициентов подобия (не требуется уже искать подобных пользователей среди миллионов, а следует искать среди сотен "друзей"), но всё еще сохранит все недостатки "не персонального" подхода. Т.е. коту Мирзику так и будут рекомендовать фильм "Аватар", потому что его человек Степан у него в друзьях (хозяин он кота).

Социальные рекомендации
Это новая струя? Хороший вопрос. Учитывая тенденцию развития социальных сетей и всевозрастающий спрос на "социальную дистрибуцию" контента, складывается ложное представление о том, что порекомендовав своим друзьям образец (отметив его как "Like" в Facebook или отправив ссылку на e-mail) подобные "рекомендации" в корне отличаются от "исчерпавшей свой потенциал" коллаборативной фильтрации. Если не учитывать персональность каждого пользователя, подобные рекомендации ни чем не лучше подобия на однородном множестве.

Забытое ли это "старое"? Однозначно! Так же как и является изобретением колеса. Я порекомендовал своему другу посмотреть фильм "Аватар" (или пить молоко с мёдом на ночь). И это уже не просто "рекомендация", а "социальная рекомендация". Ведь это мой друг.

Профанация ли это? Не хочу обижать самолюбие людей принимающих решения, но это аналогично всей предыдущей им "навешанной на уши лапше".


Продолжение следует ...

вторник, 7 сентября 2010 г.

Yota и "искусственный интеллект"

Здравствуйте уважаемые читатели.

Некоторое время назад, кроме системы рекомендаций ОРАКУЛ, я предлагал Yota использовать ПИПСа в виде консультанта. Причем, в отличии от раскрученного Инфа, у ПИПСа есть множество отличий (в том числе и ОТСУТСТВИЕ Flash "морды" - у ПИПСа на front-end слое подключены: REST, Jabber, MSN, Voice). Но! Или не с теми людьми общался, или по другим причинам (наличию нимбов, например) был однозначный отказ. И вот рузультат - http://www.yota.ru/ru/info/news/details/?ID=241222

Без комментариев :(
Кстати, мне кажется, или они и для аватарки своего "Инфа" взяли морду ПИПСа?

понедельник, 6 сентября 2010 г.

Открыт новый RSS канал

Здравствуйте уважаемые читатели.
Рад сообщить, что открылся новый новостной канал содержащий тренды и тенденции в развитии современных технологий (страничка канала и ее версия в формате atom).

Архитектура самой системы бесхитростная и основывается на сервисах Google Reader & rss4me поэтому не буду вдаваться в нудные детали. Главную идею можно передать одной картинкой.


Здесь (слева на право) поступает множество новостей из различных источников. Далее они фильтруются в rss4me но некоторые поступают в Google reader как не фильтрованные. В последнем, каждому сообщению присваивается соответствующая метка и мы получаем результирующий канал.

понедельник, 30 августа 2010 г.

Рекомендационная система, финальный раунд (R.I.P.)

Как я писал ранее "Индивидуальность и рекомендации", раунд 3, раунд 2, раунд 1, медленно и верно (стараниями всех заинтересованных лиц) мы пришли к сабжу проекта.

В начале, когда только начинались активности в этом направлении, мы много говорили о том какими должны быть идеальные рекомендации и о том, что коллаборативная фильтрация и методы оценки её эффективности не есть мера "идеальности" хорошей рекомендательной машины.

Поясню на примере.
У нас есть набор образцов: A, B, C, D, E, F.
Пользователю предлагались для оценки образцы A, D, F и он их оценил соответственно на 2, 3, 5. Мерой "идеальности" считается ответ от рекомендационной машины F=5 если ей скормить A=2 и D=3. Если ответ будет F=3 - это плохая машина. Однако, если ответом будет В=5 и C=5 - это мерой "идеальности" тоже оценивается как плохой ответ! Хотя никому не известно, какие бы оценки выставил пользователь для элементов B и C, по той простой причине, что ему эти элементы даже и не предлагали оценить :)

Так же получилось и в моем случае. На старте проекта, много разговаривая про "тривиальные" рекомендации и прочее я спрашивал у заказчика - вам нужен очередной алгоритм коллаборативной фильтрации (коих как грязи и в open source и в википедии) или ...? Ответ был однозначный - нужно ИЛИ!

Так и появилась система ОРАКУЛ. Которую, однако, оценивали методом идеальности с коллаборативной фильтрацией. В результате, то самое свойство системы "ИЛИ" сыграло злую шутку и результаты выдачи корректировались этой "ИЛИ" составляющей. Данное поведение отлично видно на диаграмме.
From ПИПС

С первого по 50 запросы ОРАКУЛ показывал "холодный старт", в то время как коллаборативная фильтрация (фиолетовый график) накапливала статистику. Затем, с 50 по 90 запросы поведение систем идентично. После 90 запроса включилась "ИЛИ" составляющая и ОРАКУЛ начал портить результаты "идеального ответа". Т.е. попросту показывать вместо F=5, B и C.

Из чего, при "правильной" интерпретации, были сделаны соответствующие выводы не в пользу ОРАКУЛ. А нужно было, оказывается, убрать а не добавить (как просили) эту "ИЛИ" составляющую, что бы пройти сравнительное тестирование! :)

Итого, финал - ОРАКУЛ похоронен.
Благодарю всех кто следил за этой историей и принимал в ней участие.

Появилась возможность вернуться к любимому ПИПС'у.

воскресенье, 1 августа 2010 г.

Словотворчество

С развитием мозга у ребенка обновляется словарный запас и в значительной мере изменяется процесс словотворчества. Из собственных наблюдений (в порядке убывания возраста):

# Канял Бубля - Тарас Бульба
# миссис поптень - Мэри Попенс
# разброненосить - защекотать
# крот взошел - вылез из норы
# белакрысая - белобрысая
# авосики - волосы
# мухарат - мошки (комары)
# ка - кошка, собака, ...
# дить - ребенок (постарше, который уже умеет ходить)
# буп - ребенок (обиженный)
# бактись! - победный кличь
# сесек - ребенок
# кутя пысь - самоидентификаци (я)

Не далекое будущее

среда, 16 июня 2010 г.

Мысли вслух


Некоторое время назад, мне приходилось заниматься архитектурной деятельность...

Причем, не опосредовано, как менеджер или исполнитель, а именно как системный архитектор/лидер группы/технический директор/играющий тренер. Не скажу, что это было что-то новое, это приходилось делать много и много раз до того. НО! тот раз был особый. И дело даже не в сложности задачи и не в фантастических и противоречивых бизнес требованиях, нет. Дело в обстановке, в которой приходилось это выполнять.

Вообще, системная архитектура - это всегда компромисс. Существует множество способов реализации и множество архитектурных решений поставленных бизнесом задач. Каждый способ имеет свои достоинства и недостатки. Сложность работы архитектора заключается в том, что бы правильно расставить весовые коэффициенты этим достоинствам и недостаткам. Иногда, мало значительный (для других) фактор архитектор оценивает как критический и делает выбор в пользу не популярного "в массах" решения. Однако, мало сделать выбор, необходимо еще за него и отвечать. Здесь степень ответственности такая же как у бизнеса. А допущенная архитектурная ошибка, и не правильно сделанный выбор (не верно расставлены веса) обязательно проявится потом. В виде невозможности расширения системы (из-за архитектурных ограничений) или выльется в большие затраты при переделке. Причем, чем раньше такие ошибки проявятся, тем они более дёшевы в исправлении. Отчасти, выявлению таких ошибок способствуют тестеры. Но что бы выявить такие ошибки тестеры должны быть ооочень профессиональными и иметь за плечами несколько таких самостоятельно построенных систем. Иначе, вероятность обнаружения архитектурных ошибок не высока, а количество "возможных проблем" поглотит даже здравый смысл (+ истерия).

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

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

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

P.S.
Любые совпадения с реальными людьми, компаниями и проектами случайны и не имеют ничего общего с реальностью.

воскресенье, 30 мая 2010 г.

Индивидуальность и рекомендации

Обнародованы интересные результаты исследований закономерностей поведения человека и групп людей. "Теория относительных предпочтений" набирает обороты и приобретает формальное описание.

Что это - очередная попытка создания единой теории поведения или еще один гвоздь в крышку коллаборативной фильтрации? На этот вопрос ответит время, будем следить...

Смотрите так же - поведенческая экономика.

четверг, 20 мая 2010 г.

Рекомендационные системы, раунд 3

Здравствуйте уважаемые читатели.

Очередной раунд сравнения рекомендационных систем завершен. Как я писал ранее краткое описание и второй раунд, продолжается история с разработанным прототипом "Оракул". Завершился тест коммерческой системы ИМХОНЕТ и по результатам посчитаны сравнительные метрики.

Результаты доступны в отчете.

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

В любом случае, система Оракул будет оптимизироваться и "настраиваться" на лучшие результаты.
Нет предела совершенству! Но делать это я буду по мере появления сил, средств и желания.

На этом этапе, можно считать, что я "отлюбил" рекомендационные системы, так же, как в свое время, отлюбил нейронные сети, генетические алгоритмы и мультиагентные системы.

С уважением,
Андрей

воскресенье, 16 мая 2010 г.

Рекомендационные системы, раунд 2

Здравствуйте уважаемые читатели.

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

Отчет о стендовых испытаниях, а так же основные принципы функционирования и общее описание архитектуры системы "Оракул" доступны в PDF формате.

С уважением,
Андрей

воскресенье, 4 апреля 2010 г.

Рекомендательные системы

Что это за системы, почему они окутаны завесой "тайны", что они делают и как у них такое получается? Как вообще возможно, что бы компьютер рекомендовал человеку фильмы и книги?

Рекомендательные системы это класс программ, ориентированных на формирование и выработку рекомендаций определенных образцов (товаров, услуг, фильмов, ...) с учетом ваших вкусов и предпочтений. Звучит уже как магия :)

Давайте взглянем изнутри, на эту "магию".
Методов определения "похожести" тех или иных данных по какому либо из критериев существует множество и они широко известны. К ним относятся евклидово расстояние или коэффициент корреляции Пирсона или коэффициент Жаккарда или манхеттенское расстояние и множество других. Однако, обо всем по порядку.

Рынок рекомендаций

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

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

Наиболее распространенные методики

При всем потенциале рынка и разнообразии объектов рекомендаций наибольшее распространение получили алгоритмы так называемой "коллаборативной фильтрации". Хотя, лежащие в его основе методы поиска подобия элементов на основе неких абстрактных величин, известны и применяются уже давно. К таковым методам относится евклидово расстояние или коэффициент корреляции Пирсона, однако термин "коллаборативной фильтрации" был впервые употреблен Дэвидом Голдбергом в 1992 году в статье "Using collaborative filtering to weave an information tapestry".

Алгоритм коллаборативной фильтрации по схожести пользователей

Алгоритм сводится к просмотру большой группы людей и отысканию в ней меньшей группы подобных друг другу, по какой либо метрике. Например, по выставленной оценке одному и тому же фильму. Ранжирования общего списка предпочтений для этой группы с последующим использованием полученного списка для всех людей (членов меньшей группы).

Алгоритм коллаборативной фильтрации по схожести образцов

Является небольшим улучшением фильтрации по схожести пользователей, но по сути своей отличается от него очень мало. Разница лишь в том, что на больших объемах данных неэффективно вычислять схожесть пользователей, в то время как схожесть образцов (товаров) является величиной статичной. Поэтому заранее вычислив схожесть образцов можно существенно сократить количества вычислений при формирования списка предпочтений для членов меньшей группы.

Вычисление степени подобия по евклидову расстоянию


  public static double calculateEuclideanDistance(List lst1, 

                                                  List lst2) {

    if (lst1==null||lst2==null) return 0;

    // Пересечение множеств

    boolean isEmpty = true;

    for (int i=0;i      if(lst2.contains(lst1.get(i))){isEmpty=false;break;}

    }

    if (isEmpty) return 0;

    // Квадраты разностей

    double sumq = 0.0;

    for (int i=0;i      Item ref1 = lst1.get(i);

      Item ref2 = null;

      for (int j=0;j        if(ref1.equals(lst2.get(j))){ref2=lst2.get(j);break;}

      }

      if(ref2!=null) sumq+=Math.pow(ref1.getRating()-

                                    ref2.getRating(),2);

    }

    return 1.0d/(1.0d+Math.sqrt(sumq));

  }


Вычисление степени подобия по коэффициенту корреляции Пирсона


  public static double calculatePearsonCoefficient(List lst1, 

                                                   List lst2) {

    if (lst1==null&&lst2==null) return 0;

    if (lst1!=null&&lst2==null||lst2!=null&&lst1==null) return -1;

    // Пересечение множеств

    List si = new LinkedList();

    for (int i=0;i      Item e=lst1.get(i); if(lst2.contains(e))si.add(e);

    }

    if (si.size()==0) return 0;

    // Простые суммы

    double sum1 = 0.0; double sum2 = 0.0;

    for (int i=0;i      Item e=lst1.get(i);if(si.contains(e))sum1+=e.getRating();

    } 

    for (int i=0;i      Item e=lst2.get(i);if(si.contains(e))sum2+=e.getRating();

    }

    // Суммы квадратов

    double sumq1 = 0.0; double sumq2 = 0.0;

    for (int i=0;i      Item e=lst1.get(i);

      if(si.contains(e))sumq1+=Math.pow(e.getRating(),2);

    } 

    for (int i=0;i      Item e=lst2.get(i);

      if(si.contains(e)) sumq2+=Math.pow(e.getRating(),2);

    }

    // Сумма произведений

    double sump = 0.0; 

    for (int i=0;i      Item e1 = lst1.get(i);

      Item e2 = null;

      for (int j=0;j        if(e1.equals(lst2.get(j))){e2=lst2.get(j);break;}

      }

      if (e2!=null) sump+=(e1.getRating()*e2.getRating()); 

    }

    double num=sump-(sum1*sum2/si.size());

    double den=Math.sqrt((sumq1-Math.pow(sum1,2)/si.size())*

                        (sumq2-Math.pow(sum2,2)/si.size()));

    if (den==0) return 0;

    return (num/den);

  }

Особенности наиболее распространенных методик

Среди особенностей коллаборативной фильтрации (самых распространенных методик) можно выделить такие:

  • Преобладающие матричные вычисления, при вычислении коэффициентов подобия, которые не всегда легко адаптировать для параллельных вычислений на распределенном кластере;
  • Унифицированные методы вычисления коэффициента подобия по 2-ум характеристика, даже если элементы имеют несколько характеристик, зачастую, все они сводятся к такому виду, что бы можно было легко найти геометрически близкие на плоскости элементы;
  • Детерминированность методов вычисления подобия не позволяет работать с плохо формализуемыми свойствами рекомендуемых образцов;
  • Зачастую, подобие образцов можно сформировать более эффективно на основе совершенно других признаков, нежели выставленных пользователями оценок (например, по ценовым диапазонам или по соотношению цены и качества и прочему);
  • Результат рекомендации образцов детерминирован, предсказуем и основывается не на индивидуальных предпочтениях конкретного пользователя, а на усредненных "групповых" предпочтениях;
  • Очень важным недостатком коллаборативной фильтрации является её "слепость" к новым образцам. Т.е. пока новому образцу не выставлена хотя бы одна оценка, он не попадает в рекомендательную выдачу.

Почему это работает плохо

Далее, рассмотрим некоторые особенности личности и, постараемся ответить на вопрос - насколько адекватны рекомендации хомяков, по критерию понравился/не понравился пылесос для чернокожего русского из Бруклина, по методу Голдберга...

Типы характеров по К. Леонгарду – демонстративный, педантичный, застревающий, возбудимый


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


Демонстративный тип, который получил свое название из-за способности людей подобного типа очень сильно выражать свои эмоции, с точки зрения окружающих — более сильно, чем они их переживают в данный момент. У демонстративной личности развита способность вытеснять из сознания некоторые травмирующие представления: она может лгать, не сознавая, что лжет, при этом ложь демонстративной личности отличается от сознательной лжи притворяющегося человека. Она не притворяется, а действительно в данный момент верит в то, в чем пытается убедить окружающих. Демонстративная личность глубоко вживается в требуемый ситуацией образ, ей присуща высокая артистичность в выражении любого чувства: горя, восхищения и т. д. Излюбленные образы, в которые перевоплощается демонстративная личность – невинная жертва, человек, которого не оценили, злоупотребили его доверием, использовали его редкие душевные и интеллектуальные качества и пр., либо благодетель человечества, уникальный специалист, нежное, тонкое существо, нуждающееся в неустанной опеке. При положительном социальном развитии демонстративная личность может стать прекрасным писателем, актером, социальным работником — благодаря умению вжиться в другой образ, понять другого человека.

Демонстративный тип часто восприимчив к сюжету фильма, имеет склонность к мелодраматичности, характерен частой сменой “фокуса” интересов. Очень ценит свою индивидуальность и слабо восприимчив к рекомендованным по коллаборативному принципу образцам.

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

Педантичный тип наиболее склонен к восприятию рекомендаций по коллаборативному принципу. Тщательное обдумывание при принятии решения часто опирается на чужой опыт (советы).

Следующий тип характера — застревающий. Для людей этого типа характерна очень долгая задержка сильных чувств (аффектов) ярости, гнева, страха, особенно когда они не были выражены в реальной жизни из-за каких-то внешних обстоятельств. Этот аффект может не затухать и вспыхивать с первоначальной яркостью спустя недели, месяцы, даже годы. Свои успехи застревающий человек переживает так же достаточно долго и ярко. Люди этого типа отличаются обидчивостью и злопамятностью. Самыми распространенными «идеями», темами застревания являются: ревность, преследование, месть. Эти люди могут сказать о себе: «Я могу простить обиду, но не забыть ее».

Застревающий тип более постоянен в своем выборе и наименее восприимчив к советам других пользователей. Подобие образцов для него более важно, при этом часто обладает инертностью в смене “фокуса” интересов. Причем подобие по одному конкретному (выбранному им самим) критерию, а не по совокупности.

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

Выбор возбудимого типа всегда больше спонтанен, нежели осознан и продиктован необходимостью. Наиболее сложный для выработки рекомендаций тип характера. Так же слабо восприимчив к рекомендациям по коллборативному принципу.

Даже используя такую, относительно примитивную, классификацию характера, можно заметить, что коллаборативная фильтрация это инструмент из "другого мира". Он не предназначен для учета ваших персональных предпочтений и особенностей, скорее коллективных. Возможно, менталитет рядового американца и соответствует среднестатистическому и, поэтому, к нему применимы такие коллективные методы. В русскоязычной части интернета индивидуальность пользователей, при выборе контента, все же доминирует на стадным чувством. Поэтому применение методов коллаборативной фильтрации может быть не эффективным.


Пример рекомендательной системы

Если коллаборация не работает или работает плохо, и если все такие разные то, спросите вы, где же та "серебряная пуля" или как построить "правильную" рекомендательную систему? Уверен, что ответ в синергии нескольких подходов. Т.е. в создании такой рекомендательной системы, которая может рекомендовать образцы множеством различных методов (среди которых есть и коллеборативная фильтрация) и умеет адаптироваться под конкретного пользователя, максимально учитывая его сезонность, региональные особенности, настроение, и прочее...

Пример такой рекомендательной системы, созданной мною, в настоящий момент эксплуатируется в VOD сервисе Yota.Play - http://yotaplay.ru (не забываем регистрироваться).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Выводы


1) "Магия" рекомендаций сильно преувеличена и коллаборативная фильтрация работает "правильно" только для ограниченного круга людей (в лабораторных условиях).

2) Пирсон - это всегда лучше чем Жаккард (при вычислении коэффициента подобия).

3) Создавайте новое, а не копируйте алгоритмы и метОды 70х гг. прошлого века, какими бы модными они сегодня не были.

4) Учитывайте специфику своей аудитории и индивидуальность каждого человека.

суббота, 3 апреля 2010 г.

"Новости для меня" или в чём отличие rss4me от множества аггрегаторов?

Здравствуйте уважаемые!

Очень часто пользователи задают один и тот же вопрос: в чём отличие сервиса RSS для Меня от множества существующих подобных RSS аггрегаторов?

Я люблю отвечать анекдотом:

Блондинка в магазине сотовой связи.
- скажите пожалуйста, а в чем отличие между этим и этим телефонами?
- девушка, отличие в том, что это фотоаппарат, а это видеокамера.

Что предоставляют множество существующих RSS аггрегаторов?

Они объединяют множество указанных вами RSS источников в одну общую ленту. Далее эту ленту можно читать прямо на сайте аггрегатора. Так делает и Яндекс и Kanban и Google Reader и еще многие другие. Чтение новостей на сайте - это один из самых не удобных способов чтения, который отнимает время и зачастую сопровождается рекламой. А когда в общую ленту попадают и профессиональные новости и анекдоты и прочий мусор это перестает быть лентой новостей, а превращается в мутный поток среди которого следует выискивать действительно интересное. Проблемы конечно не стоит, если вы весь день перечитываете мутные потоки или переписываетесь в одноклассниках. Если же вы цените свое время, тогда продолжим.

Они (RSS аггрегаторы) требуют обязательной регистрации, что бы вы могли создать один или более мутных потоков.

Они (RSS аггрегаторы) редко позволяют вам читать результирующий, хоть и мутный, поток внешними средствами. Например, стационарными RSS клиентами.

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

Что хочется от RSS аггрегатора?

Без регистрации и анонимно объединить несколько вами выбранных источников новостей в одну RSS ленту и повыкидывать из нее весь мусор. Или загрузить все свои ленты как один OPML файл. Ограничить сферу интересов ключевыми словами (через запятую). Затем получить URL адрес этой ленты и иметь уже не мутный, а отфильтрованный поток в какой нибудь RSS клиент (с чтением на сайте или в off-line). Конечно, хочется среди источников новостей выбирать не только специализированные форматы (RSS или Atom), но и простую HTML страницу. Хочется что бы сервис сам вырезал рекламу из новостей, а она уже там появляется. Ну и хочется иметь более точный фильтр нежели поиск в Яндексе.

Все это и есть сервис RSS для Меня.

Экономьте свое время!

суббота, 27 марта 2010 г.

Новая жизнь старого сервиса 2

Неделя работы сервиса (о его выходе я писал ранее), выявила некоторые недостатки.

Спасибо огромное всем, кто принял участие в тестировании!

Выявленные ошибки и замечания устранены.
Особенности новой версии:
- Возможность загрузки OPML файла со списком RSS источников.
- Улучшена фильтрация по ключевым словам.
- В список публичных RSS лент теперь формируется модератором.

RSS for Me версии 0.3

воскресенье, 21 марта 2010 г.

Роевой интеллект

Теперь принцип работы роевого интеллекта понятен: насекомые следуют простым правилам, действуя на основании имеющейся у них ограниченной информации. Гениальное устройство этой системы вдохновило Марко Дориго, специалиста по компьютерным технологиям из Брюсселя. Для создания математических алгоритмов, которые позволили бы решить такие сложнейшие задачи, как составление оптимальных маршрутов грузоперевозок и расписания авиарейсов, а также управление военными роботами, он использовал накопленные сведения о поведении муравьев.

Далее...

суббота, 20 марта 2010 г.

Новая жизнь старого сервиса

Здравствуйте уважаемые читатели!

Предлагаю вам простой и удобный сервис фильтрации RSS новостей.
services.pipsec.com/rss4me

Множество источников информации, причем не только RSS ленты но и обычные HTML страницы с новостями, фильтруются сервером на наличие указанных вами ключевых слов. Таким образом, в результирующую RSS ленту попадает только то что вам нужно и интересно.

Критика ожидаема и приветствуется.