Система рекомендаций по книгам, созданная с нуля с использованием концепций аналитики данных и машинного обучения…

Системы рекомендаций по книгам теперь являются распространенной разработкой в ​​области машинного обучения и анализа данных. Как определяет Википедия, рекомендательная система — это «подкласс системы фильтрации информации», которая предлагает предложения по элементам, наиболее подходящим для конкретного пользователя. Эти системы бывают различных типов, например, те, которые следуют совместной фильтрации, фильтрации на основе содержимого, фильтрации на основе гибридного типа и т. д. В этой статье представлена ​​краткая информация о том, как с помощью сочетания различных методов анализа данных и машинного обучения, таких как исследовательский анализ данных (EDA), кластеризация, парсинг в Интернете и т. д., можно создать интеллектуальную систему рекомендаций по книгам.

  • Набор данных:

— Набор данных, который я использовал для создания, был взят из Kaggle. Это файл .csv. Мотивацией было создание рекомендательной системы в жанре Data Science (статистика, машинное обучение, Python и т. д.). Этот набор данных имел некоторые из наиболее полезных функций, таких как индивидуальные звездные рейтинги, классифицированные по 1, 2, … 5-звездочным рейтингам, URL-адреса книг и т. д. Его можно скачать здесь.

- Детали: этот набор данных состоит из 18 функций, предоставляющих информацию об издателях, авторах, звездных рейтингах, объеме книги, цене, языке / носителе и других деталях, таких как номер ISBN. и т.д. Он состоит из 948 записей.

  • О проекте:

Этот проект был создан с использованием Python в Jupyter Notebook.

— Использование библиотек: при создании этого проекта использовался обширный набор библиотек, таких как некоторые популярные, такие как Pandas, Numpy, Matplotlib, и более мощные, такие как sci-kit Learn, tfidfVectorizer и модуль PyTorch для Резюме BERT.

— Разделение проекта: В этом проекте было 4 уровня реализации. Они даны следующим образом:

  1. Исследовательский анализ данных и визуализация с использованием Plotly:
  • Чтобы ответить на более простые вопросы, которые могут вызвать предубеждение у пользователя, например «У более длинных книг лучшие отзывы?» или «У более дорогой книги лучшие отзывы?». Всеобъемлющий набор «отзывов» — это решающий фактор, который, очевидно, помогает в выборе книг, поэтому этот EDA был выполнен во время проверки различий в обзорах, основанных на разных контекстах. Однако системе требовалось больше, чтобы настроить результаты поиска для пользователей с различными потребностями и интересами.

2. Обучение без учителя — кластеризация с использованием алгоритма K-средних

  • Проще говоря, кластеризация — это процесс разделения нескольких точек данных на разные/отдельные группы таким образом, чтобы эти точки данных были похожи друг на друга по сравнению с остальными точками данных и отличались от точек данных других групп как таковых. Существуют различные виды алгоритмов кластеризации, такие как K-Means и DBSCAN, однако в этом проекте демонстрируется использование K-Means.
  • K-Means — это итерационный алгоритм, который работает с параметром расстояния между точками данных (евклидово, манхэттенское, расстояние Минковского и т. д.). Это расстояние находится между точкой, называемой центроидом(ами), и остальными точками данных. На каждой итерации центроид(ы) перемещается к среднему значению. Это продолжается до тех пор, пока не будет замечено, что центроиды правильно перемещены достаточно близко к группам данных и внутри них, и после точки положение центроида перестает изменяться.
  • В этом проекте названия книг были объединены в общие темы с помощью векторизации текста. Каждым текстовым данным присваивается числовое представление. Существуют различные модели, которые учитывают порядок слов и контекст, например модели на основе частот, в которых используется BOW (мешок слов), TF-IDF и N-граммы, а также модели, такие как статистические модели, в которых используются методы Маркова и скрытого Маркова и т. д.
  • Векторизация текста в данном случае реализована с помощью векторизатора tf-idf.
from sklearn.feature_extraction.text import TfidfVectorizer
#instantiating tfidf vectorizer
vectorizer = TfidfVectorizer(stop_words='english', ngram_range = (1,2))

#fitting and transforming the vectorizer 
X = vectorizer.fit_transform(df['title'])
vec_df = pd.DataFrame(X.toarray(), columns=vectorizer.get_feature_names())
vec_df
  • После этого процесса можно перейти к поиску оптимального значения K и, таким образом, реализовать алгоритм K-средних для распределения кластеров по разным заголовкам. После того, как все заголовки сгруппированы, эти кластеры также можно визуализировать.
  • Я использовал circlify и wordcloud, чтобы показать эти кластеры.

