Проекти школи GoTo: рекомендаційна система для новинного порталу


У рамках кожної школи школи GoTo відбувається багато активностей, школярами реалізуються десятки вдалих і не дуже проектів. На жаль, нам не вдається розповісти про кожен проект або подію, але спробувати поділитися окремими успіхами стоїть. Тому ми і розпочинаємо цикл статей від учнів про свої успіхи і проектах в рамках наших шкіл.
Цього літа один із партнерів – компанія E-Contenta – запропонувала завдання створення рекомендаційної системи новинного порталу одного з телеканалів. Хлопці з компанії викладали на напрямку Аналіз даних і машинне навчання, так і завдання всім здалася досить цікавою – крім реальної необхідності такого роду розробок, завдання була ще і досить унікальною – методи рекомендації новин в більшості відрізняються від методів рекомендації, припустимо, фільмів.
За її рішення взялися 2 учня червневої школи: 16-річний Сирків Андрій з Москви і 14-річний Всеволод Жидков з Воткінска. Вони ж і підготували короткий опис задачі і її рішення, яке ми публікуємо у цій статті під катом.

Опис завдання
Рекомендаційна система – це програма, що дозволяє передбачити найбільш цікаві об'єкти (наприклад, книги, фільми або статті), вже маючи якісь дані про поточний стан. Станом можуть бути вже вподобане користувачеві об'єкти або дані, які ми знаємо про клієнта (наприклад, його музичні уподобання). Такі дані можна отримати з допомогою логування дій користувача на сайті, збирання зовнішньої інформації про користувача або про об'єкт.
Основна задача, яку вирішує рекомендаційна система — це підвищення зручності використання продукту кінцевому користувачеві. Ми повинні передбачити, що користувачеві сподобається з найбільшою ймовірністю і тоді він буде позбавлений від необхідності шукати це самому, що дозволить нам утримати користувача на нашому ресурсі. Завдяки якісним рекомендаційним систем виросли такі цифрові гіганти як Netflix, Spotify і багато інших стартапи.
Серед рекомендаційних систем виділяються три основних типи: коллаборативная фільтрація, контетная і гібридна.
Коллаборативная фільтрація — напевно, найбільш популярна модель для рекомендації об'єктів. Її основна ідея полягає в тому, що якщо об'єкти дивляться майже однакові користувачі, то ці об'єкти варто рекомендувати цим користувачам.

Наприклад, якщо якоїсь Алісі подобається серіали "Друзі" і "Теорія Великого Вибуху", а нікому Бобу подобаються "Бруклін 9-9" і "Друзі", то можна порекомендувати "Бруклін 9-9" Алісі і "Теорію Великого Вибуху" Бобу.
У колаборативної фільтрації виділяється два основних підходи:
  • Кореляційні моделі — основна ідея таких моделий заснована на зберіганні матриці користувачів/об'єктів.
  • Латентні моделі — моделі, які дозволяють не тримати матрицю користувачів/об'єктів, а будуються на основі 'профілів' користувачів і об'єктів. Профіль — це вектор прихованих характеристик.
Наступний спосіб побудови рекомендаційної моделі — контетные рекомендації. Це означає, що наша модель буде залежати від вмісту об'єктів. Наприклад, можна оцінювати схожість текстів новин (про те, як саме це робити — трохи пізніше) або до фільму "Титанік" рекомендувати інші фільми Кемерона. Головна ідея цього методу полягає в тому, що ми намагаємося дістати якомога більшу інформацію про об'єкт, який ми хочемо порекомендувати, і використовуємо цю інформацію для пошуку таких же об'єктів, після чого ми просто рекомендуємо схожі об'єкти.

RTB на вечерю від CTO E-Contenta
Ще фотки
Колективна творчість

Випробування на міцність

Подолання труднощів

Зіткнення з реальністю на прикладі гри Пальчики

Виживають найсильніші

Спалювання багів наостанок
Рішення
У нашій задачі по рекомендації новин ми вирішили використовувати гібридну модель. Вона комбінує результати попередніх варіантів і повертає зважений результат.
Наша гібридна модель на основі ознак, які ми витягли для об'єкта і для користувача повертає ймовірність того, що користувач прочитає цю статтю (клацне на неї). Після кількох тестів, в якості алгоритму машинного навчання ми вирішили використовувати Random Forest, але це не так принципово.
У всіх завданнях машинного навчання важливо подивитися на розподіл даних, побудувати залежності, які допоможуть тобі навчити модель, без цього гарного результату ви отримати не зможете. Наприклад, у нашій задачі перш ніж написати модель ми побудували ось такий графік:

