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

суббота, 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) подобные "рекомендации" в корне отличаются от "исчерпавшей свой потенциал" коллаборативной фильтрации. Если не учитывать персональность каждого пользователя, подобные рекомендации ни чем не лучше подобия на однородном множестве.

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

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


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