Від концепції до реалізації: як побудувати ефективну рекомендаційну систему на основі машинного навчання за два дні
Привіт! Мене звати Дмитро Полурєзов, я iOS Engineer у компанії Headway. Зараз я працюю над розвитком нашого нового застосунку Nibble. Це освітній продукт із короткими інтерактивними уроками з різних тем: від математики до мистецтва.
2023 рік продемонстрував нам багато можливостей штучного інтелекту. Використання ШІ буде набирати все більших обертів й надалі та зможе підвищити ефективність роботи компаній в дуже різноманітних напрямах (розробка, DevOps, маркетинг, тестування тощо).
Одна з ключових задач моєї команди — знаходити способи пропонувати користувачам Nibble найбільш релевантний контент. Ми проаналізували багато механік і визначили ту, яка показує найкращий результат — це рекомендаційна система на основі машинного навчання. Вона дозволила нам якісно персоналізувати вміст та значно підвищити залученість користувачів в застосунку.
У статті я розповім про типи систем рекомендацій та їхню роль у розвитку продуктів. Також поділюсь досвідом розробки й реалізації рекомендаційної системи в Nibble та результатами, яких нам вдалось досягти. Цей матеріал допоможе розробникам, продуктовим менеджерам та аналітикам запустити злагоджену рекомендаційну систему, яка покращить досвід користувачів.
Значущість та типи рекомендаційних систем
Системи рекомендацій зайняли центральне місце в споживчому й професійному досвіді користувачів. Вони вдало інтегрувались «під капот» багатьох продуктів та зробили їх лідерами у своїх індустріях.
Spotify, один з найпопулярніших стримінгових сервісів потокового аудіо, сьогодні має понад 500 мільйонів користувачів. Понад третина з них відкриває для себе нових виконавців завдяки функції «Зроблено для вас». Такий показник — це результат поєднання масштабної бази контенту та майстерного використання систем рекомендацій.
Основа перевага систем рекомендацій полягає в їхній здатності аналізувати масивний обʼєм інформації та створювати персоналізований досвід. Вони враховують різноманітні аспекти — від особистих уподобань до соціальних взаємодій юзерів, а також динамічних змін у контенті.
Щоб краще зрозуміти механіку роботи рекомендаційних систем, необхідно розібратись з їхніми ключовими типами, принципами роботи, перевагами й недоліками.
Далі розглянемо два основні типи систем рекомендацій.
Система на основі вмісту (Content-based filtering)
Система рекомендацій на основі вмісту базується на спільних атрибутах елементів контенту, які сподобалися користувачеві раніше. Вона позначає кожен елемент або користувача певними характеристиками, а потім вивчає та робить припущення щодо їхньої схожості.
Основна ідея полягає в тому, щоб рекомендувати користувачеві елементи на основі спільних атрибутів або ознак тих, які він уже вподобав. Наприклад, для рекомендації фільмів можуть використовуватися такі атрибути: жанр, режисер, актори, рік випуску та інші. Вони допомагають системі зрозуміти, які елементи можуть бути подібні за контентом.
Цей тип рекомендаційних систем особливо ефективний у галузях, де важливий вміст або якісні характеристики елементів. Він дозволяє забезпечити користувачів релевантним та персоналізованим контентом, спираючись на їхні смаки та уподобання.
Нижче поділюсь кількома прикладами застосування систем рекомендацій на основі вмісту за категоріями:
- фільми і серіали: новий контент на Netflix, Prime Video, HBO на основі попередніх вподобань;
- електронна комерція: рекомендації цікавих товарів покупцям на основі їхньої історії покупок та переглядів;
- ЗМІ: пропозиції статей, відео та іншого контенту на основі інтересів;
- музика та стрімінг: відтворення музики на Spotify відповідного настрою;
- освітній контент: пошук навчальних матеріалів на Coursera або Udacity, які відповідають індивідуальним навчальним потребам та інтересам студентів.
Серед основних переваг таких систем:
- персоналізація — системи забезпечують високий рівень персонального підходу до рекомендацій, оскільки враховують контент, який користувач уже спожив і оцінив;
- створення релевантних рекомендацій для нових користувачів — системи якісно працюють для користувачів, які ще не мають довгої історії взаємодій;
- пропозиція нішевого контенту — системи заохочують переглядати нішевий або маловідомий контент, який може бути важко виявити іншими методами.
Однак системи на основі вмісту також мають свої недоліки. Наприклад, вони обмежені в тому, що враховують тільки контент та не беруть до уваги аналіз взаємодії користувачів.
Також вони можуть мати труднощі з рекомендацією нового контенту, оскільки оперують на основі наявних атрибутів. Для роботи із цими запитами раджу звернути увагу на системи на основі колаборативної фільтрації.
Система на основі колаборативної фільтрації (Collaborative filtering)
Система на основі колаборативної (або спільної) фільтрації — це тип рекомендаційних систем, який базується на аналізі фактичної взаємодії користувачів з певними елементами вмісту. Система може рекомендувати контент на основі інтеракцій з такими елементами як оцінки, відгуки чи покупки.
Нижче розповім про декілька основних складових колаборативної фільтрації.
Колаборативний фільтр Item-Item аналізує схожість між елементами контенту, щоб рекомендувати користувачеві елементи на основі його попередніх вподобань. Якщо користувач взаємодіяв позитивно з певним елементом, то система рекомендує інші схожі елементи, які також можуть йому сподобатися.
Колаборативний фільтр User-Item аналізує взаємодії між користувачами та конкретними елементами контенту. Якщо два користувачі мають схожі вподобання контенту, система рекомендує одному користувачеві елементи, які інший користувач оцінив позитивно, і навпаки.
Узагальнюючи, можна сказати, що фільтр Item-Item аналізує схожість контентних елементів, тоді як фільтр User-Item аналізує інтеракції, спираючись на схожі користувацькі уподобання.
Щоб надати рекомендації на основі колаборативної фільтрації, система використовує матрицю взаємодій, де кожен рядок представляє користувача, а кожен стовпчик — елемент. Відповідно, значення в матриці вказують на взаємодії між користувачами та елементами.
Колаборативна фільтрація використовується у сферах, де важливі рекомендації на основі взаємодій юзерів. Нижче наведу кілька прикладів застосування системи.
- товари в інтернеті: рекомендації продуктів, які були популярні серед інших користувачів зі схожими покупками;
- соціальні мережі: пропозиції друзів, групи та контент, який може бути цікавим користувачам на основі їхніх взаємодій;
- платформи з оцінками: рекомендацій фільмів, ресторанів та інших послуг на основі відгуків та оцінок інших користувачів.
Основні переваги системи на основі спільної фільтрації містять:
- здатність до рекомендацій нових елементів — система може рекомендувати нові елементи на основі взаємодій інших користувачів, навіть якщо ці елементи раніше були невідомі;
- соціальний контекст — враховує соціальні взаємодії та відносини між користувачами для покращення рекомендацій;
- ефективність в умовах обмеженої інформації — добре працює, коли важко категоризувати елементи.
Обмеженням систем на основі спільної фільтрації є проблема «початкового холодного старту» для нових користувачів, які ще не мають історії взаємодій.
Як ми побудували рекомендаційну систему на основі машинного навчання для продукту Nibble
Nibble — це продукт EdTech, де ми об’єднали найефективніші методи навчання, щоб допомогти юзерам отримати більше знань за коротший час. Наша місія — не лише підвищувати знання користувачів, а й допомагати досягати їх цілей розвитку.
Одним із важливих джерел даних для нашої системи рекомендацій є оцінки, які користувачі ставлять після завершення уроків. Ми пропонуємо користувачам виставити оцінку від однієї до пʼяти зірочок. Ця інформація відображає особисті вподобання та стає ключовою для розуміння найбільш цікавих для нашої аудиторії тем, уроків та форматів.
Оцінки, які користувачі ставлять після завершення уроків в Nibble
Вибір моделі та алгоритмів
Вибір моделей та алгоритмів для рекомендаційної системи є важливим етапом, що визначає її ефективність та здатність надавати персоналізовані рекомендації. Однією з ключових складових нашої рекомендаційної системи є колаборативний фільтр User-Item.
Ми збираємо дані, що містять ідентифікатори користувачів, ідентифікатори уроків та їхні оцінки. Ця інформація дозволяє нам аналізувати взаємодії, створюючи рекомендації на основі схожих вподобань.
Наші основні принципи колаборативного фільтра User-Item:
- аналіз взаємодій: ми враховуємо взаємодії користувачів з різними уроками за допомогою системи оцінок;
- персоналізація рекомендацій: наша модель надає високий рівень кастомізованого контенту, що спирається на той, який користувач вже оцінив;
- ефективність в умовах обмеженої інформації: коли інформація про інші фактори, окрім оцінки, обмежена або неповна, цей метод все ще дозволяє нам робити ефективні рекомендації.
Колаборативний фільтр User-Item є потужним інструментом для створення персоналізованих рекомендацій, який забезпечує користувачам занурення в найрелевантніші уроки.
Збір та обробка даних
Забезпечення ефективного збору даних є ключовим етапом розвитку рекомендаційної системи. Ми використовуємо аналітичний сервіс Amplitude для збору даних в режимі реального часу.
Кожен раз, коли користувач оцінює пройдений урок в нашому iOS-застосунку, спеціальний user action event, що містить необхідну інформацію про урок та оцінку, відправляється до сервісу Amplitude.
За допомогою BigQuery ми структуруємо дані та створюємо .csv-файли для необхідного періоду. Ці файли виступають у ролі датасету, який використовується для навчання нашої Machine Learning моделі.
Тренування та тестування моделі
Щоб створити рекомендаційну модель для Nibble, ми використали інструмент Create ML, який входить до складу Xcode 11.3 та вище. Пройдімось нашими ключовими кроками.
- Запуск Create ML та вибір шаблону. Відкрийте Create ML та оберіть шаблон Recommender. На цьому етапі ми подаємо наш .csv-файл з даними. Create ML автоматично визначати унікальні ідентифікатори.
- Конфігурація назв стовпців. Важливо вказати правильні імена стовпців для користувача, елемента та оцінки. Це дозволяє моделі правильно інтерпретувати дані.
- Тренування моделі. Після налаштування натискайте кнопку тренування. Швидкість тренування моделі залежить від розміру набору даних.
- Тестування. Ви можете створити власні сценарії користувачів та перевіряти рекомендації в реальному часі. Модель видасть рекомендації на основі подібності введених даних до минулих взаємодій.
- Output. У якості output ми отримуємо Core ML model, яку можемо використовувати надалі в Xcode.
- Програмне тренування моделі. Якщо ви використовуєте старішу версію Xcode або хочете тренувати модель програмно, використовуйте Xcode Playground. Завантажте дані у ML DataTable, створіть ML Recommender модель, проведіть оцінку ефективності та збережіть Core ML модель для подальшого використання у вашому застосунку.
import Cocoa import CreateML import TabularData let userColumn: String = "user_id" let itemColumn: String = "lesson_id" let resource: String = "lesson_rating_by_user" let resourceExtension: String = "csv" let modelPath: String = "/Users/d.poluriezov/Desktop/CreateML/LessonRecommender.mlmodel" guard let dataSource = Bundle.main.url( forResource: resource, withExtension: resourceExtension ) else { fatalError("Failed to get resource \(resource).\(resourceExtension)!") } let dateFrame = try DataFrame(contentsOfCSVFile: dataSource) let model = try MLRecommender( trainingData: dateFrame, userColumn: userColumn, itemColumn: itemColumn ) let metadata = MLModelMetadata( author: "Dmytro Poluriezov", shortDescription: "Lesson recommendations model", version: "1.0" ) try model .write( to: URL(fileURLWithPath: modelPath), metadata: metadata )
Завдяки цим крокам ми створили рекомендаційну модель, яка дозволяє персоналізувати взаємодію з застосунком на основі попередніх взаємодій користувача.
До речі, в нашому sprint-борді можна побачити тікет Update Volodymyrovych, що для команди означає «оновити
Отже яких результатів нам вдалось досягти:
- Підвищили середню оцінку уроку. Шляхом впровадження системи рекомендацій нам вдалося підняти середню оцінку уроку на 3%. Це свідчить про поліпшення в сприйнятті користувачами контенту.
- Додали відчуття персоналізації. Введення системи рекомендацій дозволило забезпечити користувачам персоналізований досвід, адаптований до їхніх індивідуальних уподобань та інтересів.
- Дозволили збирати більш варіативну аналітику уроків через секцію For you. Секція стала динамічною, що призвело до більш різноманітної аналітики уроків. Кількість оцінок для різних уроків почала рівномірніше розподілятися, що поліпшило збір аналітики.
- Відкрили новий простір для ідей та гіпотез з тестуванням механізму рекомендацій. Упровадження системи рекомендацій дало нам додаткові можливості для тестування гіпотез та експериментів з механізмом рекомендацій, що може призвести до подальших інновацій та поліпшень в додатку.
Майбутні плани та оптимізації
Наша команда витратила рекордних два дні на розробку концепції та впровадження рекомендаційної моделі в роботу. Вважаю, що ми вже досягли значних успіхів у покращенні користувацького досвіду.
Крім цього, маємо плани, які надалі дозволять нам не лише ще більше оптимізувати роботу, але й відкриють нові способи роботи більш точної рекомендаційної системи. Нижче детальніше розповім про деякі з можливих перспектив.
Тестування гіпотез:
- експерименти з кількістю рекомендованих уроків;
- експерименти з різними моделями, зокрема тими, що базуються на різниці гендеру, віку, цілей, обраних категорій тощо.
Оптимізація та покращення датасету для тренування:
- робота над оптимізацією та покращенням датасету. Зокрема використання механізму нормалізації даних для підвищення ефективності тренування моделей.
Інтеграція механізму оцінювання в процесі онбордингу:
- упровадження механізму оцінювання в онбординг-процес користувача. Це дозволить забезпечити надання персоналізованих рекомендацій уроків навіть у випадку, коли користувач ще не оцінив жоден урок.
Висновки
У результаті впровадження рекомендаційної системи ми значно поліпшили досвід та залученість користувачів та підвищили ефективність платформи. Збільшення середньої оцінки уроків на 3% свідчить про позитивний вплив персоналізації на сприйняття контенту користувачами.
Введення динамічної секції «For you» дозволило зробити аналітику уроків більш варіативною та підвищити відповідність конкретним потребам користувачів. Вони відчувають сильнішу індивідуалізацію та власний підхід до вивчення.
Майбутні плани та оптимізації, як-от тестування гіпотез, вдосконалення датасету, інтеграція механізму оцінювання в онбордингу та збільшення кількості оцінених уроків, обіцяють нам ще більший розвиток системи й забезпечення вищого рівня персоналізації.
Сподіваюсь, що наш досвід стане корисним для вашої роботи з реалізацією та тестуванням рекомендаційної системи. Якщо після прочитання цієї статті у вас є додаткові питання або бажання познайомитись та поговорити про розробку продуктів й тести, пишіть в коментарях або мені в LinkedIn. Буду радий поспілкуватись!
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів