recommender-system-tutorial

recommender-system-tutorial

使用TensorFlow和Keras构建推荐系统的实践教程

本项目提供了一个详细的推荐系统开发教程,基于TensorFlow Recommenders和Keras。教程介绍了信息检索和推荐系统基础,通过Jupyter notebook展示了MovieLens数据集处理、特征预处理、检索和排序模型构建,以及Spotify Annoy相似项搜索。内容涵盖了推荐系统的核心技术和实践方法,适合学术研究者和业界专业人士学习。

TensorFlow推荐系统机器学习深度学习MovieLens数据集Github开源项目

使用TensorFlow和Keras构建推荐系统

这是一个使用TensorFlow RecommendersKeras开发实用推荐系统(检索排序任务)并使用TensorFlow Serving部署的分步教程。

在这里,你可以找到关于信息检索和推荐系统的介绍,然后你可以探索Jupyter笔记本并在Google Colab中运行它以学习代码。

在Colab中打开 <a target="_blank" href="https://lightning.ai/new?repo_url=https%3A%2F%2Fgithub.com%2Fxei%2Frecommender-system-tutorial%2Fblob%2Fmain%2Frecommender_system_tutorial.ipynb"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/66cbfc41-8be4-4c71-8be8-d0a3ec27774c.svg" alt="在Studio中打开" /> </a>

在笔记本中,我们使用TesorFlow Datasets加载MovieLens数据集,使用Keras预处理层预处理其特征,使用TensorFlow Recommenders构建检索排序任务,并使用Spotify Annoy对相似项目进行索引和搜索。

本教程推荐给学术和行业爱好者。

简介

什么是推荐系统?

在线服务通常提供数千、数百万甚至数十亿的项目,如产品、视频片段、电影、音乐、新闻、文章、博客帖子、广告等。例如,Google Play商店提供数百万的应用程序,而YouTube提供数十亿的视频。[1]

然而,用户更喜欢看到一个简短的可能感兴趣的项目列表,而不是在完整的语料库中挣扎。他们通常可以搜索或过滤列表以找到最佳的几个项目,但有时他们甚至不知道自己真正想要什么(例如生日礼物)。在实体店中,专业销售员会通过有用的推荐来帮助解决这种情况。那么,为什么在在线商店中不这样做呢?

推荐系统可以检索、过滤并推荐最适合用户的个性化结果——用户可能会购买的结果。因此,它是现代企业提高转化率的主要要求之一。2009年9月21日,Netflix向一个团队颁发了100万美元的大奖,该团队的算法在预测评分方面比Netflix自己的算法提高了10.06%。[2]

<p align="center"> <img width="634" height="416" src="https://yellow-cdn.veclightyear.com/0a4dffa0/6afe2462-3302-4407-b11d-ecc351bd394b.jpeg"> </p>

推荐系统是一个根据查询(上下文)(即我们所知道的喜好列表)来过滤语料库(完整的项目目录)并生成候选项(项目、文档)简短列表的系统。查询(上下文)可以是用户ID用户的地理位置用户的历史购买记录,而生成的候选项可以是我们猜测用户可能感兴趣的一些新项目。

查询也可以是项目ID其图像其文本描述,而候选项可以是语料库中的一些相似或相关项目。

<p>&nbsp;</p> <p align="center"> <img width="556" height="82" src="https://yellow-cdn.veclightyear.com/0a4dffa0/1ec32d83-568e-4e68-8546-88742f8a6a27.png"> </p> <p>&nbsp;</p>

推荐阶段(任务)

在实践中,处理大型语料库并将其过滤成简短列表是一项难以处理且效率低下的任务。因此,实际的推荐系统通常有两个(或三个)过滤阶段:

  1. 检索(候选生成)
  2. 排序(评分)
  3. 重新排序或优化等
<p align="center"> <img width="700" height="394" src="https://yellow-cdn.veclightyear.com/0a4dffa0/e986505b-591a-473e-a7ee-04b1f54fa09d.png"> </p> <p align="center"> <img width="700" height="394" src="https://yellow-cdn.veclightyear.com/0a4dffa0/a5a74e44-b028-4ce3-8fb5-f713069784e1.png"> </p>

