课程笔记:推荐系统入门

2021-01-24  本文已影响0人  噗嗤噗哩噗通

前言:
算是给自己搞点新的事情去处理吧,输出有助于自己整理思路
越到后面越晕,二刷的时候再整理一下笔记吧,现在估计很乱,和我现在脑子里的思路一样。


1. 入门概念

1.1 推荐系统的目的:
找到user和item之间的联系
1.2 推荐适用场景:
什么时候不适合于做推荐:

这里我就衍生出2个问题:

  1. 广告类的推荐是不是都会存在留存过低的问题?
  2. 内容推荐/电商类的推荐才是真的可以累积经验的?

1.3 推荐系统预测问题模式:

1.4 几个常见问题

1.5 推荐系统的几个关键元素

2. 内容推荐

1. 用户画像

2. 文本建立到用户画像
(感觉就是word2vec方法?)

2.1 结构化文本/构建特征方式

TF-IDF方法

  1. 在一篇文字中反复出现的词更重要
  2. 在所有文本中都频繁出现的词更不重要
原理.png
特点.png

TextRank方法
出现共现关系的会互相支持对方成为关键词。

内容分类方法
短文本分类方法:SVM
现有开源方法:facebook的FastText

实体识别:
序列标注问题(隐马尔可夫模型或者条件随机场)
词典法:先分毫词典,然后使用 trie-tree数据结构存储,然后匹配。
工业级别工具:spaCy,NLTK

聚类
算法:LDA主题模型算法(达到软聚类效果,一个文本属于多个类簇),需要计算k个主题之间两两相似程度,筛选较低的k值。
开源工具:Gensim,PLDA

词嵌入
词向量的用途:(word2vec)

2.2 标签选择
前面的方法为特征构建,然后这一步是建立标准做特征筛选。

常用方法:
卡方检验(词和类别的关系,如果有关系,则为关键词)

image.png
image.png
image.png

信息增益(和决策树里面的信息增益感觉差不多,就是看增加一个特征之后,信息增加多少,从而判断最重要的特征)

卡方针对每一个行为单独筛选一套标签,然后信息增益是针对全局做统一筛选。

2.3 内容推荐框架

image.png

主要步骤与核心点:

3. 近邻推荐

3.1 协同过滤

3.1.1 基于用户的协同过滤

核心:用户物品关系矩阵
计算方式:通过用户物品向量计算用户相似度。
输出:

image.png

问题:

  1. 矩阵稀疏处理方式:大部分元素由于是0,所以可以用CSR或者COO存储。
  2. 相似度计算:随机抽出10维计算。现有技巧:DIMSUM 算法,或者把循环使用向量来计算。
  3. 用户量大:原始矩阵map成用户对,值为两个用户对同一个物品的评分积。
    • 遍历用户喜欢物品列表
    • 获取相似用户列表
    • 拼接为:(相似用户id,物品id,1),value(相似度)
      (相似用户id,物品id,0),value(喜爱程度*相似度)
    • 结果: (相似用户id,物品id,0)/(相似用户id,物品id,1)
  4. 优化:
    • 对热门物品增加惩罚。
    • 增加喜欢程度的时间衰减。

3.1.2 基于物品的协同过滤

  1. 物品之间相似度优化:
    • 物品中心化:感觉就是归一化,去掉边缘值。value-avg(value)
    • 用户中心化:用户维度,计算均值,然后把他打过的分都减去均值 value-avg(value)
  2. 计算推荐结果:
    topk问题:
    目标:计算用户u对物品i的分数

3.1.3 相似度:

数据分类:

4. 矩阵分解

4.1 netflix prize中推荐算法

近邻模型问题:

  1. 物品之间相关性。
  2. 矩阵稀疏导致计算结果不稳定。

矩阵分解:技术的svd算法(奇异值分解)
机器学习框架核心(损失函数/优化算法)

image.png

增加偏置信息:(比svd要多学习2个参数)


image.png

增加历史行为:
在学习参数上增加:x(隐式反馈的物品向量),y(用户属性向量)

时间因素:

4.2 矩阵分解优化方法

image.png

评价标准:

  1. 偏差:偏差大,欠拟合
  2. 方差:方差大,过拟合

交替最小二乘法

image.png
优点:
image.png

隐式反馈
one-class:从解决评分预测问题专向解决预测行为
算法改进成:加权交替最小二乘:
(行为的次数是对行为的置信度反应)

image.png

问题:真谛没有反馈的缺失值怎么处理

算法汇总:

4.3 排序算法:贝叶斯个性化排序(BPR模型)

目标:能够较好的为用户排列出更好的物品相对顺序
计算相对顺序。
评价标准:auc
目标函数:目标函数的构造和auc是搭配的。
训练方法:结果重复抽样的梯度下降

5. 模型融合:

经典融合模型:gbdt+lr

梯度下降优化算法:google13年发布的FTRL

image.png

特征组合:

因子分解机:用于模型融合,对召回结果重新排序。

FFM:(需要对样本做归一化)

wide and deep模型:

image.png

6.mab:

bandit算法:

把推荐具体物品,上升到选择策略。


