后端小白探索推荐系统知识体系

架构

由基础到高层的层级(参考达观数据):

基础层:
    运算和存储    
组件:
    机器学习基础组件
模型层
    更像是业务的数据结构。
    比如用户画像就是对一个用户有全方位的刻画。
算法
    构建在模型和组件之上。更接近与推荐。
算法组合层
    把各种算法组合在一起
应用层
    更接近于产品的业务
    
这里主要给出一个解耦,分的比较细,中小公司实际的架构可能不用分这么细。

推荐系统搭建流程

内容数据处理

    以文本内容举例:需要内容分类、主题提取、关键词提取、打标签等。

内容标签的权重

一篇文本可以有多个标签,每个标签的权重是不同的,表示如下:
[{tag:tag1,weight:weight1},{tag:tag2,weight:weight2}.....]
    

用户数据处理

基础数据收集

    收集包括行为数据、位置数据、用户属性数据。
    用户特征挖掘,结合自己的业务,挖掘业务领域内需要的特征。
    还可以根据用户的所有数据挖掘用户的兴趣点。

兴趣数据更新

生成推荐数据

    根据内容数据和用户特征数据进行预测。

效果验证

    产品设计之初,就要有对比测试的思路(业界称为ABTest)。
    算法优化的过程是:“数据分析发现问题、合理假设、设计实验、实现、数据分析、得出结论或新的假设”,不断循环反复。
 

特征工程

基本思路

几个方面去考虑:
    基本特征,
        文本中标题,摘要,作者等
    复杂特征
        
    统计特征
        主题提取
        文本特征提取中的tdidf
    自然特征
        感官可以感受到的特征

   经验,bad_case,容易做并且可以批量做。

如何提取内容特征

算法

工具包

常规tdidf
Gensim  

如何应对大的数据集

当有非常非常多篇文章时,有些算法的效率很低。
所以必须考虑使用大数据的方式分布式计算或者算法做一些优化。

三层标签体系

    分类-主题-关键词  

用户画像

如何给用户打标签

我们可以根据用户行为(比如,点击),计算用户对分类、主题、关键词的兴趣。

用户标签的权重

我们可以根据用户行为的次数得到用户兴趣标签的权重。

最简单的计数方法是用户点击一篇新闻,就把用户对该篇新闻的所有标签在用户兴趣上加一。

可以用内容标签权重相同的表示方法。

权重计算

流程:
    分别记录对用户曝光和用户点击的历史。
    提取内容相关的标签。
    降权:
        曝光未点击的降权
        热门内容降权
        按照时间衰减
    加权:
        曝光且点击的加权
    归一化

使用TD-IDF算法:
    把用户看成一篇文档,所有用户看成文档集合。
    一个用户下有很多标签,对一篇带有某个标签的的文章发生行为,
    标签+1(可以看成一个用户有很多标签组成,每个标签的次数都不相同)。
    
    P表示用户,T表示标签,
    w(P , T)表示一个标签T被用于标记用户P的次数。
    
    某个标签占用户比重公式:

image.png

            
            分母表示所有标签求和。
            
     某个标签在全部用户中的独特性(稀少性):
        IDF在文档应用的含义:
            某个词出现的文章范围越大,这个词越常见,越不能代表在文章中的独特性。
            IDF用出现范围的导数表示Log N/df : 表示某个词语独特性程度。
            
            df t: 某个t在出现t的所有文档数目。
     
        
        IDF 在标签在用户稀有程度的公式(值越大越稀有):

image.png

            
            分子表示全部用户全部标签之和。
            分母表示全部用户某个标签之和。
            
            与广泛程度成反比。
            
          
    

用户标签如何生成

这里主要讨论用户行为产生的标签。

用户标签根据用户行为涉及的内容标签加权得出。

举例:用户阅读了包含标签tag1的某篇文章,则用户获得了该标签,用户tag1标签的权重则由用户行为包含tag1的次数,以及
tag1在内容中的权重同时决定。

用户兴趣衰减

根据次数衰减

引入次数衰减的必要性:
用户的兴趣累加是线性的,数值会非常大,老的兴趣权重会特别高;
用户的兴趣有很强的时效性,昨天的点击要比一个月之前的点击重要的多,线性叠加无法突出近期兴趣。

可以用衰减函数来控制次数不能无线线性增大,而是最大趋近于某个值。

根据时间衰减

时间衰减保证时间较早的兴趣会在一段时间以后变的非常弱,同时近期的兴趣会有更大的权重。
todo

用户标签体系

标签的分类

第一类是**人口属性**,这一类标签比较稳定,一旦建立很长一段时间基本不用更新,标签体系也比较固定;

第二类是**兴趣属性**,这类标签随时间变化很快,标签有很强的时效性,标签体系也不固定;

第三类是**地理属性**,这一类标签的时效性跨度很大,如GPS轨迹标签需要做到实时更新,而常住地标签一般可以几个月不用更新,挖掘的方法和前面两类也大有不同

召回和排序

推荐系统整个流程可以分为召回、排序、重排序这三个阶段。

召回

就是找到用户可能喜欢的几百条资讯,

排序

就是对这几百条资讯利用机器学习的方法,预估用户对每条资讯的偏好程度。
一般以点击率衡量,也就是点击率预估问题。    

召回中的数据哪些才是用户更喜欢的?

是对多路召回的 item进行排序的一个过程。

排序模型

训练集一般是所有用户的全量曝光数据(分为点击未点击)
    train_y,train_x =(是否点击,(用户特征,内容特征))。
预测集一般是待召回的一批数据:
    与搜索排序类似,是预测这一批数据点击的概率,并且按照概率从大到小排序后展示给用户。

LTR 排序学习

排序学习在推荐领域主要用于排序阶段。

LTR(Learning torank)学习排序是一种监督学习(Supervised Learning)的排序方法。

优点:
    1.  可以根据反馈自动学习并调整参数
    2.  可以融合多方面的排序影响因素
    3.  避免过拟合(通过正则项)
    4.  实现个性化需求(推荐)
    5.  多种召回策略的融合排序推荐(推荐)
    6.  多目标学习(推荐)

特征抽取:
    搜索引擎根据用户点击。
    如果没有用户搜索的过程,之后点击的过程,是不是可以忽略搜索特征呢?
    todo

排序学习设计思想:
    单点法(Pointwise Approach)
    
    配对法(Pairwise Approach)
    
    列表法(Listwise Approach)
    
    todo
    

多路召回

统一召回探索

多路召回:
缺点:

  • 各个召回模型之间的得分不可比较
  • 需要对每个模型的召回个数设置超参数K(增加了试验的复杂度)
  • 与排序阶段存在协同。排序可能要修改特征

优点:

  • 上线一个新召回方式比较灵活,。但是如果采用统一召回,当想新增一种召回方式的时候,表现为新增一种或者几种特征,可能需要完全重新训练一个新的FM模型,整个召回系统重新部署上线,灵活性比多路召回要差。

FM统一召回:
优点:

  • 评分统一
  • 与排序协同性减少

缺点:

  • 上线新召回不灵活。新增一种或者几种特征,可能需要完全重新训练FM模型、部署上线。

其它

冷启动

可以给出一些热门,大众普遍喜欢的内容。
用概率解决大多数新用户的问题。

如何做效果验证

对比测试A/B Test

召回率准确率

准确率: 在一次推荐过程中,表示用户点击数/推荐总数。
        如果计算全平台的准确率,需要所有过程的平均。
        
        例如我们给用户推荐了100条新闻,其中10条用户产生了点击,那么准确率为10/100 = 0.1

召回率: 某个用户在平台上一共点击了200条。我们某次推荐用户点击了3条。那么本次推荐召回率是3/200。
        还有一种说法是用户喜欢的条数作为分子,用户喜欢这个具有主观性,所有我们直接使用用户点击比较直接。


我们统计的维度可以发生变化,这个指标口径我们内部保持一致就可以,方便我们对比推荐算法的提升。

评测指标

用户满意度

可以定性或者定量来度量该指标。

直接沟通或者调查问卷。

推荐结果满意或者不满意的反馈按钮,通过统计两种按钮的单击情况就可以度量系统的用户满意度。

更一般的情况下,我们可以用点击率、用户停留时间和转化率等指标度量用户的满意度。

预测准确度

这是一个离线评测指标。

计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录,
把数据分成训练集和测试集,在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,
并计算预测行为和测试集上实际行为的重合度作为预测准确度。

评分预测

基于用户历史评分,预测新物品评分。
计算公式:均方根误差(RMSE root-mean-square error)
        或者平均绝对误差(MAE Mean Absolute error)。

TopN预测

TopN预测的准确度一般通过两个指标度量:准确率,召回率。

通过训练集预测用户的推荐列表R(u),测试集中有实际的用户数据T(u)。

准确率=  二者交集/R(u) , 召回率= 二者交集/T(u)

关于评分预测和TopN推荐的讨论

 预测用户是否会看一部电影, 应该比预测用户看了电影后会给它什么评分更加重要。
 属于目的性的区别。

覆盖率

 
覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力。

推荐出来的物品占所有物品的比例。
可以这么理解:是不是所有物品都被曝光过,如果物品对用户有价值,
曝光是必须的,如果物品没有价值,曝光再多也没用。

更加细致的描述覆盖率,流行度分布: 统计推荐列表中不同物品出现次数的分布,
    如果所有物品出现次数差不多,那么推荐系统发掘长尾能力较好。
    分布平均好过分布比较陡峭。
    
