内容简介:快速发展的移动互联网在给我们带来便利的同时,也造成了信息过载,因此在海量的信息之前,用户最关心的是能否快速有效地从我们的产品中获取感兴趣的内容。解决信息过载主要有两种,搜索引擎:解决有明确目的用户需求,推荐引擎:根据用户行为、兴趣爱好等生成推荐物品列表。如今用户更多的是碎片化阅读时间,如何提高用户活跃度和转化率,保证用户留存,是每个app都需要考虑的问题,推荐系统则是目前最简单、使用最多也是效果最好的。本文从58部落帖子出发,介绍文本推荐的流程和初始工作。
背景
快速发展的移动互联网在给我们带来便利的同时,也造成了信息过载,因此在海量的信息之前,用户最关心的是能否快速有效地从我们的产品中获取感兴趣的内容。解决信息过载主要有两种,搜索引擎:解决有明确目的用户需求,推荐引擎:根据用户行为、兴趣爱好等生成推荐物品列表。
如今用户更多的是碎片化阅读时间,如何提高用户活跃度和转化率,保证用户留存,是每个app都需要考虑的问题,推荐系统则是目前最简单、使用最多也是效果最好的。本文从58部落帖子出发,介绍文本推荐的流程和初始工作。
推荐系统架构
如上图所示,推荐系统的基本框架主要包含三层:数据层,策略层和应用层。
-
数据层:主要包含58部落帖子数据、用户行为数据
-
策略层:主要包含特征工程、召回策略、候选集融合和排序
-
应用层:即业务应用,目前主要feed流推荐
数据源
帖子数据是线上用户发布的帖子数据,业务包括房产、招聘、二手车、老乡、相亲交友等;行为数据目前主要包括点赞、点击和评论。
1. 数据存储
-
hdfs:主要用于离线分析,一方面是行为日志的etl,保存每天的用户行为,另一方面是凌晨定时dump的帖子文本数据,为后期结构化分析数据做准备。
-
hbase:实时拉取kafka和消息队列的数据,包括用户实时行为、实时审核通过的帖子数据。
2. 数据清洗
用户行为数据中包含很多的噪声数据需要过滤,如用户自己点击自己的帖子、某个短时间间隔内相同的点击(重复上传)。
帖子数据一方面要是审核通过的帖子数据(公司猎人审核平台),并实时抓取状态变更,及时更新数据,另一方面需要满足自己业务策略,比如关键词过滤等
3. 统一用户唯一标识
建立设备唯一标识与userid的映射关系,设备标识绑定最近登录的userid。在做召回和 排序 时,优先使用userid,或者设备绑定的最新userid,最后才用设备标识,区分注册用户和未注册用户。
策略层
特征工程
因为分析的是文本数据,所以主要是文本特征提取,采用常用的TF-IDF方法。处理步骤如下:
1. 文本分词:采用ansj分词工具,并结合业务线,加入一些实体停用词,如小区名、车名、人名、地名等;
2. TFIDF:
Ci是第i个词出现的次数, C 是帖子中词的总数, N 是样本帖子数, ni+1 是出现该词的帖子数,+1为了保证除数不为0。既考虑了单个文本词频,同时对热门词进行了惩罚;
3. 关键词选取:TopK+均值。如果词的个数小于K,则全选,否则取文本内TFIDF均值以上的词作为该帖子的关键词。这样既保证小文的信息不丢失,又可以过滤大文本无用的词。
其他的特征处理方法还包括文本分类的类别、聚类后的类簇、LDA的主题向量、端到端的word2vec等。
策略引擎
策略引擎是生成候选集的算法,目前主要实现了CF、内容推荐和补充策略。
1. CF(协同过滤)
协同过滤是基于KNN的思想分析用户的行为数据,如item-based cf,就是寻找k个与当前物品最相似的物品。KNN需要考虑两点:K和距离公式,目前58部落的帖子数相对活跃用户数来说比较少(7日),所以采用基于物品的协同过滤,可以降低计算量,而且能给出很好的推荐解释。
-
隐式反馈数据处理:选取的行为数据是用户点赞和浏览数据,是隐式反馈数据。在处理数据的时候,针对每个用户的行为数据事先进行了max归一化, , 即当前用户每个帖子的浏览次数除以该用户浏览帖子最大的次数,保证每个用户的取值范围相同(0, 1]
-
距离公式:余弦相似度是在文本挖掘和信息检索中常用的距离计算公式,
是用户u对物品i的评分即行为次数归一化的结果,为了惩罚活跃用户的权重,对公式进行了修改
是用户u的活跃度,活跃度越大, 对相似度的影响越小。
-
根据用户行为记录,选取TopN个最相似的帖子作为用户的候选集(需要去除用户已经浏览过的记录)
-
最后将候选集保存的 redis 集群,用于后续的融合排序
内容推荐
内容推荐和协同过滤相似,也是基于KNN的,不同的是内容推荐根据帖子的内容计算相似度,需要提取文本特征,前面已经介绍了关键词提取的方法以及如何获取关键词的权重,帖子相似度也是采用余弦相似度,公式如下:
表示帖子i中关键词k的权重,分子表示两个帖子中相同词的权重乘积求和。
内容相似度计算的时候需要考虑选择合适的相似度阈值,不能推荐内容非常相似的帖子(用户重复发帖或中介发布的相同内容不同联系方式),也不能推荐相似度非常差的帖子。
补充策略
对于新用户,或者行为数据非常少的用户需要采取补充策略(冷启动),保证推荐列表的无线刷新和推荐服务的可用性。根据业务场景采用以下两种统计策略:
-
地域热门:根据用户当前定位商圈,统计当前及其附近5km商圈的热门帖子
-
全局热门:对某个时间段的帖子进行热门降序排列
对于热门得分可根据帖子的发布时间行为进行降权,公式如下:
p是当前帖子被浏览或者点赞次数,T 是帖子发布时间距离当前时间的小时间隔,G 是降权系数,G 越大表示热门程度下降越快,可根据具体业务场景实验选取。
为了保证查询效率,所有的候选集都存储在redis集群中,当有某个策略有新的候选集产生时则进行覆盖。
融合和排序
融合
每个候选集都需要曝光给用户,那么优先级什么?比例又是多少?这是融合的目的。
初始阶段常用的是分级和调制方法,优先选择效果好的策略算法,然后再按照不同的比例获取对应数目的候选集。
排序
因为每个策略算法内部原理不同,得出的评分也无法直接使用,所以最终选出来的候选集以什么顺序曝光给用户也是研究的难点。业内常用的最简单方法通过LR来预测CTR,下面是逻辑回归的公式:
将帖子特征作为输入,用户是否点击作为输出,处理过程就是通过梯度下降法,找到最优的特征权重使得损失函数最小。
评估指标
在解决问题的时候,我们要有目标思维,知道如果去评价一个模型ed好坏,下面是常用的模型评估指标。 是 推荐列表, 是测试数据集,
-
精确率:正确预测的物品数占整个推荐列表的比例
-
召回率:正确预测的物品数占整个测试集的比例
-
F1-measure:是精确率和召回率的调和平均值,综合考虑两个指标。
-
覆盖率:测试集中有多少物品被召回, 分母是测试集的物品数,分子是去重后推荐列表的物品数
-
新颖度:使用平均流行度作为物品的新颖度,N是去重后推荐物品数
总结
目前58部落的推荐尚处在探索阶段,本文只是简单地介绍了当前已经完成的工作,可以初步搭建简单的推荐系统,从数据预处理到候选集策略在到融合排序。后期还有大量的工作内容需要去做,如用户画像、实时推荐、ABTest,总而言之,推荐系统包含了很多的内容,需要我们一步一步地堆砌。由于本人技术有限本文内容比较简单,如有错误或侵权的地方请及时联系。
参考
-
[推荐系统实践]-项亮
-
推荐系统正成为所有领域的一种标配 - https://blog.csdn.net/qq_15150903/article/details/82148565
-
美团推荐算法实践:机器学习重排序模型成亮点 - https://www.csdn.net/article/2015-01-30/2823783
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- CVPR 2020 论文大盘点:动作检测与动作分割篇
- CVPR 2020 论文大盘点:动作检测与动作分割篇
- Android列表,刷卡动作
- 如何从静态图像中识别“比心”动作
- include指令和include动作的区别
- 深入理解MPLS标签动作及应用示例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java核心技术·卷1:基础知识(原书第9版)
(美)Cay S. Horstmann、(美)Gary Cornell / 周立新、陈波、叶乃文、邝劲筠、杜永萍 / 机械工业出版社 / 2013-11-1 / 119.00
Java领域最有影响力和价值的著作之一,拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与《Java编程思想》齐名,10余年全球畅销不衰,广受好评。第9版根据JavaSE7全面更新,同时修正了第8版中的不足,系统全面讲解Java语言的核心概念、语法、重要特性和开发方法,包含大量案例,实践性强。 《Java核心技术·卷1:基础知识》共14章。第1章概述了Java语言与其......一起来看看 《Java核心技术·卷1:基础知识(原书第9版)》 这本书的介绍吧!