image.png

bandit算法:计算选择会带来多少遗憾,遗憾越少越好。bandit累积遗憾增长慢,就是好算法

image.png image.png

常用算法:
汤普森采样算法:每一类基于不同的贝塔分布,取随机数,取最大。


image.png image.png

ucb算法:同样的以平均收益为基准,对于选择次数不足的给予照顾,选择倾向是哪些确定收益较好的算法:


image.png

贪婪算法:感觉就是,给一个随机数e(0-1),以1-e的概率选择平均收益最大类。

同bandit算法解决冷启动问题:


image.png

结合上下文的bandit算法:

LinUCB算法
随着m增加,置信上边界减少

image.png

高级版ucb:
有部分特征对应的参数是在左右候选之间共享的,就是无论哪个被选中,都会去更新这部分参数。

image.png image.png

bandit算法与协同过滤结合

COFIBA算法:
内容相关。

image.png image.png

针对第i个用户,每次推荐时做如下操作:


image.png

更新类簇的办法:


image.png
image.png image.png

ee问题:

  1. 真的在探索的时候不能推荐质量过低的问题
  2. 需要有精心的产品设计

7. 深度学习在推荐系统中的应用:

深度学习中可以帮助推荐系统的部分:

  1. embedding:矩阵分解的隐因子,word2vec(目的是得到词的嵌入向量)
  2. predicting

各种2vector-》 AntoEncoder:学习不同的嵌入向量
youtube 视频推荐

image.png

rnn构建个性化音乐

结合上时间属性之后的优化

image.png

其他应用算法:

rank算法:

  1. 热门排行榜
  2. 针对老用户也推荐热门产品
  3. 整理兜底方案

时间因素

image.png image.png

好评率预估公式:威尔逊区间


image.png image.png

加权采样算法:

有限数据集

image.png

流采样

推荐候选的去重策略:

去重:

  1. 内容源去重
  2. 不重复的给用户推荐

simhash算法
最开始主要是搜索引擎公司使用。

image.png
不太重要的词,设置权重为1或者-1
(每个词hash成一个整数,有jenkins算法)

BloomFilter 算法 布隆过滤器
防止重复内容。(针对内容id的去重复)

image.png

工程部分:
只想说,前面的理论是入门的个鬼,完全跪了。
看工程部分能不能不那么令人头秃


常见架构:

1. 典型信息流架构:

Activity Stream的feed架构


image.png

2. netflix个性化推荐架构:

image.png

在线任务:防止重复的过滤,简单算法逻辑,模型预测阶段,商业目标相关的过滤与调权,场景有关的逻辑,互动性强的算法。
离线任务:模型训练与推荐结果计算。
近线任务:数据来源是实时的,进入在线数据库,等到有发生请求再提供服务。(流计算,storm,spark streaning,flink,manhattan)

image.png

3. 总览推荐框架和搜索,广告的关系:

image.png

搜索:解决为精准快速的展示结果,主要目标为降低延迟与提高相关性
推荐:时间杀手,给用户展示多样性,
广告:给信息找人,带有纯粹的商业目标。

架构抽象

  1. 过滤候选:推荐系统中的召回则为过滤候选。
  2. 排序候选:排序上的差异主要是目标不一样。(排序模型:BM25,Learn to rank模型)
  3. 个性化输出:

推荐系统与搜索引擎是存在互助的。搜索累积客户兴趣,推荐满足长期兴趣。

常见模块:

1. 数据采集

数据采集:

日志的数据模型:

收集哪些数据:

用什么工具:


image.png

质量检测:

2.实时推荐:

需要满足:数据实时进来,实时计算,实时更新
实时流数据:kafka,storm,flink

效率提升:

  1. 剪枝:利用hoeffding不等式确认确认不用更新物品对相似度。(发现一个物品对更新次数达到最少更新次数,或者是相似度小于设定阈值,就直接判定不相似)
  2. 加窗:滑动窗口(近k次会话,近k次行为记录)
  3. 采样:短时间大量的数据
  4. 缓存:使用redis或者memcached

3. 数据驱动与实验平台:

重叠实验平台:(划分流量的方法,基于流量来做切分)

image.png image.png image.png

bandit算法同时可以做测试,选择不同的参数组合,策略,动态实时的跟进用户表现给出选择策略。

3. 推荐系统服务化:

效果保证:

1. 指标:

现在有多好:

  1. 评分准确度:rmse
  2. 排序
  3. 分类准确率
  4. 社交关系数量/用户停留时长
  5. 新颖性

推荐系统是否健康,能好多久

  1. 个性化:取一天的日志,计算用户推荐列表的平均相似度。
  2. 基尼系数:推荐次数越不平均,基尼系数就趋近于1
  3. 多样性。

2. 攻击方式:

image.png image.png

防护方式:


image.png image.png

3. 开源工具与框架:

内容分析(主题模型/词嵌入/文本分类)

image.png

协同过滤与矩阵分解

image.png

模型融合

image.png

产品部分:
扫一下就好


答题还是跪了:

image.png
上一篇下一篇

猜你喜欢

热点阅读