В мире, полном различных диет, противоречивых советов по питанию и бесчисленных исследований, подтверждающих различные взгляды на здоровый образ жизни, разве не было бы невероятно иметь надежного компаньона, который точно знает, что нужно вашему телу? Или всегда быть только с тем одним другом, который всегда знает, какое блюдо вы хотите следующим. Представьте себе виртуального диетолога, который всегда направляет вас к идеальному питанию с учетом ваших личных предпочтений. Добро пожаловать в 21 век, наполненный гаджетами и почти безграничными технологиями.

Одной из самых влиятельных современных технологий являются рекомендательные системы. Системы рекомендаций лежат в основе тысяч веб-сервисов и приложений, таких как онлайн-маркетинг, социальные сети и потоковые сервисы. Чем же так привлекательны эти услуги? Это способность адаптироваться к предпочтениям каждого отдельного пользователя. Возможность удовлетворить потребности каждого пользователя открывает двери для многих положительных и отрицательных последствий. Возникает вопрос, как мы можем использовать эту влиятельную технологию для чего-то полезного? Позвольте познакомить вас с персонализированной системой формирования диеты.

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

Обзор данных

Мы использовали общедоступный набор данных на Kaggle под названием Рецепты и взаимодействия Food.com. Этот набор данных состоит из деталей рецептов и отзывов, оставленных пользователями портала Food.com. Доступные файлы можно разделить на три категории. (1) необработанные данные, содержащие необработанные рецепты и отзывы пользователей, (2) предварительно обработанные данные с токенизированными текстовыми данными для рецептов и (3) обработанная информация о взаимодействии, которая описывает детали взаимодействия пользователя с рецептами.

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

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

Рекомендательный движок

Есть бесчисленное множество возможных моделей рекомендаций на выбор. Мы решили использовать байесовский персонализированный рейтинг (BPR) с матричной факторизацией. Поскольку мы лишь кратко объясним модель, для заинтересованных лиц более подробную информацию можно найти в оригинальной статье.

BPR использует вероятностный подход к проблеме рекомендаций. В отличие от традиционных моделей, которые создают обучающие выборки в виде пар «пользователь-элемент», BPR использует триплеты «пользователь-элемент-элемент». Эти триплеты содержат как элементы с положительной оценкой, так и элементы с отрицательной оценкой/без оценки. Благодаря такому подходу BPR имеет встроенную систему ранжирования.

Используя байесовский анализ, авторы вывели дифференцируемый критерий BPR-OPT. Модель можно обучить градиентному спуску с помощью BPR-OPT. Однако, поскольку полный градиентный спуск проходит через все пары пользовательских элементов, он не подходит для обучения BPR. Это привело бы к ненужной вычислительной сложности и низкой скорости сходимости. Поэтому лучше обучать модель с помощью стохастического градиентного спуска на случайно выбранных триплетах.

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

Строительство диеты

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

Мы рассмотрели несколько подходов к построению рациона. Во-первых, нам нужно было определиться с тем, как мы подходим к термину «диета». Мы могли бы придерживаться ограничительной или неограничительной диеты. Для ограничительной диеты нам потребуется больше информации от пользователей, например, их цель (например, увеличение мышечной массы, потеря жира и т. д.) и размеры тела пользователей (например, рост, вес и т. д.). И последнее, но не менее важное: нам нужно будет проконсультироваться по этим диетам с экспертами по питанию, которые также должны будут установить пороговые значения питания (например, потребление белка, дневное количество калорий и т. д.).

Так как у нас не было доступа к такому специалисту, мы выбрали не ограничивающие диеты. Здесь мы рассмотрели несколько вариантов того, как составить рацион. Альтернативный подход к тому, который мы выбрали, заключался в том, чтобы разделить блюда на четыре категории (завтрак, обед, ужин и перекус) и случайным образом составить рацион на данный день. Вероятности каждого продукта будут соответствовать степени предпочтения, заданной моделью.

Заключительные слова

Приготовление пищи является важной частью нашей повседневной деятельности, и иногда нам не хватает вдохновения. Вот где наша система вступает в игру. Это ни в коем случае не новаторская технология, но с некоторыми улучшениями она может принести пользу жизни каждого. В сочетании со знаниями эксперта по питанию подобная система может помочь людям преодолеть проблемы со здоровьем и диетой. Представьте, что вы улучшите свои привычки в еде всего за несколько кликов на смартфоне или компьютере. Такая вещь возможна в 21 веке.