ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

spark3

2021-02-10 14:02:44  阅读:177  来源: 互联网

标签:spark3 标签 redis 用户 列表 文章 召回


#################################
↗ 标签正排redis=默认召回=超期过滤=排序=默认推荐列表redis
↗相似文章列表=实时召回
新闻内容
=kafka→内容分析 → 倒排索引
↘hdfs
↘ 内容去重===hdfs

浏览器客户端=日志采集服务器=kafka=流模型=短时画像=短时兴趣redis=短时兴趣召回=已推过滤=短时土建列表redis
=hdfs =批模型=长时画像=长时兴趣redis=长时兴趣召回=已推过滤=排序=长时推荐列表redis

冷启动: 热门召回+用户属性召回

redis标签正排:
docid url 链接
src 来源
channel 频道
publishTime 发布时间
titile 标题
category 分类|分数
location 地域
duplicateDocid 重复新闻id
keyTags 内容标签关键词

内容去重模块:
对kafka内容进行去重,包含基于docid完全匹配去重+基于标题,摘要等文本内容去重
5分钟Simhash算法去重流任务:
标题和摘要组成的Simhash距离不大于3

内容分析模块:
基于文章标签,正文,完成内容分析,将标签以正排形式存入redis,以倒排形式存入hbase
1.基于cp标签的内容分析
2.基于内容标签生成内容相似列表

	相似内容文章计算:
		1.根据文章标签(关键词和权重)应用simhash算法进行计算
		2.关键词选取权重较大的topn;每篇文章计算出它的相似文章列表按照相似度(Hamming距离)排序
		
	对文本先去打搅各种符号,乱码,超链接等等;
	再用分词工具(hanlp)进行分词得到文章的关键词,docid:keyword1,keyword2
	主题分析:分词后的文章,用LDA(lightLDA)给定该文章的主题
	关键词抽取: 用tf/idf输出该文章的的标签, docid:tag1,tag2

[说明: ctype:一级分类,新闻,视频,图集; dtype:二级分类,无图,小图,大图,视频大图,视频小图....]

用户长期画像模块:
1.热点惩罚:热点新闻计算标签得分时进行降权处理
2.曝光惩罚:按天统计出用户曝光未点击的文章列表,对曝光但未点击的文章对应标签
3.用户内容兴趣偏好: userid|一级标签|得分||二级标签|得分|topic|得分|tags|得分
4.牛顿冷却实时偏好: 随时间偏好得分变小, score*e^-(当前时间-事件发生时间)a
5.用户所处生命周期标签生成: 新增用户,沉默用户,活跃用户
6.文章类型偏好生成:统计一级分类,二级分类的点击次数,曝光次数; 根据点击/曝光来确定用户文章类型偏好
7.用户行为特征生成: ①流量敏感/不敏感:过去一周不在wifi下访问次数
②刷新频率:过去一周推荐请求次数
③用户自然属性生成
接口:
用户长期内容偏好
用户自然属性生成
用户文章类型偏好
用户生命周期
曝光未点击
内容标签体系接口: 文章表:newsid,title,reason,tags,category,src,二级分类,三级分类,topics,pubTime,channel,文章类型,展示类型,视频播放时长,

用户实时画像模块

推荐引擎:

	召回列表:
		个性化列表:短时+长时+热点+地域
		冷启动用户:热点+地域
		默认列表: 推荐流程阻塞超时,或所有列表都为空
		
文章相似列表生成:
	每篇文章基于simhash相似度计算得到该文章的相似文章列表
	按天离线更新全量历史文章的相似文章列表
	近线计算新增文章的相似列表

热门召回:
线下点击量统计:
流任务:5分钟点击量统计+小时点击统计 ===小时热门召回(分频道)
批任务:天,周点击量统计 ===天热门,周热门召回(分频道)

布隆过滤器已推过滤:
	文章id找到发布时间,
		bitmap按天存储,发布时间属于同一天的已推文章存储在一起;某个bitmap中文章的发布时间均超过7天,改bitmap会被删除
		所以每个用户在redis中会同时存在8(过去7天)个bitmap
