基于BERT嵌入的推荐系统

简介: 基于BERT嵌入的推荐系统

当你查看任何社交媒体平台时,你很可能会从其中看到很多建议,例如“为你推荐”。这些建议主要取决于你当前的兴趣,或者取决于以前的类似兴趣,甚至是将来可能会引起你兴趣的内容。这里总结了大多数公司将新产品推荐给客户的两种主要不同方法,它们是:

基于内容的过滤:这种方法的建议与你感兴趣的主题及其属性高度相关。例如:假设你喜欢阿森纳足球俱乐部及其在YouTube上的内容,那么你更有可能看到AFTV,英超联赛等建议,因为所有这些都具有足球,阿森纳等共同的属性。

协同过滤:这更多是基于多个用户及其兴趣的推荐。例如:假设你的朋友喜欢曼彻斯特联队,皇家马德里和英超,而你喜欢阿森纳,巴塞罗那和德甲联赛,那么你的朋友很有可能会收到有关拜仁慕尼黑的建议,而你可能会收到涉及巴黎圣日耳曼的建议,因为你们俩都喜欢足球反之亦然。

因此,我尝试在youtube趋势视频数据集上创建一个基于内容的推荐系统,该数据集从以下Kaggle来源获得:Trending videos 2021,其中我只使用了英国版本。数据集包含主要的特性,如标题,描述,观看统计,喜欢等。下面是数据集的示例:

640.png

对于任何涉及文本的机器学习任务,都必须对文本进行处理,并将其转换成数字,让机器进行解释。因为我们将只使用数据集的标题,所以我们将做一些基本的预处理步骤,包括删除特殊字符、降低字符等。下面的代码片段执行所需的预处理步骤。

df_yt=pd.read_csv('/content/GB_videos_data.csv')
df_yt=df_yt.drop_duplicates(subset= ['title'])
df_yt=df_yt[['title', 'description']]
df_yt.columns= ['Title', 'Description']
df_yt['cleaned_title'] =df_yt['Title'].apply(lambdax: x.lower())
df_yt['cleaned_title'] =df_yt['cleaned_title'].apply(lambdax: re.sub('[^A-Za-z0-9]+', ' ', x))

为了创建单词嵌入,我们将使用Tensorflow hub上托管的预训练BERT嵌入,可以将其下载以进行微调,迁移学习等。请访问tf-hub,以获取有关如何使用各种模型的更多说明。在这里,我使用了较小版本的bert un_cased进行预处理,例如去除停用词等。然后使用small_bert预训练的嵌入为数据集中存在的每个标题创建对应于内核的嵌入向量。最终的嵌入将既包含整个序列/标题的合并输出,也包含序列中每个标记的输出,但是在这里,我们将仅使用合并的输出来减少计算能力的使用,并且模型是 无监督学习模型。代码段如下所示:

preprocessor=hub.KerasLayer("https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3")
encoder=hub.KerasLayer("https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-128_A-2/1", trainable=True)
defget_bert_embeddings(text, preprocessor, encoder):
text_input=tf.keras.layers.Input(shape=(), dtype=tf.string)
encoder_inputs=preprocessor(text_input)
outputs=encoder(encoder_inputs)
embedding_model=tf.keras.Model(text_input, outputs['pooled_output'])
sentences=tf.constant([text])
returnembedding_model(sentences)
df_yt['encodings'] =df_yt['cleaned_title'].apply(lambdax: get_bert_embeddings(x, preprocessor, encoder))

如你在上面看到的,我为数据集中存在的所有标题生成了编码。因此,我们需要为感兴趣的单词创建编码,并在我们的兴趣和标题的编码之间找到相似之处。我使用余弦相似度来确定向量之间的相似度。简单单词中的余弦相似度是两个给定向量的内积,它的值越大表示两个向量越相似。因此,现在让我们使用各种兴趣来查询数据集,并对余弦相似度得分及其对应的标题进行排名。

