从0到1实现文章个性化推荐系统
一、背景
当今互联网信息呈现爆炸式增长,简单的人工筛选、物料召回的运营方式已无法让资源快速变现,通过用户历史行为、用户画像精准推荐用户感兴趣内容已成为必然趋势,主流个性化推荐系统流程包括用户行为采集、分类提取、离线用户建模、在线用户模型预测等。结合目前主流推荐业务发展需求,从无到有搭建一套个性化推荐系统支撑专区App分发业务。
二、主要业务流程及核心模块
构建一套完善的推荐系统涉及到的主要业务流程及核心模块,具体流程如下图所示:
1. 同步业务数据:
将文章、用户属性等状态数据,以全量或增量模式从MySQL存储导入到Hive中
2. 收集用户行为日志
(1) 原始数据收集
数据收集主要通过应用APP或者应用Web埋点或者通过线上任务上报到DataBank来完成,主要收集指标包括:
埋点事件 | 事件ID |
---|---|
曝光 | exposure |
点击 | click |
浏览时长 | read |
收藏 | collect |
分享 | share |
埋点日志数据结构如下:
{
"actionTime":"2019-04-10 18:15:35",
"readTime":"",
"channelId":0,
"param":{
"action":"exposure",
"userId":"2",
"articleId":"[18577, 14299]",
"algorithmCombine":"C2"
}
}
(2) ETL
通过Flume将日志定时并增量收集与结构化存储到 Hive中
3. 构建离线文章画像
文章画像,就是给每篇文章定义一些词。主要包括关键词和主题词。
关键词:文章中权重高的一些词。
主题词:是进行规范化处理的,文章中出现的同义词,计算结果出现次数高的词。
(1) 构建方法
关键词:TEXTRANK计算出的结果TOPK个词以及权重
主题词:TEXTRANK的TOPK词 与 ITFDF计算的TOPK个词的交集
(2) 文章画像存储结构
hive> desc article_profile;
OK
article_id int article_id
channel_id int channel_id
keywords map keywords
topics array topics
hive> select * from article_profile limit 1;
OK
26 17 {
"策略":0.3973770571351729,"jpg":0.9806348975390871,"用户":1.2794959063944176,"strong":1.6488457985625076,"文件":0.28144603583387057,"逻辑":0.45256526469610714,"形式":0.4123994242601279<