基于内容的过滤与协同过滤

过滤项目是基于相似性的。我们可以基于相似的候选项(基于内容的过滤)或基于查询和候选项之间的相似性(协同过滤)来过滤列表。协同过滤算法通常比基于内容的方法表现更好。

<p align="center"> <img width="700" height="330" src="https://yellow-cdn.veclightyear.com/0a4dffa0/745562aa-b11f-4129-b020-ef65a234855b.png"> </p> ### 查询或候选项的表示

查询或候选项有许多不同的特征。例如,查询可以由以下特征构成:

  • 用户ID
  • 用户历史记录
  • 用户职业
  • 等等

而候选项可以具有如下特征:

  • 项目描述
  • 项目图片
  • 项目价格
  • 发布时间
  • 等等

这些明显的特征可以是"数值变量"、"分类变量"、"位图"或"原始文本"。然而,这些低级特征还不够,我们应该从这些明显特征中提取一些更抽象的"潜在特征",以将查询或候选项表示为数值型高维向量 - 即"嵌入向量"。

"矩阵分解"(MF)是一种经典的协同过滤方法,用于从"用户ID"、"项目ID"和"评分"特征中学习一些"潜在因子"(潜在特征),并用潜在(嵌入)向量表示用户项目

<p align="center"> <img width="826" height="398" src="https://yellow-cdn.veclightyear.com/0a4dffa0/3630d9bc-7f4e-4c11-aa82-2157495a3aef.png"> </p>

矩阵分解方法只使用"用户ID"和"候选项ID"特征协同学习"潜在特征"。事实上,它并不关心其他侧面特征,如"候选项描述"、"价格"、"用户评论"等。

为了在学习潜在特征(嵌入)时同时涉及侧面特征和ID,我们可以使用深度神经网络(DNN)架构,如"softmax"或"双塔"神经模型。

<p align="center"> <img width="540" height="340" src="https://yellow-cdn.veclightyear.com/0a4dffa0/23f58245-56d5-4e36-b90b-5367cf4939f6.gif"> </p>

YouTube的双塔神经模型使用侧面特征将查询和候选项表示为抽象的高维嵌入向量。

<p align="center"> <img width="540" height="340" src="https://yellow-cdn.veclightyear.com/0a4dffa0/e84831a1-c396-4089-a588-18d9ae5db494.png"> </p>

Movielens数据集

"Movielens"数据集是推荐系统研究领域的一个基准数据集,包含一组用户对电影的评分,这些数据收集自MovieLens网站 - 一个电影推荐服务。

Movielens有5个不同版本可用于不同目的:"25m"、"latest-small"、"100k"、"1m"和"20m"。在本教程中,我们将使用"100k"版本。有关不同版本的更多信息,请访问官方网站

movielens/100k-ratings

MovieLens数据集的最早版本,包含943名用户对1,682部电影的100,000条评分。每个用户至少对20部电影进行了评分。评分以整星增量给出。除了电影和评分数据外,该数据集还包含用户的人口统计数据。

movielens/100k-movies

这个数据集包含movielens/100k-ratings数据集中被评分的1,682部电影的数据。

<p>&nbsp;</p>

探索Jupyter笔记本

<table class="tfo-notebook-buttons" align="left"> <td> <a target="_blank" href="https://github.com/xei/recommender_system_tutorial/blob/main/recommender_system_tutorial.ipynb"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/ac122c72-43ad-4b89-9259-6c3813e3b78b.png" /> 在GitHub上查看代码</a> </td> <td> <a target="_blank" href="https://colab.research.google.com/github/xei/recommender_system_tutorial/blob/main/recommender_system_tutorial.ipynb"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/ace55649-0058-4ddf-9dcf-160cf7d25d71.png" /> 在Google Colab中运行代码</a> </td> </table> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p>

捐赠

如果这个项目对你有帮助,请给个⭐!

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多