全部产品
云市场

推荐解决方案综述

更新时间:2020-04-27 16:05:18

推荐系统和搜索引擎是现代App解决信息过载的两大标配的系统,但是要完整的配备推荐系统和搜索引擎团队的产品、算法、引擎、测试开发工程师,在从头开发需要大量金钱和时间。很多时候,公司需要快速的上线推荐场景,然后迭代各种算法的效果。本文梳理了如何快速的使用阿里云的现有产品来创建一个推荐系统的数据和模型。通过这些工具你可以很快的建立自己的推荐系统。

本文包含四部分,分别是基于阿里云实现的推荐方案架构、PAI已经沉淀的材料、如何解决推荐业务的冷启动问题、如何解决基于用户行为的推荐。

整体架构

在一个完整的推荐流程中分为召回和排序两个阶段,召回的主要作用是从海量的候选集筛选出一个待推荐的小候选集,排序的作用是从召回得到的小候选集计算出每个Item可能被User关联的程度。

基于PAI产品实现的整体推荐架构:

  • 数据分为User、Item和Behavior,并存放于MaxCompute
  • 使用Dataworks进行数据预处理和基础特征构建
  • 部分特征向量写入TableStore
  • 使用PAI-Studio做召回和排序算法的计算
  • 排序模型可直接发部到PAI-EAS成为RestfulAPI
  • 召回结果可以先写入TableStore,然后在PAI-AutoLearning中进行配置,最终写入PAI-EAS成为RestfulAPI

最终完整用法:

用户进入平台,先调用PAI-EAS的召回服务获取召回列表,然后拿着UserID和ItemID去TableStore取特征,接着将拼接好的样本送入PAI-EAS排序服务,最终获取排序结果。

官方推荐业务介绍资料

冷启动的场景

当我们有一堆item要推荐,这个时候我们如何启动?这个时候我们可以考虑用文章的标题和正文训练一个doc2vec模型,对每个Item生成一个向量来表示它。https://help.aliyun.com/document_detail/42747.html

我们可以把向量放到ES引擎中,添加向量检索插件即可,这样每个向量可以召回相似的向量。这里一个技巧,最好对Item做分类,再同一个大类里面找相似的向量。https://help.aliyun.com/document_detail/144868.html

如果你的Item没有分类也没有关系,可以标注一些item来做分类模型。https://help.aliyun.com/document_detail/90737.html

基于用户行为的推荐场景

有了冷启动之后和用户点击数据之后,我们可以用户的点击序列来计算物品和物品之间的关系。可以借助自然语言处理中的word2vec算法,把一个用户点击的多个item作为一个句子。不过这里用户的item 序列要做一下清洗。例如访问的item最好是同一个大类;访问的item 再同一个session中(或者两次访问item的时间间隔不超过30分钟)。https://help.aliyun.com/document_detail/42747.html

另外有足够的user和item数据之后,我们可以根据etrec算法包,通过协同过滤计算得到i2i数据。注意etrec算法中可以设置一个权重weight,例如点击、收藏、购买可以设置不同的权重。https://help.aliyun.com/document_detail/117423.html

还可以使用矩阵分解算法:https://help.aliyun.com/knowledge_detail/144018.html

有了一堆的用户点击item的日志和曝光日志之后,我们可以先整理一些用户特征和Item特征,这个时候可以使用GBDT模型。为什么先使用GBDT算法?因为可以不用做特征工程啊。https://help.aliyun.com/document_detail/42745.html

也可以尝试更加牛逼的树模型,如阿里PS-Smart:https://help.aliyun.com/document_detail/42745.html

有了这些之后,我们还是挖掘更多的特征把,如user、item本身的特征,user + item 的交叉特征,还有context的特征如场景、时间、天气等等。

特征工程挖掘可以使用:https://help.aliyun.com/document_detail/42715.html

特征太多,需要自动挖掘autocross特征:https://help.aliyun.com/document_detail/157638.html

可以使用FM算法,更多的二阶特征交叉,自动挖掘特征:https://help.aliyun.com/document_detail/150032.html

模型都搞好之后,可以尝试EAS模型部署:https://help.aliyun.com/document_detail/113696.html

进一步我们需要挖掘Item里面的标签,使用textRank算法提取关键词:https://help.aliyun.com/document_detail/42747.html