当前位置: 首页 > news >正文

品牌建站/旺道seo优化

品牌建站,旺道seo优化,网络服务提供者发现用户利用其网络,点金wordpress日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 2.8 文章相似度增量更新 学习目标 目标 知道文章向量计算方式了解Word2Vec模型原理知道文章相似度计算方式应用 应用Spark完成文章相似度计算 2…

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


2.8 文章相似度增量更新

学习目标

  • 目标
    • 知道文章向量计算方式
    • 了解Word2Vec模型原理
    • 知道文章相似度计算方式
  • 应用
    • 应用Spark完成文章相似度计算

2.8.1 增量更新需求

每天、每小时都会有大量的新文章过来,当后端审核通过一篇文章之后,我们推荐给用户后,一旦发生点击行为了,就会有相应相似文章计算需求。没有选择去在线计算中处理,新文章来了之后立即推荐召回给用用户,这样增加新文章推荐曝光的比例,达到一定速度的曝光。在线需要用用到离线仓库中部分数据,所以速度会受影响。

  • 设计:
    • 按照之前增量更新文章画像那样的频率,按小时更新增量文章的相似文章
  • 如何更新:
    • 批量新文章,需要与历史数据进行相似度计算

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

  • 目标:对每次新增的文章,计算完画像后,计算向量,在进行与历史文章相似度计算
  • 步骤:
    • 1、新文章数据,按照频道去计算文章所在频道的相似度
    • 2、求出新文章向量,保存
    • 3、BucketedRandomProjectionLSH计算相似度

完整代码:

    def compute_article_similar(self, articleProfile):"""计算增量文章与历史文章的相似度 word2vec:return:"""# 得到要更新的新文章通道类别(不采用)# all_channel = set(articleProfile.rdd.map(lambda x: x.channel_id).collect())def avg(row):x = 0for v in row.vectors:x += v#  将平均向量作为article的向量return row.article_id, row.channel_id, x / len(row.vectors)for channel_id, channel_name in CHANNEL_INFO.items():profile = articleProfile.filter('channel_id = {}'.format(channel_id))wv_model = Word2VecModel.load("hdfs://hadoop-master:9000/headlines/models/channel_%d_%s.word2vec" % (channel_id, channel_name))vectors = wv_model.getVectors()# 计算向量profile.registerTempTable("incremental")articleKeywordsWeights = ua.spark.sql("select article_id, channel_id, keyword, weight from incremental LATERAL VIEW explode(keywords) AS keyword, weight where channel_id=%d" % channel_id)articleKeywordsWeightsAndVectors = articleKeywordsWeights.join(vectors,vectors.word == articleKeywordsWeights.keyword, "inner")articleKeywordVectors = articleKeywordsWeightsAndVectors.rdd.map(lambda r: (r.article_id, r.channel_id, r.keyword, r.weight * r.vector)).toDF(["article_id", "channel_id", "keyword", "weightingVector"])articleKeywordVectors.registerTempTable("tempTable")articleVector = self.spark.sql("select article_id, min(channel_id) channel_id, collect_set(weightingVector) vectors from tempTable group by article_id").rdd.map(avg).toDF(["article_id", "channel_id", "articleVector"])# 写入数据库def toArray(row):return row.article_id, row.channel_id, [float(i) for i in row.articleVector.toArray()]articleVector = articleVector.rdd.map(toArray).toDF(['article_id', 'channel_id', 'articleVector'])articleVector.write.insertInto("article_vector")import gcdel wv_modeldel vectorsdel articleKeywordsWeightsdel articleKeywordsWeightsAndVectorsdel articleKeywordVectorsgc.collect()# 得到历史数据, 转换成固定格式使用LSH进行求相似train = self.spark.sql("select * from article_vector where channel_id=%d" % channel_id)def _array_to_vector(row):return row.article_id, Vectors.dense(row.articleVector)train = train.rdd.map(_array_to_vector).toDF(['article_id', 'articleVector'])test = articleVector.rdd.map(_array_to_vector).toDF(['article_id', 'articleVector'])brp = BucketedRandomProjectionLSH(inputCol='articleVector', outputCol='hashes', seed=12345,bucketLength=1.0)model = brp.fit(train)similar = model.approxSimilarityJoin(test, train, 2.0, distCol='EuclideanDistance')def save_hbase(partition):import happybasefor row in partition:pool = happybase.ConnectionPool(size=3, host='hadoop-master')# article_similar article_id similar:article_id simwith pool.connection() as conn:table = connection.table("article_similar")for row in partition:if row.datasetA.article_id == row.datasetB.article_id:passelse:table.put(str(row.datasetA.article_id).encode(),{b"similar:%d" % row.datasetB.article_id: b"%0.4f" % row.EuclideanDistance})conn.close()similar.foreachPartition(save_hbase)

添加函数到update_article.py文件中,修改update更新代码

ua = UpdateArticle()
sentence_df = ua.merge_article_data()
if sentence_df.rdd.collect():rank, idf = ua.generate_article_label(sentence_df)articleProfile = ua.get_article_profile(rank, idf)ua.compute_article_similar(articleProfile)

http://www.lbrq.cn/news/942391.html

相关文章:

  • b2c网站的经营情况/免费一键搭建网站
  • 做b2b网站服务器空间多大的容量/外包公司是正规公司吗
  • 哪个网站可以做全网推广/网络营销策划方案
  • 找别人做网站要注意什么软件/网址大全百度
  • 西安那些做网站的公司/免费宣传平台有哪些
  • 网站开发者模式怎么保存/百度官网
  • 贵州网站推广/搜索引擎分类
  • 教育行业网站建设审批/域名购买
  • 网站建设全程揭秘 课件下载/视频号关键词搜索排名
  • 北京专业做网站的公司/论坛seo招聘
  • 品牌网站建设有哪些/站长推广网
  • 稳定的网站建设/什么是搜索引擎优化seo
  • dw怎么做phpcms网站/域名权重
  • 电商网站成功的营销策略/互联网下的网络营销
  • 福州网站建设服务价格最实惠/搜索引擎营销的主要方法
  • 行业电子商务网站有哪些/app网络推广方案
  • 哪些网站可以做代理/优化网站链接的方法
  • 推广赚钱的软件有哪些/百度seo什么意思
  • 广州冼村改造/seo引流什么意思
  • 各个做网站的有什么区别/cilimao磁力猫最新版地址
  • 网易免费企业邮箱入口/seo运营做什么
  • 做微信平台网站需要多少钱/磁力天堂最佳搜索引擎入口
  • 宁夏建设厅网站官网/seo就业前景如何
  • 哪个网站做服装批发比较好/百度首页登录官网
  • 金融理财网站建设方案/每天三分钟新闻天下事
  • 黑客收徒网站建设/网站的营销策略
  • 网站logo图怎么做的/深圳seo秘籍
  • php开源网站/室内设计师培训班学费多少
  • 做高级电工题的网站/沈阳seo博客
  • xp系统中做网站服务器/培训机构好还是学校好
  • oracle数据库表空间碎片整理
  • Django+celery异步:拿来即用,可移植性高
  • python---元组解包(Tuple Unpacking)
  • SpringMVC——建立连接
  • 协作机器人掀起工厂革命:码垛场景如何用数据重塑制造业命脉?
  • Python 程序设计讲义(21):循环结构——while循环