信息论描述: 信息熵,(流行度的信息量)
经济学描述: 基尼系数(流行度的均衡程度)

社会学:搜索引擎的马太效应与推荐系统的长尾原理。

如何评判推荐系统是否有马太效应:
 可以比较基尼系数:
    用户初始物品流行度的基尼系数,推荐列表计算出的基尼系数,
    如果后者大于前者,则说明有马太效应。

物品流行度

多样性

与相似度是对应的。
公式定义:与物品两两相似成反比。
通俗的解释多样性:既能满足用户主要兴趣,又能兼顾次要兴趣。
    

新颖性

新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。

做用户调查可能是比较靠谱的方式。

有一种思路是,越不热门的物品往往越具有新颖性。

比较困难的是不牺牲精度的情况下保持新颖性。
    

惊喜度

     
如果推荐结果和用户的历史兴趣不相似,但却让用户觉 得满意,那么就可以说推荐结果的惊喜度很高。
 

信任度

  
用户信任推荐系统,那就会增加用户和推荐系统的交互。

信任不太容易度量。

提高的方法:
    提供推荐解释或者基于社交推荐或者从系统层面解决。
    

实时性

  

多网站中,因为物品(新闻、微博等)具有很强的时效性,所以需要在物品还具有时效 性时就将它们推荐给用户。

用户推荐列表中有多大比例的物品是当天新加 的来评测。

健壮性

 衡量了一个推荐系统抗击作弊的能力。
    
通过比较攻击前后推荐列表的相似度评测推荐的健壮性。

设计推荐系统时尽量使用代价比较高的用户行为,比如购买比浏览代价高。

 使用数据前,进行攻击检测,从而对数据进行清理。

总结

 
在给定覆盖率、多样性、新颖性等限制条件下,尽量优化预测准确度。

评测维度

上一节说的评测指标,整体性能不好,但是某种特定场景下性能比较好。

 增加评测维度的目的就是知道一个算法 在什么情况下性能最好或者最不好,
 让我们更了解算法的优缺点。
 
 评测维度分为如下3种:
    用户维度
        主要包括用户的人口统计学信息、活跃度以及是不是新用户等。
    物品维度
        包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。
    时间维度
        包括季节,是工作日还是周末,是白天还是晚上等

参考
    [如何成为一名推荐系统工程师(推荐系统需要掌握的知识体系)](https://cloud.tencent.com/developer/article/1143135)
   
    [如何搭建一套个性化推荐系统?(理论步骤,不包含实操)](https://blog.csdn.net/lsj960922/article/details/79229937)
    
    [文本聚类(特征提取)](https://www.jianshu.com/p/2aaf1a94b7d6)
    
    [文本标签提取算法](https://blog.csdn.net/lb521200200/article/details/53648879)
    
    [文本特征提取方法研究](https://cloud.tencent.com/developer/article/1057788)
    
    [如何设计用户画像的标签体系?](https://www.shujike.com/blog/2599)
    
    [如何从文本中构建用户画像](https://cloud.tencent.com/developer/article/1092075)
    
    [干货请收好:终于有人把用户画像的流程、方法讲明白了](https://mp.weixin.qq.com/s/dBrksCqoftlm0Zy_5ATvtg)
    
    [用户画像之标签权重算法](https://zhuanlan.zhihu.com/p/27828271)
    
    [推荐系统中的召回率与准确率](https://www.imooc.com/article/37726)
    
    [个性化推荐系统实践应用 (达观数据架构等)](https://www.jiqizhixin.com/articles/2019-02-11-6)
    
    [用户画像之标签权重算法](https://mp.weixin.qq.com/s?__biz=MzI0OTQyNzEzMQ==&mid=2247487211&idx=1&sn=848069327f8c778e42427158f20f9b36&chksm=e990eb3fdee7622915479093a8f43f61dc8772cc681498f95dbde6960f11c5ed8f75bde29a8e&scene=21#wechat_redirect)
    [Learning to rank的讲解,单文档方法(Pointwise),文档对方法(Pairwise),文档列表方法(Listwise)](https://blog.csdn.net/yuhushangwei/article/details/48547151)
    [学习排序LTR](https://blog.csdn.net/weilianyishi/article/details/48805695)
    [个性化推荐系统--学习排序综述(7-1)](https://blog.csdn.net/weixin_41640583/article/details/89073524)
    [推荐系统中的排序学习](https://lumingdong.cn/learning-to-rank-in-recommendation-system.html)
    [数据预处理之独热编码(One-Hot):为什么要使用one-hot编码?](http://www.likecs.com/show-64021.html)
    [如何提取特征?(第一版)](https://zhuanlan.zhihu.com/p/25743799)
    [文本特征抽取](https://blog.csdn.net/qll125596718/article/details/8306767)
    
阅读 630

推荐阅读