电影推荐系统实现原理及Ptyhon源代码下载

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
简介: 在这个教程中,我们将实现一个基于电影内容本身相似性的推荐系统。我们将利用自然语言处理/ NLP技术来提取每个电影的特征,然后建立不同电影之间的余弦相似性矩阵,最后利用相似矩阵来推荐指定电影的10个最相似电影。

在这个教程中,我们将实现一个基于电影内容本身相似性的推荐系统。我们将利用自然语言处理/ NLP技术来提取每个电影的特征,然后建立不同电影之间的余弦相似性矩阵,最后利用相似矩阵来推荐指定电影的10个最相似电影。

在这里插入图片描述

快速掌握Python开发技能,推荐汇智网的Python在线课程

当我们评价互联网上的产品和服务时,我们表达并分享出来的倾向性,被推荐系统用来生成个性化推荐。最常见的例子就是亚马逊的商品推荐、谷歌的搜索结果推荐和Netflix上的视频推荐。

有两种类型的推荐系统:

  • 协同过滤 - 基于用户的评价和消费行为来分组相似的用户,然后向用户推荐可能感兴趣的产品或服务
  • 基于内容的过滤 - 基于产品/服务本身的相似性向用户推荐

在这里插入图片描述

在这个教程中,我们将利用电影的特征,例如风格、剧情、导演和主要演员等,来计算不同电影之间的余弦相似度。我们使用从data.world下载的IMDB前250部英文电影作为我们的数据集

1、导入Python库和数据集

确保已经安装了RAKE库,或者参考以下命令安装:

pip install rake_nltk

然后使用以下代码读入数据集:

from rake_nltk import Rake
import pandas as pd
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import CountVectorizerdf = pd.read_csv('IMDB_Top250Engmovies2_OMDB_Detailed.csv')
df.head()

数据集中有250部电影(行),每部电影包含38个属性(列)。不过我们只需要
用到其中的5个属性: ‘Title’, ’Director’, ’Actors’, ’Plot’, and ’Genre’。
下面的代码显示10个流行的导演的作品数量直方图:

df['Director'].value_counts()[0:10].plot('barh', figsize=[8,5], fontsize=15, color='navy').invert_yaxis()

在这里插入图片描述

2、数据预处理

首先使用NLP对数据进行预处理,将属性合并为一列,然后进行矢量化,每个单词对应一个得分,最后计算余弦相似性得分。

我们使用Rake函数来提取剧情列中整句话的最相关单词,并将提取结果放入一个新的‘Key_words’:

df['Key_words'] = ''
r = Rake()for index, row in df.iterrows():
    r.extract_keywords_from_text(row['Plot'])
    key_words_dict_scores = r.get_word_degrees()
    row['Key_words'] = list(key_words_dict_scores.keys())

在这里插入图片描述

演员和导演的名字被小写并转换为唯一标识值。我们将姓、名合并,这样Chris Evans和Chris Hemsworth就不会有相似性,否则的话,这两个名字就会有50%的相似性,因为都包含了Chris:

df['Genre'] = df['Genre'].map(lambda x: x.split(','))
df['Actors'] = df['Actors'].map(lambda x: x.split(',')[:3])
df['Director'] = df['Director'].map(lambda x: x.split(','))for index, row in df.iterrows():
    row['Genre'] = [x.lower().replace(' ','') for x in row['Genre']]
    row['Actors'] = [x.lower().replace(' ','') for x in row['Actors']]
    row['Director'] = [x.lower().replace(' ','') for x in row['Director']]

在这里插入图片描述

3、创建单词的表示

在数据预处理之后,这四个列‘Genre’, ‘Director’, ‘Actors’ 和 ‘Key_words’ 合并为一个新
的列‘Bag_of_words’,这样最终的数据帧只有2列:

df['Bag_of_words'] = ''
columns = ['Genre', 'Director', 'Actors', 'Key_words']for index, row in df.iterrows():
    words = ''
    for col in columns:
        words += ' '.join(row[col]) + ' '
    row['Bag_of_words'] = words
    
df = df[['Title','Bag_of_words']]

在这里插入图片描述

4、创建相似性矩阵

推荐模型只能读取并比较向量,因此我们需要将Bag_of_words列使用CountVectorizer转换为向量表示,这是一个简单的频率计数器。一旦我们得到了所有单词的计数矩阵,就可以利用cosine_similarity函数来比较电影的相似性。

count = CountVectorizer()
count_matrix = count.fit_transform(df['Bag_of_words'])cosine_sim = cosine_similarity(count_matrix, count_matrix)
print(cosine_sim)

在这里插入图片描述

接下来是创建电影标题序列,序列的索引对应相似矩阵的行和列。

indices = pd.Series(df['Title'])

5、运行测试推荐模型

最后一步是创建一个函数,以电影标题为输入,返回其最相似的10个电影。这个函数将输入电影标题与相似矩阵进行比较,以降序提取相似的电影:

def recommend(title, cosine_sim = cosine_sim):
    recommended_movies = []
    idx = indices[indices == title].index[0]
    score_series = pd.Series(cosine_sim[idx]).sort_values(ascending = False)
    top_10_indices = list(score_series.iloc[1:11].index)
    
    for i in top_10_indices:
        recommended_movies.append(list(df['Title'])[i])
        
    return recommended_movies

现在我们可以测试模型了。输入“The Avengers” 看看推荐结果:

recommend('The Avengers')

在这里插入图片描述

6、源代码

你可以在这里下载源代码。


原文链接:用NLP实现基于内容的电影推荐系统 - 汇智网

目录
相关文章
|
29天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
52 1
|
6月前
|
搜索推荐 算法 小程序
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
|
2月前
|
搜索推荐 关系型数据库 数据库
#646253#基于django/neo4j的电影打分推荐系统
#646253#基于django/neo4j的电影打分推荐系统
21 0
|
6月前
|
搜索推荐 算法 Java
基于SpringBoot+Vue电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
基于SpringBoot+Vue电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的协同过滤电影推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的协同过滤电影推荐系统附带文章源码部署视频讲解等
50 0
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的个性化电影推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的个性化电影推荐系统附带文章源码部署视频讲解等
51 0
基于springboot+vue.js+uniapp小程序的个性化电影推荐系统附带文章源码部署视频讲解等
|
7月前
|
搜索推荐 算法 Java
电影推荐|基于SSM+vue的电影推荐系统的设计与实现(源码+数据库+文档)
电影推荐|基于SSM+vue的电影推荐系统的设计与实现(源码+数据库+文档)
136 3
|
6月前
|
机器学习/深度学习 搜索推荐 算法
【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解
【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解
|
7月前
|
机器学习/深度学习 数据采集 算法
基于Apriori关联规则的电影推荐系统(附python代码)
这是一个基于Apriori算法的电影推荐系统概览。系统通过挖掘用户评分数据来发现关联规则,例如用户观看某部电影后可能感兴趣的其他电影。算法核心是逐层生成频繁项集并设定最小支持度阈值,之后计算规则的置信度。案例中展示了数据预处理、频繁项集生成以及规则提取的过程,具体包括用户评分电影的统计分析,如1-5部电影的评分组合。最后,通过Python代码展示了Apriori算法的实现,生成推荐规则,并给出了一个简单的推荐示例。整个过程旨在提高推荐的精准度,基于用户已评分的电影推测他们可能尚未评分但可能喜欢的电影。
369 1
基于Apriori关联规则的电影推荐系统(附python代码)
|
7月前
|
算法 搜索推荐 数据挖掘
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集