3. Поиск отзывов в Интернете

Это оказалось самой сложной частью проекта. Чтобы обобщить письменные обзоры, необходимо было извлечь или очистить Amazon отзывы для каждой книги в наборе данных. Шаги, которые я выполнил, даны как:

  1. См. соответствующие URL-ссылки в наборе данных для продукта.
  2. Обратитесь к соответствующим URL-ссылкам в наборе данных для отзывов.
  3. Формулирование своего рода цикла, который будет перебирать все URL-адреса.
  4. Создание URL-адресов обзора для каждой книги в наборе данных путем создания нового столбца
  5. Очистите первую страницу, а затем поместите все в набор данных.
  6. Теперь на этом уровне набор данных, вероятно, хорошо подходит для сентиментального анализа, но цель здесь — обобщение :(
  7. Подробнее о подведении итогов после этого пункта!

Для этого было важно понять, какой URL-адрес можно использовать, поэтому вот одно четкое различие в форматах URL-адресов:

#example URLs
product = "https://www.amazon.com/Becoming-Data-Head-Understand-Statistics/dp/1119741742/"
reviews  = "https://www.amazon.com/Becoming-Data-Head-Understand-Statistics/product-reviews/1119741742/ref=cm_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews"

#the 'product_reviews' is what makes the reviews different here

После этого момента использовался критерий разделения, который отделял URL-адрес обзора от остальной части URL-адреса. Для тех URL, в которых не было review_url, возвращалось нулевое значение. Затем к уже существующему набору данных можно добавить столбец, и его можно назвать «review_urls», который будет указывать путь для суммирования!

  • Возникла необходимость автоматизировать этот процесс парсинга для всех книг путем определения функций, поскольку это утомительный процесс. Покопавшись на GitHub, помог парсер от Джеффа Джеймса и другая документация! Этот парсер преобразовал все свои результаты во фрейм данных Pandas.

4. Автоматическое суммирование

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

— В этом контексте я узнал о двух видах: экстрактивном и абстрактном. В чем разница?

  • Извлекающий, как предполагается, извлекает наиболее значимые предложения текста, а затем создает его резюме. Это не меняет самих предложений при резюмировании.
  • Абстрактное, с другой стороны, сравнительно более продвинуто. Это так, потому что он может интерпретировать контекст и «мощно формулировать» текст новыми способами. Таким образом, сводка генерируется моделью, а не полностью извлекается из исходных данных.

Однако для этого проекта я использовал экстрактивное обобщение, тогда как для обзорных данных методики было бы достаточно.

  • Это был последний шаг по внедрению BERT Summarizer, языковой модели на основе преобразователя, которая была обучена Google и выпущена в 2018 году.
  • PyTorch должен быть установлен в виртуальной среде, на которой будет построен этот проект.
!pip install torchvision
import torch

#instantiating the BERT summarizer
from summarizer import Summarizer
bert_model = Summarizer()

#summarizing book revs
bert_summary = ''.join(bert_model(book_reviews_agg.review_text[2], ratio=0.2))
  • Строка book_reviews_agg.review_text[2] будет выбирать третий текстовый обзор из соответствующего измененного набора данных (который содержит обзоры и review_url). Коэффициент сводки установлен на уровне 20%, что означает, что размер сводки будет составлять до 20% исходного обзора. метод соединения просто объединяет результирующие сводные предложения в одну строку.
  • После запуска review_text выбранной книги исходное резюме может быть передано в резюме, и таким образом получается свернутая, обобщенная версия книги!

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

  • Ссылки:

— Использование BERT для извлечения резюме текста лекций Дерека Миллера

BERT: современный подход к подготовке к обработке естественного языка

— Визуализация графиков и метки при наведении с помощью Plotly

— Визуализация графиков и метки при наведении с помощью WordCloud

— Визуализация графиков и метки при наведении с помощью Circlify

Не стесняйтесь посетить следующие ссылки, а также увидеть создание этого проекта на моем GitHub в этом Git Repo!

Вы также можете связаться со мной в LinkedIn

Палак Гоэль | Университет Воксена | Студент инженерного факультета в области науки о данных и искусственного интеллекта