Суть гібридної моделі в тому, що в якості фичей ми надаємо їй якісь значення, отримані за допомогою колаборативної фільтрації і якісь значення, отримані з допомогою тематичної моделі.
Почнемо з колаборативної фільтрації. Давайте будемо обчислювати схожість новин по користувачам, які дивилися цю статтю. Для цього часто використовується косинусні захід – косинус кута між двома векторами, в даному випадку — переглядами користувачів.
косинусні захід
Так як ми хочемо, щоб при рекомендаціях враховувалася не тільки одна новина, візьмемо три останні статті та одну можливу (вірогідність переходу на яку ми оцінюємо), після чого порахуємо косинусную схожість від кожної з прочитаних новин до можливої. Таким чином, у нас вийде 3 фічі.
Тепер є більш складне завдання — оцінювати схожість новин по їх вмісту. Ми мілини найпростіші варіанти на кшталт пошуку ключових слів і підрахунку їх перетинів з-за маленької ефективності.
В області побудови тематичних моделей окремо варто тематичне моделювання — спосіб поділу документів за темами без вчителя. Для цього існує декілька алгоритмів, в нашій системі ми використовували NMF — розкладання невід'ємних матриць, вона показала себе краще аніж LDA — латентний розміщення Діріхле. Перед тим, як використовувати NMF, нам необхідно побудувати матрицю, яку ми будемо розкладати, для цього використовували TF-IDF.
TF-IDF складається з двох частин:
TF (term frequency — частота слова) — це відношення кількості даного слова в документі до кількості слів у документі. З допомогою term frequency можна оцінити важливість слова в документі. Зауважимо, що частота так званих стоп слів — союзи і союзні слова, займенники, прийменники, частки тощо) буде більше ніж інших, тому ми очистили всі новини від них.
tf
IDF (inverse document frequency — частота зворотний документа) — інверсія частоти, з якою певний слово зустрічається в документах колекції. З допомогою IDF ми можемо викинути не тільки стоп слова, але і знижувати важливість для часто вживаних іменників.
idf
Оскільки нам важливо знати і важливість слова в тексті і унікальність ми перемножуємо TF-IDF і отримуємо:
TF-IDF
З допомогою TF-IDF ми створюємо матрицю документи на слова, на перетині документа та слова ми ставимо значення отримане з TF-IDF:
matrix
Одержавши терм-документную матрицю ми розкладаємо її з сингулярними значень з допомогою NMF. Після розкладання матриці ми можемо уявити будь-який документ і термін у вигляді вектора в просторі, близькість між будь-якою комбінацією термінів та/або документів легко обчислюється за допомогою скалярного добутку векторів. Після всього цього ми отримали цілком осмислені теми, наприклад, в один кластер потрапили статті про Савченко, в іншій — про закони, які пропонує Держдума.
За допомогою градієнтного спуску ми знайшли оптимальне значення кількості кластерів для наших даних, воно дорівнює 40. Після перетворень ми можемо розглядати кожну новину як точку в 40-мірному просторі, де кожен вимір – це ступінь приналежності до якогось кластеру.
А як фичей можемо використовувати 40 значень для кожної з чотирьох новин. Крім того, можна зайнятися feature engineering і додати різниця кожної прочитаної статті з можливою, але цього ми не зробили.
В результаті у нас вийшла модель, передбачення якої нас влаштовували. Наприклад, ми прочитали кілька новин про можливе призначення когось на посаду радника Президента, відразу після цього рекомендаційна система видає нам статті вже з конкретними іменами кандидатів.
Метрика якості
Тим не менш, хоч ми і бачили, що рекомендуються статті цілком логічно, було необхідно порахувати метрику якості рекомендацій. Найпоширенішою метрикою є MAP@K, де K — кількість рекомендацій. У нашій задачі користувачеві за раз рекомендується 10 статей, тому і K = 10. Метрика дозволяє нам дізнатися, наскільки швидко ми дали користувачеві те, що він хоче, в нашому випадку – як швидко ми порекомендували статтю, яку користувач насправді прочитав.
У підсумку MAP@10 для нашої кінцевої моделі склав 0.75, а для самої першої моделі – 0.05. Наш результат виявився цілком придатним, це показала і метрика, і перевірка на око.
Після того, як ми закінчили робити рекомендаційну систему, ми зібрали веб-додаток, за допомогою якого ви можете самі оцінити її роботу. Його вихідні коди доступні на Github.
За час роботи на проектом, ми помітили важливу особливість подібних рекомендаційних систем: вони дуже часто заганяють користувачів в пастку статей на одну і ту ж тему, тому варто передбачити включення випадкових статей, щоб спробувати знайти інші теми, цікаві користувачеві.
Що в підсумку?
Результати були високо оцінені викладачами і використані компанією E-Contenta для подальшої роботи над проектом замовника, а хлопці запрошені на стажування для вирішення нових завдань.
Ми ж, у свою чергу, дуже раді, що багато компаній беруть участь в освітньому процесі і постановці завдань учасникам наших шкіл.
Найближчі активності
Цієї осені відбудеться школа для старшокласників і младшекурсников в бізнес-інкубаторі Ингрия за участю Jetbrains, КРОК, Intel, Інституту біоінформатики, BIOCAD, Parseq Lab, Однокласники та інших компаній.
Це наша перша школа в СПб. Учасники займуться не тільки аналізом даних і биоинформатикой, але і інтернетом речей з розробкою мобільних додатків, чат-ботів і веб-сервісів. У всіх бажаючих є можливість виграти гранти на безкоштовне навчання за напрямами Біоінформатика та Аналіз даних, взявши участь у конкурсах GoTo Challenge до 22 жовтня – реалізувавши геномну збірку або тематичний класифікатор web-сторінок.
Запрошуємо експертів до участі в ролі менторів та викладачів, особливо раді стартапам, які готові поділитися завданнями з хлопцями.
Також скоро розповімо про другому хакатоне GoToHack з аналізу даних, цього разу він присвячений сфері освіти і HR. Зверніть увагу, що вже стартував онлайн-етап з завданнями на Kaggle на основі реальних даних по проходженню учнями онлайн-курсів платформи Stepik.org.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.