От Родриго Неварес Эскобар и Хесус Абрахам Вильяльба Миранда

Представьте себе следующий сценарий: воскресное утро, первое, что вы делаете, это идете на кухню, чтобы приготовить себе вкусный завтрак. Вы подходите к холодильнику, чтобы заглянуть внутрь, но обнаруживаете пару продуктов, оставшихся после похода в супермаркет на этой неделе; пол-галлона молока, несколько яиц, может быть, пару кусочков фруктов здесь и там. Давайте представим, что вы не можете точно решить, что делать с тем, что у вас есть, вашим следующим логическим шагом будет проконсультироваться со своим телефоном, какие рецепты вы можете приготовить из тех немногих ингредиентов, которые у вас есть. Ничего не подозревающий пользователь вводил список ингредиентов, ожидая, что автоматический список рекомендуемых рецептов с такими ингредиентами появится, как только он нажмет какую-то кнопку поиска. Мы, как разработчики, задаем следующий вопрос: что решает, какие рецепты будут показаны пользователю после отправки списка?

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

Прежде чем объяснять наш алгоритм, нам нужно поговорить о наших данных. Как было обнаружено и описано на kaggle.com, набор данных foodRecSys-V1 был создан путем сбора данных с Allrecipes.com; веб-сайт, выбранный из-за того, что он является одной из крупнейших социальных сетей, ориентированных на еду, с 1,5 миллиардами посещений в год. Набор данных содержит 49 698 рецептов из 27 категорий, опубликованных в период с 2000 по 2018 год. для каждого рецепта они сканируют его ингредиенты и взаимодействия. Добавление до 38 131 ингредиента и 3 794 003 взаимодействий.

Мы анализируем набор данных, чтобы извлечь вектор нашей целевой функции среди рецептов, список ингредиентов. Поскольку каждый ингредиент представлен в списке в виде текста, нам нужно преобразовать его в осмысленное представление чисел, которое используется для соответствия машинным алгоритмам прогнозирования. Для предыдущей цели мы решили использовать обратную частоту документа (TF-IDF), которая рассчитывается как скалярное произведение частоты термина слова, количества раз, когда термин появляется в документе, и его обратной частоты документа, насколько распространена или редко термин встречается во всем корпусе документов. Чем выше значение, тем релевантнее термин в этом документе. К счастью, в Scikit-Learn уже есть алгоритм TF-IDF, созданный для преобразования набора необработанных документов в матрицу функций TF-IDF.

Затем мы используем косинусное сходство, чтобы обучить модель, чтобы настроить систему для оценки каждого ингредиента в соответствии с этой метрикой подобия, используя матрицу ингредиентов TF-IDF. Короче говоря, косинусное сходство — это косинус угла между двумя векторами, и он используется в качестве метрики оценки расстояния между двумя точками на плоскости. Косинусное сходство в рекомендательной системе используется по тому же принципу косинусоидальных углов, с увеличением расстояния сходство точек данных уменьшается; где, даже если сходство контента менее похоже, оно будет считаться наименее рекомендуемым контентом, а при более высоком сходстве контента сгенерированные рекомендации будут вверху. Scikit-Learn имеет встроенный алгоритм косинусного сходства, который возвращает косинусное сходство между образцами в X и Y.

Мы тренируем косинусное сходство с матрицей ингредиентов TF-IDF из нашего проанализированного набора данных и векторной формой ингредиентов, которые предоставил пользователь, чтобы измерить, какие рецепты наиболее похожи на те, которые пользователь мог бы приготовить с ингредиентами под рукой. на своей кухне; все, чтобы вернуть нисходящий список наиболее похожих рецептов в зависимости от ингредиентов. Таким образом, пользователь может вернуться к приготовлению своего воскресного завтрака с меньшими проблемами, выясняя, что приготовить из нескольких продуктов, оставшихся на столешнице.

Источники

Даршан М. (2022, 7 июля). Что такое косинусное сходство и как оно используется в машинном обучении? ЦЕЛЬ. https://analyticsindiamag.com/cosine-similarity-in-machine-learning/#:~:text=Cosine%20similarity%20in%20the%20рекомендация, будет%20be%20at%20the%20top

Элиза. (2018). foodRecSys-V1. Каггл. https://www.kaggle.com/datasets/elisaxxygao/foodrecsysv1

Google. (нет данных). Фильтрация по содержанию. Разработчики Google. https://developers.google.com/machine-learning/recommendation/content-based/basics

Тьюринг. (нет данных). Руководство по фильтрации контента в рекомендательных системах. Тьюринг. https://www.turing.com/kb/content-based-filtering-in-recommender-systems#content-based-filtering

Унникришнан К.С. (3 ноября 2021 г.). Как Tfidfvectorizer от sklearn вычисляет значения tf-idf. Аналитика Видхья. https://www.analyticsvidhya.com/blog/2021/11/how-sklearns-tfidfvectorizer-calculates-tf-idf-values/

Алаке Р. (14 сентября 2020 г.). Сходство косинусов и его применение. Средний. https://towardsdatascience.com/understanding-cosine-similarity-and-its-application-fd42f585296a

Вот соответствующая документация от Scikit-Learn:

ТфидфВекторизатор

косинусное_подобие