Быстрый рост приложений искусственного интеллекта, снижение затрат на процессор и память позволили за последнее десятилетие продемонстрировать невероятный прогресс в области систем Recommender. Учитывая их растущее значение в индустрии розничной торговли, они, несомненно, являются одной из самых популярных тем в области искусственного интеллекта.

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

Если вы посещали учебные лагеря и курсы по искусственному интеллекту, вы, вероятно, знаете, что почти каждый из них включает разработку системы рекомендаций, основанной на рейтингах / звездах от 1 до 5 (да, вы знаете эту систему со стандартным набором данных о фильмах). Хотя это отличные вводные упражнения, они не соответствуют примерам из реальной жизни. При разработке рекомендательной системы вы, скорее всего, захотите также заняться «отзывами пользователей», которые содержат много важных функций, которые необходимо включить в модель. Для отзывов пользователей будьте готовы использовать НЛП.

В этом руководстве мы будем использовать данные, взятые с веб-сайтов Yelp, чтобы представить проблему рекомендации ресторана. Набор данных содержит идентификатор компании, идентификатор пользователя, рейтинги и отзывы. Задача, исходя из поиска пользователя, порекомендовать три ресторана. Этот пример лучше всего работает с Jupyter Notebook (вы можете найти j upyter notebook и данные здесь.)

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

Трубопровод:

Теперь давайте начнем строить нашу модель, следуя нашему конвейеру.

На первом этапе мы получаем ввод от пользователя, например «вегетарианская пицца, дешевая с различными начинками».

На втором этапе мы токенизируем ввод и получаем: «овощи, пицца, дешево, разнообразие, начинка».

На третьем этапе сопоставьте эти токены с бизнес-функциями. Как мы можем получить бизнес-функции? Эта часть полностью зависит от нашего творчества и инженерных навыков. Я создал матрицу бизнес-функций, используя функции, описанные ниже. Строки - это классы предприятий, а столбцы - бизнес-функции. Если функция находится в обзоре пользователя, присвойте «1», если функции нет в обзоре, присвойте «0». Исходя из этого, матрица заполняется нулями или единицами. В этом случае вычислите обратную частоту термина (tf-idf) отзывов и вручную выберите слова, относящиеся к ресторанному бизнесу. Затем найдите слова, относящиеся к типам ресторанов и меню (можно найти в Интернете в ресторанах). Наконец, объедините два набора функций из tf-idf и собранные исследования в Интернете и поиск по меню.

Вот пример снимка матрицы бизнес-функций:

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

На пятом этапе, используя ограниченную машину Больцмана (RBM), спрогнозируйте, понравится ли пользователю выбор, предлагаемый предприятиями. На этом шаге будет создана одна строка с предприятиями в столбцах. Если пользователю нравится выбор, элемент в соответствующем индексе будет равен 1, в противном случае - 0.

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

На седьмом шаге рассмотрим другой сценарий, в котором поиск пользователя незначителен, а RBM не может найти три ресторана. Хотя это очень маловероятный случай с большими наборами данных, мы все же должны учитывать исключения. В этом случае используйте автоматический кодировщик для прогнозирования рейтингов для каждой компании. Это вернет массив, очень похожий на тот, который делает RBM, но на этот раз массив будет включать числа (рейтинги) от 1 до 5 вместо 0 и 1.

На восьмом этапе возьмите три лучших прогноза согласно рейтингам и объедините их с прогнозами RBM.

На девятом шаге, если нам по-прежнему не удается получить три ресторана для пользователя (опять же, вероятность возникновения этого события очень мала), выберите три лучших ресторана в соответствии с их общими оценками (пожалуйста, обратите внимание, этот рейтинг не совпадает с рейтингом на шаге 8. Не запутайтесь, прогноз автокодировщика также возвращает оценки от 1 до 5).

На десятом шаге, если мы хотим порекомендовать пользователю новые рестораны, мы будем использовать методы совместной фильтрации и контентной фильтрации, чтобы найти рестораны, которые понравятся пользователю. Как это работает?

Мы определяем функцию сходства предприятий и пользователей. Например, если вкусы пользователей A и B похожи, система рекомендаций порекомендует рестораны пользователю A, этому пользователю B также понравится, и наоборот. Это основная идея совместной фильтрации.

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

Методы совместной фильтрации и фильтрации на основе содержимого нельзя использовать для этого набора данных, поскольку этот набор данных слишком мал для рекомендательных систем. Эмпирическое правило для корреляции Пирсона - 25. (https://www.researchgate.net/post/What_is_the_minimum_sample_size_to_run_Pearsons_R), наш набор данных имеет в среднем 2 рейтинга для каждой компании. Если вы используете большие наборы данных, вы можете использовать эти методы, потому что они очень эффективны!

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

Я надеюсь, что это руководство помогло вам лучше понять рекомендательные системы. Вы можете получить доступ к полному коду и данным отсюда. Следите за новостями: Как развернуть систему рекомендаций.

Спасибо