文章画像
全量
1、分词
工程:结巴+spark
2、画像词提取
工程:
pyspark.ml.feature.CountVectorizer
pyspark.ml.feature.IDF
jieba.analyse.TextRank
过程:
CountVectorizer按篇输入文章,按篇得到所有词的统计稀疏向量。
IDF对CountVectorizer的稀疏结果再次统计, 按照每篇文章每个词输出tfidf。
训练上面两个模型需要花费很长时间。
textrank 只输入一篇文章,输出主题词权重。
输出:
两个模型:
countVectorizerOfArticleWords.model
IDFOfArticleWords.model
存储到hdfs文件中。
词语信息:
存储到hdfs 表中
关键词:
带权重的关键词 {word1:weight1}
主题词:
前20个tfidf词语前20个textrank共现词(小于等于20个) [word1.....]
3、word2vec
工程:
org.apache.spark.mllib.feature.Word2Vec
过程:
计算完增量的用户画像后,得到词的权重,才能计算word2vec。
输入:
为全部文章,
输出:
词向量:
每个词对应的向量embedding
模型:
训练需要很久
文章向量:
通过词向量与关键词权重相乘,求平均得到。
维度与词向量维度相同。
4、文章相似度
工程:
pyspark.ml.feature.BucketedRandomProjectionLSH
过程:
加载word2vec模型。
输入所有文章向量,100维的文章向量
两两求相似度
输出:
存入到hbase行: 某篇文章所有相似的文章,一个文章一列,值是相似度。
增量
每小时更新一批新增的。
1、分词
工程:
jieba
2、关键词提取
工程:
Model
过程:
加载全量中训练好的模型。
输出:
词语信息:
3、word2vec
工程:
org.apache.spark.mllib.feature.Word2VecModel
过程:
加载全量的word2vec模型
输出:
文章向量:
通过词向量与关键词权重相乘,求平均得到。
维度与词向量维度相同。
4、文章相似度
工程:
pyspark.ml.feature.BucketedRandomProjectionLSH
过程:
加载word2vec模型。
输入所有文章向量,100维的文章向量
两两求相似度
(求相似度是全量求的)
输出:
存入到hbase行:
某篇文章所有相似的文章,一个文章一列,值是相似度。
用户画像
全量
-
输入
hive中所有日期的行为数据(按天分区) -
过程
按照用户和文章分组 取发生过的动作和最后时间
(行为只要发生过一次就记为发生,忽略了行为的不同时间)
用户动作与文章画像进行关联:
关联后得到,user与article唯一的记录。然后explode article的topic,得到 user article topic 的唯一记录。 然后计算每一条记录的(user article topic)权重,( 行为类型权重之和) × 时间衰减 然后按照 user topic 分组,对权重求和
3.输出
用户行为汇总,存到hive中
用户词语权重存到 hbase 和 hive中
增量
2小时更新一次
-
输入
按天存到hdfs的行为日志