推荐解决方案综述

推荐系统和搜索引擎是现代App解决信息过载的标配系统,如果从零开发推荐系统,不仅需要耗费大量金钱和时间,而且很难满足快速上线推荐系统及不断迭代各种算法的业务要求。本文为您介绍如何使用阿里云产品创建推荐系统的数据和模型,从而快速搭建自己的推荐系统。

架构

完整的推荐流程包括召回和排序。召回是指从海量的待推荐候选集中,选取待推荐列表。排序是指对待推荐列表的每个ItemUser的关联程度进行排序。推荐系统的架构如下。推荐系统架构

基于PAI产品实现推荐系统的架构如下。PAI实现的推荐系统架构其中:

  • 数据分为User、ItemBehavior,均存储于MaxCompute。

  • 使用DataWorks进行数据预处理和基础特征构建。

  • 部分特征向量写入Tablestore。

  • 使用Designer进行召回和排序算法相关计算。

  • 排序模型可以直接通过EAS部署为RESTful API。

  • 可以先将召回结果写入Tablestore,再使用PAI-AutoLearning进行配置,最终将结果传入EAS并部署为RESTful API。

完整的推荐流程如下。推荐方案的架构用户进入PAI平台,首先调用EAS的召回服务获取召回列表,然后在Tablestore中,使用User IDItem ID读取特征,并将拼接好的样本传入EAS排序服务,最终获取排序结果。

推荐系统的相关资料

冷启动场景

如果需要推荐很多Item,则可以考虑使用文章的标题和正文训练一个Doc2vec模型,并对每个Item生成一个向量,详情请参见文本分析

您可以将向量放至ES引擎中,并添加向量检索插件,从而使每个向量可以召回相似向量。建议先对Item进行分类,再在同一个大类中查找相似向量。如果没有对Item进行分类,则可以标注部分Item,并将其作为分类模型。

基于用户行为的推荐场景

拥有冷启动及用户点击数据后,您可以按照如下方法构建推荐场景:

  1. 使用用户点击序列计算物品和物品之间的关系。您可以通过自然语言处理中的Word2vec算法,将每个用户点击的多个Item作为一个句子,并对该Item序列进行清洗(例如,访问的Item属于同一个大类、访问的Item在同一个Session中或两次访问Item的时间间隔不超过30分钟),详情请参见文本分析

  2. 获得足够的UserItem数据后,您可以通过协同过滤etrec算法或矩阵分解算法计算得到Item-Item数据,详情请参见组件配置

    说明

    etrec算法中可以设置权重weight。例如,对点击、收藏及购买设置不同的权重。

  3. 获得用户点击Item的日志和曝光日志后,您可以使用GBDT模型(避免特征工程)或树模型(例如PS-SMART)整理用户特征和Item特征,详情请参见组件配置GBDT回归

  4. 使用如下任何一种算法挖掘特征(UserItem本身特征、User-Item交叉特征及Context特征):

  5. 模型训练完成后,使用EAS将其部署为RESTful API,详情请参见服务部署:控制台

  6. 使用TextRank算法提取关键词,从而挖掘Item中的标签信息,详情请参见文本分析

深度学习推荐算法

PAI-TensorFlow基础上,PAI开发了经典的深度学习推荐算法,即源码级开源的DeepFM代码,详情请参见使用TensorFlow实现分布式DeepFM算法。DeepFM中详细描述了读取MaxCompute数据表、特征处理、构造Graph、训练及评估等过程。为了降低阿里云用户应用深度学习解决推荐问题的难度,PAI推出了EasyRec算法包,包含DeepFM、DIN、MultiTowerDSSM等经典推荐排序和召回算法,可以帮助您在PAI平台上快速训练推荐算法模型、验证模型效果及部署模型,详情请参见使用EasyRec构建推荐模型