Контентная фильтрация в машинном обучении
Большинство систем рекомендаций используют фильтрацию на основе контента и совместную фильтрацию, чтобы показывать рекомендации пользователю, и чтобы обеспечить лучший пользовательский опыт. Фильтрация на основе контента генерирует рекомендации, основанные на поведении пользователя. В этой статье я расскажу, что такое контентная фильтрация в машинном обучении и как ее реализовать с помощью Python.
Что такое система рекомендаций?
Система рекомендаций используется для выработки персонализированных рекомендаций путем оценки предпочтений пользователя с использованием таких данных, как история пользователя, время просмотра или чтения и т. д. Существует множество приложений, основанных на системах рекомендаций. Вот основные категории этих приложений:
- Интернет-магазины (Amazon, Zomato и т. д.)
- Аудио (песни, аудиокниги, подкасты и т. д.)
- Рекомендации по видео (YouTube, Netflix, Amazon Prime и т. д.)
Итак, существует два типа рекомендательных систем:
- Совместная фильтрация
- Контентная фильтрация
Совместная фильтрация использует поведение других пользователей, у которых есть такие же интересы, как и вас, и на основе действий этих пользователей показывает вам идеальные рекомендации. Система рекомендаций, основанная на методе, основанном на контенте, покажет вам рекомендации, основанные на вашем поведении. В следующем разделе я подробно расскажу, как работает контентная фильтрация в машинном обучении, а затем мы посмотрим, как реализовать ее с помощью Python.
Контентная фильтрация
Система рекомендаций, основанная на фильтрации на основе контента, предоставляет рекомендации пользователю путем анализа описания контента, которое было оценено пользователем. В этом методе алгоритм обучается понимать контекст контента и находить сходства в другом контенте, чтобы рекомендовать тот же класс контента конкретному пользователю.
Давайте разберемся в процессе фильтрации по контенту, посмотрев на все этапы этого метода для выработки рекомендаций для пользователя:
- Все начинается с определения ключевых слов, чтобы понять контекст. На этом этапе он игнорирует ненужные слова, такие как стоп-слова.
- Затем он находит такой же контекст в другом контенте, чтобы найти сходства. Чтобы определить сходство между двумя или более текстами, метод, основанный на контенте, использует косинусное сходство.
- Он находит сходство, анализируя корреляцию между двумя или более пользователями.
- Затем он генерирует рекомендации, вычисляя средневзвешенное значение всех пользовательских оценок для активных пользователей.
Надеюсь, вы теперь понимаете, как работает контентная фильтрация. В следующем разделе я расскажу, как реализовать это с помощью языка программирования Python.
Контентная фильтрация с помощью Python
Надеюсь, что теперь вы поняли, что такое системы рекомендаций и как контентный метод используется для выработки рекомендаций для пользователя. Теперь давайте посмотрим, как реализовать метод, основанный на контенте, с помощью Python. Для этой задачи я буду использовать набор данных, предоставленный MovieLens, для создания системы рекомендаций фильмов с использованием фильтрации на основе содержимого с помощью Python.
Давайте начнем решать эту задачу с импорта необходимых библиотек Python и набора данных:
import numpy as np import pandas as pd from sklearn.metrics.pairwise import cosine_similarity from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import linear_kernel movies = pd.read_csv('movies_metadata.csv') print(movies.head())
adult belongs_to_collection budget ... video vote_average vote_count 0 False {'id': 10194, 'name': 'Toy Story Collection', ... 30000000 ... False 7.7 5415.0 1 False NaN 65000000 ... False 6.9 2413.0 2 False {'id': 119050, 'name': 'Grumpy Old Men Collect... 0 ... False 6.5 92.0 3 False NaN 16000000 ... False 6.1 34.0 4 False {'id': 96871, 'name': 'Father of the Bride Col... 0 ... False 5.7 173.0
Теперь я собираюсь реализовать все шаги, о которых я говорил, в упомянутом выше процессе фильтрации на основе содержимого с использованием Python. Здесь я сначала подготовлю данные, затем выберу столбцы, которые мы будем использовать для понимания контекста контента, затем мы удалим стоп-слова и, наконец, найдем косинусное сходство для выработки рекомендаций:
tfidf = TfidfVectorizer(stop_words='english') movies['overview'] = movies['overview'].fillna('') overview_matrix = tfidf.fit_transform(movies['overview']) similarity_matrix = linear_kernel(overview_matrix,overview_matrix) mapping = pd.Series(movies.index,index = movies['title']) print(mapping)
Результат:
title |
|
Toy Story |
0 |
Jumanji |
1 |
Grumpier Old Men |
2 |
Waiting to Exhale |
3 |
Father of the Bride Part II |
4 |
... |
|
Subdue |
45461 |
Century of Birthing |
45462 |
Betrayal |
45463 |
Satan Triumphant |
45464 |
Queerama |
45465 |
Length: 45466, dtype: int64 |
Теперь давайте создадим функцию и посмотрим, как работает система рекомендаций:
def recommend_movies(movie_input): movie_index = mapping[movie_input] similarity_score = list(enumerate(similarity_matrix[movie_index])) similarity_score = sorted(similarity_score, key=lambda x: x[1], reverse=True) similarity_score = similarity_score[1:15] movie_indices = [i[0] for i in similarity_score] return (movies['title'].iloc[movie_indices]) print(recommend_movies('Life Begins for Andy Hardy'))
Результат:
23530 |
Andy Hardy Meets Debutante |
21422 |
A Family Affair |
26304 |
You're Only Young Once |
10301 |
The 40 Year Old Virgin |
29369 |
Andy Hardy's Private Secretary |
23843 |
Andy Hardy's Blonde Trouble |
15348 |
Toy Story 3 |
43427 |
Andy Kaufman Plays Carnegie Hall |
38476 |
Superstar: The Life and Times of Andy Warhol |
42721 |
Andy Peters: Exclamation Mark Question Point |
8327 |
The Champ |
28128 |
The Mayor of Casterbridge |
21359 |
Andy Hardy's Double Life |
32086 |
Brother's Keeper |
Name: title, dtype: object |
Итак, я надеюсь, вам понравилась эта статья о том, что такое контентный метод в машинном обучении и его реализация с использованием Python.