-
推荐系统
-
概念
- 信息过滤系统 解决信息过载 用户需求不明确的问题
- 利用一定的规则给物品推序 展示给需求不明确的用户
-
推荐 搜索区别
- 推荐个性化较强,用户被动接受,希望能够提供持续服务
- 搜索个性化弱,用户主动搜索,快速满足用户需求
-
推荐和web项目区别
- web 构建稳定的信息流通通道
- 推荐 信息过滤系统
- 推荐 结果是概率问题
- web 对结果有明确预期
-
-
推荐系统的架构
-
系统要素
- UI与UE(前端界面)
- 数据(Lambda架构)
- 业务知识
- 算法
-
整体架构
-
大数据Lanbda架构
- 解决实时计算(数据相对比较小,可以快速反应)和离线计算(数据量太多需要一定时间才能完成)共同提供服务的问题
- 离线/实时计算优劣
- 离线:处理数据量大,延迟大
- 实时:响应快,处理的数据量小
- 涉及技术
- 分层架构
- 批处理层(离线)
- data不可变,可进行任何运算,可水平扩展
- 高延迟(计算量数据量不同so延迟不同)
- 日志收集Flume
- 分布式存储Handoop(数据量太大一个地方存不下要分布在多个地方存储)(数据分布式处理分布在n台电脑上so也可以在n台电脑上一起处理数据加快数据处理)
- 分布式计算Hadoop MapReduce & spark
- 视图存储数据库
- nosql
- Redis/memcache
- MySQL
- 实时处理层(在线)
- 流式处理,持续计算
- 存储分析某窗口期内数据
- 最终正确性
- 实时数据收集 flume(日志采集系统) & kafka(消息队列)
- 实时数据分析 spark streaming / storm / flink
- 服务层
- 支持随机读
- 短时间内返回结果
- 读取并归并批处理层和实时处理层结果
- 批处理层(离线)
- 分层架构
-
推荐算法架构
- 召回阶段(基于用户行为海选推荐内容)
- 协同过滤算法
- 基于用户的
- 基于物品的
- 协同过滤算法
- 排序阶段(决定最终推荐效果)
- CTR预估(即点击率预估,根据用户点击数据估计用户是否会点击)(使用LR算法即逻辑回归算法)
- LR算法:
- CTR预估(即点击率预估,根据用户点击数据估计用户是否会点击)(使用LR算法即逻辑回归算法)
- 策略调整(根据推荐效果与商业合作等调整推荐策略)
- 召回阶段(基于用户行为海选推荐内容)
-
-
-
推荐模型建构
-
流程:数据采集->特征工程->挑选算法训练模型->评估、模型上线
-
特征工程(从数据中筛选特征)
-
协同过滤算法(最经典的推荐算法)
- 基本思想:物以类聚人以群分(和你喜好相同的人喜欢的东西,和你喜欢的东西相似的东西)
- 实现步骤
- 1.计算两两相似度然后排序,找出top_n相似的人或物
- 2.by top_n结果生成初始推荐结果,再过滤掉用户已有记录者or明确不感兴趣者
- 基于用户:
- 1.给用户a找到最相似的n个用户
- 2.n个用户消费过哪些物品
- 3.n个用户消费过的物品中减去a消费过的=推荐结果
- 基于物品
- 1.给物品a找到最相似的n个物品
- 2.找到a用户的消费记录中物品的相似物品
- 3.从这些消费物品中减去重合的=推荐结果
- 相似度计算方法
- 数据分类:实数值(物品评分)、布尔值(是否点击是否收藏)
- 计算方法:\\\\(数据是连续数值则较适合余弦和皮尔逊)\\\\(数据是0、1布尔值适合用杰卡德相似度)
- 余弦相似度(只考虑夹角不考虑向量长度)(算向量夹角的余弦值)
- 皮尔逊相关系数(对余弦相似度的优化)(对向量的每个分量做中心化再求余弦相似度)
- 杰卡德相似度(交集除以并集)
- 代码实现(后续作品ing)
- 基于模型的算法
- 用户-物品矩阵较稀疏时,直接取物品向量 用户向量计算相似度不太靠谱
- 基于模型的算法可以解决用户-物品矩阵较稀疏的问题
- 矩阵分解
- m x n的矩阵可以拆分为m x k和k x n的矩阵(前提:k<<m且k<<n)
- 把大矩阵拆分为两个小的 用户矩阵 物品矩阵
- 大矩阵 约等于 用户矩阵 × 物品矩阵
- 用aks 交替最小二乘法来优化损失
- 算出优化后的物品矩阵 取出物品向量
- 算出优化后的用户矩阵 取出用户向量
- 用户向量点乘物品向量 得最终评分预测
- m x n的矩阵可以拆分为m x k和k x n的矩阵(前提:k<<m且k<<n)
-
-
-
-
推荐系统评估
-
隐式反馈&显式反馈
-
常用指标
-
- 准确性
- 理论角度
- 评分预测(把用户数据划分训练集测试集用RMSE MAE算)
- topn推荐(召回率 精准率)
- 业务角度
- 理论角度
- 准确性
-
-
评估方法
- 问卷:成本高,影响用户体验
- 离线评估:仅能评估少数指标,只能在用户看到过的候选集上做评估且有偏差,速度快不影响用户体验
- 在线评估:灰度评估&A/B测试50%全量上线
- 实践:离线评估和在线评估结合,定期问卷调查
-
-
推荐系统冷启动问题
- 概念(本质是推荐系统依赖历史数据预测用户偏好)
-
用户冷启动:how为新用户做个性化推荐
- 1.收集用户特征(基本信息填写,权限获取)
- 2.引导用户填写兴趣
- 3.使用其它站点的行为数据
- 4.新老用户推荐差异
- 新:热门推荐;老:长尾推荐
- explore explot力度
- 使用单独的特征和模型评估
- 综上即:打标签(尽量收集用户信息构建用户画像)、据标签聚类,用已有用户的行为做推荐、基于流行度
-
物品冷启动:how将新物品推荐给用户
- 给物品打标签构建物品画像、物品聚类基于已有相似物品做基于内容的推荐
-
系统冷启动:用户冷启动+物品冷启动
- 若应用缺乏用户行为数据,做基于内容的推荐
- 基于内容的推荐:
- 给物品打标签
- 系统自己提取(如业务数据库)
- 用户填写(如淘宝搜索关键词)
- 中文分词 利用算法计算词的权重(词出现频率高则权重大之类)
- 计算词权重的算法有:tf-idf(term frequency词频idf逆文档率)(如1000篇文有20篇出现了python,那其逆文档率就是1000/20后以取以10为底的对数值)、textrank
- 利用标签的文字 转换成词向量
- 用向量表示语义,若两词向量相似度高则认为语义相近
- 利用词向量 构建物品的向量
- 一个物品有n个关键词,每个关键词对应一个词向量
- 求和(权重*词向量)/n
- 利用n个关键词的词向量获取物品向量
- 通过物品向量计算相似度
- 皮尔逊相关系数 计算物品相似度
- 给物品打标签
- 基于内容的推荐:
- 随用户行为积累,做协同过滤
- 最后基于内容和协同过滤的结果都算出来,加权求和得结果
- 比较 (a)基于内容的推荐&(b)基于物品的协同过滤
- contend_base:词向量->物品向量->计算相似度
- item_based cf:user-item martrlx->物品向量->相似度
- 物品向量构建过程不同
- a:by文本(物品描述信息,系统填标签,用户填标签)(物品本身)
- b:by用户评分矩阵数据得到(用户行为)
- 比较 (a)基于内容的推荐&(b)基于物品的协同过滤
- 若应用缺乏用户行为数据,做基于内容的推荐
-
- 概念(本质是推荐系统依赖历史数据预测用户偏好)
-
推荐算法
-
Model-Based CF(基于模型的协同过滤算法)
- 基于K最近邻的协同过滤推荐
- 基于回归模型的协同过滤推荐
- 基准预测Baseline
- 偏置:用户或物品普遍高于或低于平均值的差值
- 用基准预测来预测评分的步骤:
- 求解用户偏置与物品偏置的问题可转换为损失优化的过程(找到与已知评分拟合的最好的用户偏差和物品偏差并避免过拟合)
- 基准预测Baseline
- 基于矩阵分解的协同过滤推荐
-
梯度下降算法:一种用于找到函数局部最小值的优化算法
- 随机梯度下降
- 在推荐系统中主要用于最小化损失函数,从而实现模型参数的优化
- 解决数据稀疏性问题:通过优化损失函数,有效地学习用户-项目之间的相似度,从而减少数据稀疏性对推荐系统性能的影响。
- 解决冷启动问题:通过在新用户或新项目上进行软最大化,从而为其提供更准确的推荐。
- 优化推荐系统的评估指标:通过优化不同的损失函数实现对推荐系统的性能评估。
- 在推荐系统中主要用于最小化损失函数,从而实现模型参数的优化
- 代码实现(后续作品ing)
- 随机梯度下降
-
人工智能项目——推荐系统实战(一)
本文详细探讨了推荐系统的核心概念、与信息过滤和搜索的区别,以及在Web项目中的应用。重点介绍了推荐算法(如协同过滤、基于内容的推荐),数据处理技术(如Lambda架构和分层架构),以及解决冷启动问题的方法。同时涵盖了常用的评估指标和优化策略。
摘要由CSDN通过智能技术生成