布隆过滤器已读过滤:
		过去一个月的已读(指点击收藏,不喜欢,分享)文章存储一个bitmap

热搜写入:
①热搜从kafka传入,格式包含{标题,热度,来源,时间}
②hanlp对title分词, hbase表中有关键词对应KL值
③对redis已有旧热搜对比: 全新,相似,相同
④相同替换,相似合并,并给上hotid,重新写入redis
⑤用热搜的关键词从hbase表中取topN新闻,计算热搜关键词和文章正文的关联度得到:文章和热点关联分值
⑥再把redis中docid添上一个热搜字段hotid|hotscore, 这样文章就有了对应的热搜和分值

热搜召回:
①从redis获取热搜
②用热搜title从hbase表中匹配到文章(很多过滤条件:24小时内的,频道的..)
③召回列表写redis: keyrecall docid

#######################################
k-means算法: 首先输入k,目的是将所有点分成k簇; 首先选k个点,作为k簇的的质心,然后对集合中所有的点,计算其到这k个聚类中心的距离,与谁近就跟谁; 所有点分成k个簇,计算每个簇的质心,更新质心的值; 循环以上步骤,直到质心的变化小于某个设定的阈值时,即完成分类

Kmeans算法来对用户分群

ctr(click-through-rate)点击通过率: 点击/曝光

低质量文章过滤:

用户的主动点击负反馈:比如标题党,广告软文,低俗等
基于规则的低质量文章直接过滤
文章质量分数计算:①标题党词汇匹配②用户反馈的文章质量分③用户投诉(广告次数,质量差次数,低俗次数,标题党次数等等)
				④用户不喜欢⑤ctr(点击/曝光)⑥用户阅读时长(1-用户平均时长/标准时长)

内容标签生成:
①tf-idf生成原始关键词+tfidf值
②用textrank算法计算关键词和权重,对tfidf值加权
③对原始关键词,通过word2vec模型计算相似度最高的几个关键词
④基于词特征进行评分更新

内容多样性:
非冷启动:
①兴趣召回:用户兴趣模型中抽取兴趣标签
②兴趣扩展:用户兴趣模型中抽取二级类别
③兴趣探索:在用户兴趣模型外抽取二级类别来做探索
④协同召回:根据用户所属群体,选一个群体标签
⑤地域召回:提取地域候选列表
⑥热点召回:提取热门候选列表
⑦相似召回:从上一刷有点击/收藏/转发/分享的每篇文章,从相似内容列表中按相似度随机抽取
⑧默认召回:兜底策略,在其他召回无法凑齐数量用来补齐

对上面多种结果进行整体调和,取最终的N(比如取10)篇:
	策略顺序:相似-热点-地域-兴趣-扩展-协同-探索-默认
	num_sim=上一有过行为的文章数
	num_hot=max(0,min(h,N-num_sim)) 如果有热门可推令h=2否则为0
	num_local=max(0,min(L,N-num_sim-num_hot))  如果有地域可推令L=1否则为0
	...
	上面各种列表取几个得到最终N个,再按ctr排序,最后将热点文章放在最前面,即得到最终推荐列表结果

	视频调和条件:同一刷中蜂窝最多一个视频,wifi最多2个视频
	主题调和条件:同一刷中推荐的N条不能包含多篇讲同一主题的

人工运营干预:
最终推荐结果的排序是ctr排序:用户负反馈不喜欢调节系数ctr,内容质量调节系数ctr

最终推荐列表: userId  doc1:hot#doc2:region#doc3:default

热点惩罚:热门推荐中,用户对热点文章总是不点击,就要惩罚,换其他热点推送

hbase表中存储精品文章,把默认列表和精品列表融合,精品放前

标签:spark3,标签,redis,用户,列表,文章,召回
来源: https://www.cnblogs.com/ShyPeanut/p/14395626.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有