Spark使用word2vec训练item2vec实现内容相关推荐

之前使用spark als训练协同过滤,然后导出itemvectors做相似度计算,后来学到了可以用word2vec实现item2vec的训练效果貌似更好,试了一下果然不错;

spark版本:2.3.1,开发语言为JAVA

几大步骤

  1. 读取查看、点击、播放等行为数据,我用的是播放数据;
  2. 数据整理成(userid, itemid, playcnt)的形式,这个数据可能是聚合N天得到的;
  3. 过滤掉playcnt为小于3的数据,我把这些过滤掉,觉得这个数据没有贡献;
  4. 按照userid聚合,得到(userid, list(itemid))的形式;
  5. 训练word2vec;
  6. 导出model.vectors(),里面包括word和对应的向量vector,其中word其实就是itemid
  7. crossjoin计算两两相似度,取相似度TOP N;
  8. 将结果存入mysql,后续可以加载到REDIS实现实时相似推荐;

代码实现

读取播放数据:

 

做数据按userid聚合:

 

训练word2vec:

 

实现df的cross join:

 

注册余弦相似度计算函数:

 

其中调用的余弦相似度计算函数,使用JAVA实现:

 

实现相似度计算,并过滤掉自身和自身的计算:

 

使用 spark的Window,提取每个group的topn:

 

将数据聚合成每个Item的推荐列表的形式:

 

将数据覆盖写入MySQL:

 

在数据库中,我们根据item_id,提取到item_ids,可以用于直接的推荐;其中column_sims也记录了对应的相似度权重,如果需要加权的话也可以直接提取;

欢迎大家关注我的爱奇艺号,学习Pyton大数据人工智能技术,地址

本文地址:http://www.crazyant.net/2447.html,转载请注明来源。

 

 

 

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注