推荐系统和搜索引擎是现代App解决信息过载的标配系统,如果从零开发推荐系统,不仅需要耗费大量金钱和时间,而且很难满足快速上线推荐系统及不断迭代各种算法的业务要求。本文为您介绍如何使用阿里云产品创建推荐系统的数据和模型,从而快速搭建自己的推荐系统。
架构
完整的推荐流程包括召回和排序。召回是指从海量的待推荐候选集中,选取待推荐列表。排序是指对待推荐列表的每个Item与User的关联程度进行排序。推荐系统的架构如下。
基于PAI产品实现推荐系统的架构如下。其中:
数据分为User、Item及Behavior,均存储于MaxCompute。
使用DataWorks进行数据预处理和基础特征构建。
部分特征向量写入Tablestore。
使用Designer进行召回和排序算法相关计算。
排序模型可以直接通过EAS部署为RESTful API。
可以先将召回结果写入Tablestore,再使用PAI-AutoLearning进行配置,最终将结果传入EAS并部署为RESTful API。
完整的推荐流程如下。用户进入PAI平台,首先调用EAS的召回服务获取召回列表,然后在Tablestore中,使用User ID和Item ID读取特征,并将拼接好的样本传入EAS排序服务,最终获取排序结果。
推荐系统的相关资料
【强烈推荐】完整的推荐解决方案(基于该资料,一个人仅需一周即可搭建一套完整的企业级推荐系统):PAI平台搭建企业级个性化推荐系统。
【强烈推荐】通过视频,介绍如何快速搭建一套基于协同过滤的简单推荐系统;从零构建推荐系统。
FM-Embedding用法:使用FM-Embedding实现推荐召回。
冷启动场景
如果需要推荐很多Item,则可以考虑使用文章的标题和正文训练一个Doc2vec模型,并对每个Item生成一个向量,详情请参见文本分析。
您可以将向量放至ES引擎中,并添加向量检索插件,从而使每个向量可以召回相似向量。建议先对Item进行分类,再在同一个大类中查找相似向量。如果没有对Item进行分类,则可以标注部分Item,并将其作为分类模型。
基于用户行为的推荐场景
拥有冷启动及用户点击数据后,您可以按照如下方法构建推荐场景:
使用用户点击序列计算物品和物品之间的关系。您可以通过自然语言处理中的Word2vec算法,将每个用户点击的多个Item作为一个句子,并对该Item序列进行清洗(例如,访问的Item属于同一个大类、访问的Item在同一个Session中或两次访问Item的时间间隔不超过30分钟),详情请参见文本分析。
获得足够的User和Item数据后,您可以通过协同过滤etrec算法或矩阵分解算法计算得到Item-Item数据,详情请参见组件配置。
说明etrec算法中可以设置权重weight。例如,对点击、收藏及购买设置不同的权重。
获得用户点击Item的日志和曝光日志后,您可以使用GBDT模型(避免特征工程)或树模型(例如PS-SMART)整理用户特征和Item特征,详情请参见组件配置或GBDT回归。
使用如下任何一种算法挖掘特征(User和Item本身特征、User-Item交叉特征及Context特征):
挖掘特征工程:特征工程。
自动挖掘Autocross特征:Auto ML自动特征工程使用说明。
使用FM算法自动挖掘二阶交叉特征:使用FM-Embedding实现推荐召回。
模型训练完成后,使用EAS将其部署为RESTful API,详情请参见服务部署:控制台。
使用TextRank算法提取关键词,从而挖掘Item中的标签信息,详情请参见文本分析。
深度学习推荐算法
在PAI-TensorFlow基础上,PAI开发了经典的深度学习推荐算法,即源码级开源的DeepFM代码,详情请参见使用TensorFlow实现分布式DeepFM算法。DeepFM中详细描述了读取MaxCompute数据表、特征处理、构造Graph、训练及评估等过程。为了降低阿里云用户应用深度学习解决推荐问题的难度,PAI推出了EasyRec算法包,包含DeepFM、DIN、MultiTower及DSSM等经典推荐排序和召回算法,可以帮助您在PAI平台上快速训练推荐算法模型、验证模型效果及部署模型,详情请参见使用EasyRec构建推荐模型。