【推荐系统】离线增量文章画像计算(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【推荐系统】离线增量文章画像计算(二)

2.5 离线增量文章画像计算

2.5.1 离线文章画像更新需求

第一次:所有更新,后面增量每天的数据更新26日:1:002:00,2:003:00,左闭右开,一个小时更新一次

2.5.2 定时更新文章设置

  • 目的:通过Supervisor管理Apscheduler定时运行更新程序
  • 1、更新程序代码整理,并测试运行
  • 2、Apscheduler设置定时运行时间,并启动日志添加
  • 3、Supervisor进程管理

2.6.1 Apscheduler使用

APScheduler:强大的任务调度工具,可以完成定时任务周期任务

  • 配置好定时运行的函数

定义更新逻辑

  • 编写APscheduler配置
  • 增加打印日志添加(程序问题,离线更新文章画像流程进度)

2.7 Word2Vec与文章相似度

2.7.1 文章相似度

  • 需求
  • 首页频道推荐:每个频道推荐的时候,会通过计算两两文章相似度,快速达到在线推荐的效果,比如用户点击文章,我们可以将离线计算好相似度的文章排序快速推荐给该用户。此方式也就可以解决冷启动的问题
  • 方式:
  • 1、计算两两文章TFIDF之间的相似度
  • 2、计算两两文章的word2vec或者doc2vec向量相似度

2.7.2 Word2Vec模型介绍

2.7.2.2 词向量是什么
  • 词的独热表示:One-hot Representation
  • 维度过大词汇鸿沟现象:任意两个词之间都是孤立的。
  • 词的分布式表示:Distributed representation
  • 最大的贡献就是让相关或者相似的词,在距离上更接近了
2.7.2.3 词向量原理
  • 统计语言模型:把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性

N-Gram

一元模型(unigram model):假设某个出现的概率与前面所有词无关

二元模型(bigram model):假设某个出现的概率与前面一个词相关

  • P(s) = P(w1)P(w2|w1)P(w3|w2)…P(w_i|w_i-1)

三元模型(trigram model):假设某个出现的概率与前面两个词相关

  • P(s) = P(w1)P(w2|w1)P(w3|w1,w2)…P(w_i|w_i-2,w_i-1)
2.7.2.4 词向量计算得出
  • 通过一个三层神经网络得出,由约书亚.本吉奥(Yoshua Bengio)提出word2vec模型

2.7.3 文章词向量训练

  • 目的:通过大量历史文章数据,训练词的词向量
  • 由于文章数据过多,在开始设计的时候我们会分频道进行词向量训练,每个频道一个词向量模型
  • 25个词向量模型

步骤:

  • 1、根据频道内容,读取不同频道号,获取相应频道数据并进行分词
  • 2、Spark Word2Vec训练保存模型

2.7.4 增量更新-文章向量计算

有了词向量之后,我们就可以得到一篇文章的向量了,为了后面快速使用文章的向量,我们会将每个频道所有的文章向量保存起来。

  • 目的:保存所有历史训练的文章向量
  • 1、加载某个频道模型,得到每个词的向量
  • 18号频道所有文章训练模型:3000个词
  • 2、获取频道的文章画像,得到文章画像的关键词(接着之前增量更新的文章article_profile)
  • 3、计算得到文章每个词的向量, 计算得到文章的平均词向量即文章的向量

2.7.5 文章相似度计算

  • 目的:计算每个频道两两文章的相似度,并保存
  • 分析问题:
  • 1、是否需要某频道计算所有文章两两相似度?
  • 1,2,3,4,5
  • 4+3+2+1 = 10
  • 每个频道的文章先进行聚类
  • 1+3 = 4
  • 局部敏感哈希LSH(Locality Sensitive Hashing)
  • LSH算法基于一个假设,如果两个文本在原有的数据空间是相似的,那么分别经过哈希函数转换以后的它们也具有很高的相似度
  • 离得越近的对象,发生冲突的概率越高
  • 离得越远的对象,发生冲突的概率越低
  1. 如果d(O1,O2)
  2. 如果d(O1,O2)>r2,那么Pr[h(O1)=h(O2)] ≤ p2
mini hashing

1、Minhash的定义为:** 特征矩阵按行进行一个随机的排列后,第一个列值为1的行的行号。

  • 一次:1,1,2,1
  • 二次:2,3,2,1

上述重复操作的过程的结果:签名向量 M

2、对Signature每行分割成若干brand(一个brand若干行),每个band计算hash值,我们需要将这些hash值做处理,使之成为事先设定好的hash桶的tag,然后把这些band“扔”进hash桶中。

比如:M [L,4] , L分成B个brand,每个brand 若干行

L / B = r, 5个brand都会哈希到捅当中

3、最终分配到同一个bucket的概率:1−(1−sr)b

r=5, b=20时候,效果

  • 当s=0.8时,两个文档被映射到同一个哈希桶的概率是
  • Pr(LSH(O1)=LSH(O2))=1−(1−0.85)5=0.9996439421094793
  • 当s=0.2时,两个文档被映射到同一个哈希桶的概率是:
  • Pr(LSH(O1)=LSH(O2))=1−(1−0.25)5=0.0063805813047682

总结:通过签名向量矩阵M,来达到离得越近的对象,发生冲突的概率越高,离得越远的对象,发生冲突的概率越低

Random Projection

总结:通过降维(投影)之后的结果,进行哈希分桶,来达到离得越近的对象,发生冲突的概率越高,离得越远的对象,发生冲突的概率越低

  • 2、相似度结果数值如何保存?

2.7.4.2 相似度计算

  • 目的:计算18号Python频道的文章之间相似度
  • 1、读取数据(保存到表当中向量),进行类型处理(数组到Vector)
  • 2、BRP进行训练模型

2.7.4.3 问题3

对于计算出来的相似度,是要在推荐的时候使用。那么我们所知的是,HIVE只适合在离线分析时候使用,因为运行速度慢,所以只能将相似度存储到HBASE当中

  • hbase

2.7.5 文章相似度存储

目的:将所有文章对应相似度文章及其相似度保存

  • foreachPartition不同于map和mapPartition,主要用于离线分析之后的数据落地
  • 代码:
table.put(str(row.datasetA.article_id).encode(),
                              {b"similar:%d" % row.datasetB.article_id: b"%0.4f" % row.EuclideanDistance})

2.8 文章相似度增量更新

2.8.1 增量更新需求

2.8.2 增量更新文章向量与相似度

总结:1小时,业务数据库中取出这一个小时的新文章,1、合并文章三个标结果到sentence,2、计算TFIDF与TextRank, 3、计算文章画像 4、计算新文章的向量,计算新文章相似的文章以及相似度

3.1 用户画像计算更新

3.1.1 为什么要进行用户画像

而构建用户画像,不仅可以满足根据分析用户进行推荐,更可以运用在全APP所有功能上。

3.1.2 用户画像计算设计

  • 用户画像标签建立
  • 用户:每个频道这个用户的关键词和权重, 基本信息的结果

3.2 用户画像增量更新

3.2.1 增量用户行为日志处理

  • 目的:首先对用户基础行为日志进行处理过滤,解析参数,从user_action—>user_article_basic表。
  • 1、创建HIVE基本数据表
  • 2、读取固定时间(第一次所有历史行为数据)内的用户行为日志
  • user_action固定日期
  • 关联表与Hadoop历史日期目录
  • 定量进行更新:
  • 读取固定时间内的用户行为日志
  • 注意每天有数据都要关联一次日期文件与HIVE表
  • 3、进行用户日志数据处理
  • 4、存储到user_article_basic表中


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的民宿推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的民宿推荐系统附带文章源码部署视频讲解等
35 1
|
6月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的大湾区旅游推荐系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的大湾区旅游推荐系统附带文章和源代码设计说明文档ppt
40 4
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的周边美食推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的周边美食推荐系统附带文章源码部署视频讲解等
28 1
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的美食信息推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的美食信息推荐系统附带文章源码部署视频讲解等
59 16
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的个性化新闻推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的个性化新闻推荐系统附带文章源码部署视频讲解等
30 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的美食推荐系统的微信小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的美食推荐系统的微信小程序附带文章源码部署视频讲解等
21 0
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的智能菜谱推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的智能菜谱推荐系统附带文章源码部署视频讲解等
66 0
基于springboot+vue.js+uniapp小程序的智能菜谱推荐系统附带文章源码部署视频讲解等
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的旅游景点推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的旅游景点推荐系统附带文章源码部署视频讲解等
45 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的个性化书籍推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的个性化书籍推荐系统附带文章源码部署视频讲解等
37 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的图片推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的图片推荐系统附带文章源码部署视频讲解等
42 0