• [推荐系统]推荐系统相关概念梳理


    推荐概念

    • 信息过滤系统 解决 信息过载 用户需求不明确的问题
      • 利用一定的规则将物品排序 展示给需求不明确的用户
    • 推荐 搜索区别
      • 推荐个性化较强,用户被动的接受,希望能够提供持续的服务
      • 搜索个性化弱,用户主动搜索,快速满足用户的需求
    • 推荐和 web项目区别
      • 构建稳定的信息流通通道
      • 推荐 信息过滤系统
      • web 对结果有明确预期
      • 推荐 结果是概率问题

    Lambda 架构介绍

    • 离线计算和实时计算共同提供服务的问题
    • 离线计算优缺点
      • 优点 能够处理的数据量可以很大 比如pb级别
      • 缺点 速度比较慢 分钟级别的延迟
    • 实时计算
      • 优点 响应快 来一条数据处理一条 ms级别响应
      • 缺点 处理的数据量小一些
    • 离线计算的框架
      • hadoop hdfs mapreduce
      • spark core , spark sql
      • hive
    • 实时计算框架
      • spark streaming
      • storm
      • flink
    • 消息中间件
      • flume 日志采集系统
      • kafka 消息队列
    • 存储相关
      • hbase nosql数据库
      • hive sql操作hdfs数据

    推荐算法架构

    • 召回

      • 协同过滤 算相似度 memory base

        ​ 基于模型的 model base 矩阵分解

      • 基于内容

        • 分词
        • 词权重(提取关键词) tf-idf
        • word2Vec 词向量
        • 物品向量
    • 排序

      • 逻辑回归
    • 策略调整

    推荐模型构建流程

    • 数据收集

      • 显性评分
      • 隐性数据
    • 特征工程

      • 协同过滤:用户-物品 评分矩阵
      • 基于内容:分词 tf-idf word2Vec
    • 训练模型

      • 协同过滤
        • kNN
        • 矩阵分解 梯度下降 ALS
    • 评估、模型上线

    协同过滤思路介绍

    • CF 物以类聚人以群分
    • 做协同过滤的话 首先特征工程把 用户-物品的评分矩阵创建出来
    • 基于用户的协同过滤
      • 给用户A 找到最相似的N个用户
      • N个用户消费过哪些物品
      • N个用户消费过的物品中-A用户消费过的就是推荐结果
    • 基于物品的协同过滤
      • 给物品A 找到最相似的N个物品
      • A用户消费记录 找到这些物品的相似物品
      • 从这些相似物品先去重-A用户消费过的就是推荐结果

    相似度计算

    • 余弦相似度、皮尔逊相关系数
      • 向量的夹角余弦值
      • 皮尔逊会对向量的每一个分量做中心化
      • 余弦只考虑方向 不考虑向量长度
      • 如果评分数据是连续的数值比较适合中余弦、皮尔逊计算相似度
    • 杰卡德相似度
      • 交集/并集
      • 计算评分是0 1 布尔值的相似度

    使用不同相似度计算方式实现协同过滤

    • 如果 买/没买 点/没点数据 0/1 适合使用杰卡德相似度

      • from sklearn.metrics import jaccard_similarity_score
      • jaccard_similarity_score(df['Item A'],df['Item B'])
      • from sklearn.metrics.pairwise import pairwise_distances
      • user_similar = 1-pairwise_distances(df,metric='jaccard')
    • 一般用评分去做协同过滤 推荐使用皮尔逊相关系数

      • 评分预测

      • $$
        pred(u,i)=hat{r}{ui}=cfrac{sum{vin U}sim(u,v)*r_{vi}}{sum_{vin U}|sim(u,v)|}
        $$

    • 基于用户和基于物品的协同过滤 严格上说,属于两种算法,实践中可以都做出来,对比效果,选择最靠谱的

    协同过滤 基于模型的算法

    • 用户-物品矩阵比较稀疏的时候 直接去取物品向量 用户向量计算相似度 不太适合
    • 基于模型的方法可以解决用户-物品矩阵比较稀疏的问题
    • 矩阵分解
      • 把大的矩阵拆成两个小的 用户矩阵 物品矩阵 MXN 大矩阵 M X K K X N K<<M k<<N
      • 大矩阵 约等于 用户矩阵 乘 物品矩阵
      • 使用als 交替最小二乘法来优化损失 spark ML recommandation 包封装了als
      • 优化之后的用户矩阵 取出用户向量
      • 优化之后的物品矩阵 取出物品向量
      • 用户向量点乘物品向量 得到最终评分的预测

    推荐系统的评价

    • 准确率 覆盖率

      • 准确率
        • 学术 rmse mas 点击率预估 精准率
        • 工程 A/B test 对比不同的算法 在线上运行对关键指标的影响
          • baseline 基准线 热门排行
          • 灰度发布
    • EE

      • Exploitation & Exploration 探索与利用问题
      • Exploitation 利用用户的历史行为 只给他曾经看过的/消费过的相似物品
      • Exploration(探测 搜索) 发现用户的新兴趣
      • ee问题 实际上是矛盾
    • 评估手段

      • 离线评估和在线评估结合, 定期做问卷调查
        • 在线评估
          • 灰度发布 & A/B测试

    推荐系统的冷启动

    • 用户冷启动
      • 尽可能收集用户信息 构建用户画像(打标签)
      • 根据用户的标签可以做人群聚类 用以有用户的行为做推荐
      • 更多的使用流行度推荐
    • 物品冷启动
      • 物品打标签 构建物品画像
      • 基于内容的推荐
    • 系统冷启动
      • 如果应用缺少用户行为数据->基于内容的推荐
      • 随着用户行为积累的越来越多->协同过滤
      • 基于内容和协同过滤共同工作

    基于内容的推荐

    • 给物品打标签
      • 系统自己提取从业务数据库中提取
      • 用户填写
      • 中文分词 利用算法计算词的权重
        • tf-idf tf term frequency 词频 5/100 *2
          • idf 逆文档频率 log 10 文本库篇数/出现关键词的文章篇数
          • 1000 10python 1000/10 100 2
          • 1000/1000 log(1) = 0
        • textrank
    • 利用标签的文字 转换成词向量
      • word2Vec 词->向量
      • 用向量来表示语义
      • 如果两个词的词向量相似度比较高 认为这两个词的语义相近
    • 利用词向量 构建物品的向量
      • 一个物品有N个关键词 每一个关键词对应一个词向量
      • 求和(权重*词向量)/N
      • 利用N个关键词的词向量获取物品向量
    • 通过物品向量计算相似度
      • 皮尔逊 相关系数 计算物品向量的相似度

    基于内容的推荐 基于物品的协同过滤 区别

    • content_base :词向量->物品向量->计算相似度
    • item_based cf :user-item matrix->物品向量->相似度
    • content_base item_based cf 不一样
      • 物品向量构建过程有区别
      • 基于内容的推荐
        • 物品向量 文本(物品描述信息,系统填标签,用户填标签)
      • 基于物品的协同过滤
        • 用户对物品的评分矩阵 用户的行为数据中来
  • 相关阅读:
    CentOS 6.3 从0开始配置防火墙规则
    ppt删除所有墨迹注释
    生日、毕业与大学的回忆
    20171201-构建之法:现代软件工程-阅读笔记
    软件工程课程总结
    课后作业-阅读任务-阅读提问-4
    Forward团队-爬虫豆瓣top250项目-项目总结
    Forward团队-爬虫豆瓣top250项目-最终程序
    课后作业-阅读任务-阅读提问-3
    20171117-构建之法:现代软件工程-阅读笔记
  • 原文地址:https://www.cnblogs.com/skyell/p/11829038.html
Copyright © 2020-2023  润新知