defpreprocess_text():
text=input()
text=text.lower()
text=re.sub('[^A-Za-z0-9]+', ' ', text)
returntextquery_text=preprocess_text()
query_encoding=get_bert_embeddings(query_text, preprocessor, encoder)
df_yt['similarity_score'] =df_yt['encodings'].apply(lambdax: metrics.pairwise.cosine_similarity(x, query_encoding)[0][0])
df_results=df_yt.sort_values(by=['similarity_score'], ascending=False)

让我们假设我们的兴趣为:Action, Hollywood, Thrillers,并查看模型中的相应建议

640.png

该模型的结果似乎令人满意,其中一些与电影预告片和纪录片有关,其中包含一些含糊不清的内容

现在,让我们针对以下兴趣点看到相同的内容:Arsenal, Europa league, Premier league

640.png

是的,结果与这里高度相关

让我们再检查一次:Music, Taylor Swift, Imagine Dragons

640.png

当然,我们的模型可以正常的工作了。

在这里,我们使用youtube标题创建了自己的推荐系统,而这些视频只是英国流行的视频,我们可以利用更多的数据和推荐频道来做得更好,而不是直接推荐视频。谢谢大家花宝贵的时间在阅读本文章上。

目录
相关文章
|
2天前
|
PyTorch 算法框架/工具
Bert PyTorch 源码分析:一、嵌入层
Bert PyTorch 源码分析:一、嵌入层
38 0
|
搜索推荐 算法
使用 BERT 嵌入解决冷电影问题:推荐系统
推荐冷启动问题是指添加到目录中的项目没有或只有很少的交互。这主要是协同过滤算法的一个问题,因为它们依赖于项目的交互来进行推荐。解决这个问题 我使用 BERT Embeddings。我嵌入所有电影类型并保存所有 . 还将新电影类型转换为BERT 嵌入并使用最近邻。我找到最近的 k 部电影的新电影并将它们推荐给用户。我没有使用预训练电影嵌入层。因为每部电影都有 1 X 50 维度表示。在查询时,我需要计算每个点之间的距离,如果每个点都是 50 个或更多维度,这将非常耗时。
108 0
|
自然语言处理 搜索推荐 算法
亿级用户的平台是如何使用词嵌入来建立推荐系统的
亿级用户的平台是如何使用词嵌入来建立推荐系统的
101 0
亿级用户的平台是如何使用词嵌入来建立推荐系统的
|
数据采集 人工智能 自然语言处理
谷歌提出多语言BERT模型:可为109种语言生成与语言无关的跨语言句子嵌入
谷歌研究人员提出了一种LaBSE的多语言BERT嵌入模型。该模型可为109种语言生成与语言无关的跨语言句子嵌入,同时在跨语言文本检索性能优于LASER。
317 0
谷歌提出多语言BERT模型:可为109种语言生成与语言无关的跨语言句子嵌入
|
机器学习/深度学习 搜索推荐 数据可视化
基于神经网络嵌入的推荐系统:利用深度学习和维基百科构建图书推荐系统
快来利用深度学习和维基百科构建一个属于你自己的图书推荐系统吧,手把手教学,够简单够酷炫。
2851 0
|
2天前
|
PyTorch 算法框架/工具
Bert Pytorch 源码分析:五、模型架构简图 REV1
Bert Pytorch 源码分析:五、模型架构简图 REV1
36 0
|
2天前
|
机器学习/深度学习 人工智能 开发工具
如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face
Hugging Face是一个机器学习(ML)和数据科学平台和社区,帮助用户构建、部署和训练机器学习模型。它提供基础设施,用于在实时应用中演示、运行和部署人工智能(AI)。用户还可以浏览其他用户上传的模型和数据集。Hugging Face通常被称为机器学习界的GitHub,因为它让开发人员公开分享和测试他们所训练的模型。 本次分享如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face。
如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face
|
2天前
|
PyTorch 算法框架/工具
Bert Pytorch 源码分析:五、模型架构简图
Bert Pytorch 源码分析:五、模型架构简图
31 0
|
6月前
lda模型和bert模型的文本主题情感分类实战
lda模型和bert模型的文本主题情感分类实战
120 0