Как мозг бьет дерево, или как мы сделали рекомендательную систему с помощью нейронной сети |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-11-12 13:49 архитектура нейронных сетей, реализация искусственного интеллекта Как бы вы сделали рекомендательную систему? У многих в голове сразу появилась картина как они импортят и стакают Постановка задачи Перед нами стояла задача создания модели, выбирающей людей, которым стоит отправить предложение воспользоваться какой-то услугой, предоставляемой компанией. Раньше этим занимался решающий лес. Мы же решили сделать это на “всесильных” нейронных сетях, заодно поняв, как они работают и действительно ли сложны. После изучения предметной области наше внимание остановилось на нескольких архитектурах. Заинтересовавшие нас архитектуры Далее, кликнув по названию чего-либо, можно будет попасть на статью, где оно хорошо поясняется.
Мы использовали сверточные сети с одномерным ядром conv 1D.
Очень подробно и понятно про ее устройство написано тут.
Она может быть основана как на внешнем (explicit) поведении пользователей, когда они сами ставят оценку чему-то (Netflix), так и на неявных (implicit) закономерностях, когда совпадает их поведение, в нашем случае у них похожие транзакционные последовательности. Подход этой статьи основан на коллаборативной фильтрации и учитывает как явные, так и неявные закономерности. В основе архитектуры стоит нейронная сеть, которая изучает предпочтения пользователей по парам элементов учитывая представления этих предметов, построенные до этого и хранящиеся в строках матриц Us(user x feature), It(item x feature) Что делали мы? Мы сказали что категория_1 лучше чем категория_2, если пользователь платил по ней чаще и на основе этого предположения использовали эту архитектуру. Немного о данных QIWI предоставила нам датасет с историями покупок пользователей, а так же информацию о том, что пользователю рекомендовали купить, и последовал ли он рекомендации в течении 15 дней. Мы пытались по истории покупок предсказать товар, который он скорее всего купит. Нас интересовали только несколько категорий продуктов (всего таких 5). Таким образом, мы смогли мерить привычные всем True Positive, False Positive, True Negative, False Negative и все от них зависящее для интересующих нас категорий. Также сложность доставляло то, что данные были сильно несбалансированы, почти весь объем транзакций лежал в категориях, которые нас не интересуют. Ход работы Здесь мы обсудим поведение моделей и качество на различных тестах. LSTM
Как видим, она очень сильно переобучается. На тестовых данных получились следующие метрики качества: Accuracy: 0.447; MRR: 0.576. Но увидев, что скор довольно неплохой, подумали, что скорее всего наша модель предсказывает юзеру то, что он в основном покупал. Для этого мы проверили качество работы алгоритма на тех людях, предсказываемая категория которых не присутствует в истории их транзакций (далее special test). Таких людей оказалось не так много в тесте (примерно 500). На них получились следующие результаты: Accuracy: 0.037; MRR: 0.205. На таких людях скор получился заметно хуже. Но мы не отчаялись, пробовали различные варианты с LSTM, в итоге пришли к такой архитектуре: Conv1D->Max Pooling->LSTM(with rec dropout)x2->(Dense->Dropout)x2->Softmax. Вот как она отработала: Картинка куда лучше. Сеть не так сильно переобучается. Смотрим на скор на тесте: Accuracy: 0.391; MRR: 0.534. Результат немного хуже чем при работе прошлой сети. Но не будем спешить с выводами и посмотрим на special test: Accuracy: 0.150; MRR: 0.312. Благодаря специальному тесту видим, что данная модель лучше находит закономерности в данных. Запомним данную архитектуру, она нам еще пригодится.
График свидетельствует о переобучении, но не таком сильном как при простой LSTM. На тесте получились такие результаты: Accuracy: 0.529 MRR: 0.668. На специальном тесте: Accuracy: 0.014; MRR: 0.217. Сразу же посмотрим на работу Char CNN, но на меньшем количестве эпох: Тут сеть гораздо быстрее переобучается, на тесте дает неплохие результаты, но по специальном тесту видим, что она плохо выучила сложные закономерности: Pairwise В первую очередь мы добились примерно такого-же качества NDCG как авторы на датасете movielens. После этого мы переделали ее под наши данные. Мы разделили данные на две “временные части”.
Факторизация (lightfm). Из предыдущих пунктов можно сделать два вывода:
Результаты После дальнейших тестов, мы решили что CNN + LSTM работает лучше остальных. Нас интересует конверсия (precision). Эта метрика показывает долю людей, которые купили товар данной категории, от общего количества людей, которым была выслана рекомендация данной категории. Понятно, что хорошие показатели этой метрики не означают, что сеть работает хорошо, так как она может рекомендовать очень мало, и достигать высокой конверсии. Давайте посмотрим на True Positive, False Positive, True Negative, False Negative, чтоб увидеть всю картину. Ниже таблицы с 4 элементами значат следующее:
Num — количество людей, которые реально принадлежат данному классу Класс 1:
Класс 2:
Класс 3:
Класс 4:
Класс 5:
Так как мы смотрим только 5 классов, то нам нужно еще добавить класс “другие”, и их, естественно, намного больше чем остальных. Класс 6 (другие):
Наша сеть очень хорошо предсказывает классы, в которые пользователь заплатит в ближайшие 15 дней, даже те, которые в несколько раз меньше других (например класс 1 в сравнение с 3-м классом). Сравнение с предыдущим алгоритмом. Сравнительные тесты на одинаковых данных показали, что наш алгоритм дает в несколько раз большую конверсию чем предыдущий алгоритм, основанный на решающих лесах. Итог Из нашей статьи можно сделать несколько выводов. Нейронные сети интересная тема, однако требует много времени и может преподнести неожиданные сюрпризы. Напоследок представимся. Источник: habrahabr.ru Комментарии: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||