Навигация по сайту

Алгоритм для подбора рецептов и рекомендательная модель к нему


Цель

Необходимо создать рекомендательную модель для рецептов на основе их чистого текста.

В ней должно учитываться уровень здоровости рецептов


Задачи


Описание

Есть готовое приложение с активной пользовательской аудиторией и датасет с рецептами.

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

В БД есть только данные о рецептах в чистом текстовом виде, также имеется уже собранная БД о витаминах и нутриентах товаров, присутствующих на рынке. Их нужно соединить.

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


Решение

Основная информация для кластеризации:
Название рецепта - количество порций - список ингредиентов - рецепт 

Далее из них считаются калории и нутриенты.

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

Тут самое интересное - это соотнесение способа приготовления с определенным ингредиентом из текста.

Выделяем глаголы, смотрим какой из них ближе всего, привязываем к ингредиенту, сравниваем с вариантами из таблицы, плюс итеративная проверка по степени похожести по difflib.
Наиболее сложное тут - контекстное распознавание случаев по типу "нарежьте 5 первых. ингредиентов из списка", это уже модели контекстного распознавания и глубокий NLP-анализ.
Это сейчас развивающаяся сфера, требовался дополнительный анализ. 

Как текущий обход - хардкодим "возьмите N первых ингредиентов". Требуется дополнительно отследить насколько это частое явление в датасете.

Итог - таблица использованных ингредиентов в рецепте с учетом способа их приготовления по каждому рецепту.
Распределяем полученные во втором шаге по порциям, проводим дополнительные проверки на корректность.

Калькулятор здоровости определяет категории по принципам:

 

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

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

Сборка - делаем модульную архитектуру для прогона, вставляем обновленные нутриентные и графовые датасеты в общий флоу.


По всем вопросам можно обращаться в Телеграм.