美文网首页
课程笔记:推荐系统入门

课程笔记:推荐系统入门

作者: 噗嗤噗哩噗通 | 来源:发表于2021-01-24 15:03 被阅读0次

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


    1. 入门概念

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

    • 工具类产品
    • 物品过少,联系不会造成太多影响
    • 用户留存回访低,这个情况下,推荐也是很难去处理的。
    • 当增加的连接数主要靠增加的活跃用户和增加物品数做贡献,那么就不适合增加推荐系统,而当连接可以自发生长,那么就比较适合推荐系统加速这个过程。(我理解就是,如果客户留存不强,或者对陈旧物品完全没想法,那么整体下来,推荐就是比较难做的,推荐能做的,就是增加用户看到的物品的可能性)

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

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

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

    • 评分预测:
      • 预测目标:预测分数与实际分数差距越来越小(量化标准之一:均方根误差)
      • 难点:数据质量,评分分布
    • 行为预测
      • 优势:数据量比用户明确的评分反馈大
      • 预测行为方式:预测行为发生概率(点击率)or 预测物品相对排序(rank算法)。
        感觉是,行为预测解决数据不均衡问题,解决大头部分,然后,评分预测解决最终的点击率提升

    1.4 几个常见问题

    • 冷启动问题:新用户/不活跃用户/新物品/展示次数较少的物品,解决方案都是加数据,从已有数据中学习
    • 探索利用问题:已有兴趣点与新兴趣点需要做到平衡。大部分推荐感兴趣,小部分试探新的兴趣。
    • 安全问题

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

    • ui 和ue
    • 数据
    • 领域知识
    • 算法

    2. 内容推荐

    1. 用户画像

    • 整体用户画像的适用阶段:匹配评分与召回。
    • 构建方向:可以自己从业务逻辑构建,也可以直接适用机器学习方法(潜语意模型,矩阵分解得到的隐因子,embedding向量)
    • 评价指标:排序好坏/召回策略

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

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

    • 关键词提取:TF-IDF和TextRank
    • 实体识别:基于词典的方法结合CRF模型
    • 内容分类:将文本按照分类体系分类
    • 文本:从文本直接划分多个类簇
    • 主题模型:从文本中提取主题向量,在预测各个主题的概率分布。
    • 嵌入:embedding方法。

    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

    主要步骤与核心点:

    • 数据源头扩充
    • 数据清洗与信息提取:内容挖掘与用户分析(抓住主题,直接到嵌入分析),产出为结构化内容库,内容分析模型(分类器模型,主题模型,实体识别模型,嵌入模型)
      • 内容推荐算法:Lucene中的BM25F算法
    • 算法

    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的分数
    • 遍历u打过分的m个物品,计算这些物品与i的相似度
    • 相似度*用户评分,处以相似度的和,就得到加权平均
      直接推荐相似物品
    • 直接推荐和物品i相似度较高的物品
      slope one 算法
      遗留问题:
      slope one怎么做到在线更新

    3.1.3 相似度:

    数据分类:

    • 欧式距离(计算绝对差异)
    • 余弦相似度(计算方向差异)
    • 皮尔逊相似度:实际上也是余弦相似度,不过弦对向量做了中心化。向量各自减去均值,再计算相似度。
    • jaccard 相似度(只适合bool类型):交集元素个数在并集中所占比例。适用于隐式反馈。
      遗留问题:
      社交网络会适合那一类方法:


      image.png

    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

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

    • 隐式反馈只有正类别确定,负类别是假设的。所以很可能导致正负类样本很不均衡。
      解决方案:根据物品的热门程度做负采样。

    算法汇总:

    • topk:facebook有开源的faiss 和NMSLIB
    • 先推荐产品簇,然后再增加排序统计算法作为最终推荐结果。

    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
    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

    相关文章

      网友评论

          本文标题:课程笔记:推荐系统入门

          本文链接:https://www.haomeiwen.com/subject/rphmzktx.html