专栏首页Soul Joy Hubpyspark做Item2vec

pyspark做Item2vec

1. 序列数据的处理

Item2vec 是基于自然语言处理模型 Word2vec 提出的,所以 Item2vec 要处理的是类似文本句子的观影序列:

def processItemSequence(spark, rawSampleDataPath):
    # 读取 ratings 原始数据到 Spark 平台
    ratingSamples = spark.read.format("csv").option("header", "true").load(rawSampleDataPath)
    # sortUdf,用它实现每个用户的评分记录按照时间戳进行排序
    sortUdf = udf(UdfFunction.sortF, ArrayType(StringType()))
    # 用 where 语句过滤评分低的评分记录
    # 用 groupBy userId 操作聚合每个用户的评分记录,DataFrame 中每条记录是一个用户的评分序列
    # sortUdf
    # 把每个用户的评分记录处理成一个字符串的形式,供后续训练过程使用。
    userSeq = ratingSamples \
        .where(F.col("rating") >= 3.5) \
        .groupBy("userId") \
        .agg(sortUdf(F.collect_list("movieId"), F.collect_list("timestamp")).alias('movieIds')) \
        .withColumn("movieIdStr", array_join(F.col("movieIds"), " "))
    userSeq.select("userId", "movieIdStr").show(5, truncate = False)
    return userSeq.select('movieIdStr').rdd.map(lambda x: x[0].split(' '))
+------+-------------------------------------------------------------------------------------------------------+
|userId|movieIdStr                                                                                             |
+------+-------------------------------------------------------------------------------------------------------+
|10096 |858 50 593 457                                                                                         |
|10351 |1 25 32 6 608 52 58 26 30 103 582 588                                                                  |
|10436 |661 107 60 1 919 223 260 899 480 592 593 356 588 344 47 595 736 367 500 34 39 141 586 2 750 104 368 317|
|1090  |356 597 919 986                                                                                        |
|11078 |232 20 296 593 457 150 1 608 50 47 628 922 527 380 588 377 733 10 539                                  |
+------+-------------------------------------------------------------------------------------------------------+

2. 训练item2vec

def trainItem2vec(spark, samples, embLength, embOutputPath, saveToRedis, redisKeyPrefix):
    # 设置模型参数
    word2vec = Word2Vec().setVectorSize(embLength).setWindowSize(5).setNumIterations(10)
    # 训练模型
    model = word2vec.fit(samples)
    # 训练结束,用模型查找与item"158"最相似的5个item
    synonyms = model.findSynonyms("158", 5)
    for synonym, cosineSimilarity in synonyms:
        print(synonym, cosineSimilarity)
    # 保存模型
    embOutputDir = '/'.join(embOutputPath.split('/')[:-1])
    if not os.path.exists(embOutputDir):
        os.makedirs(embOutputDir)
    with open(embOutputPath, 'w') as f:
        for movie_id in model.getVectors():
            vectors = " ".join([str(emb) for emb in model.getVectors()[movie_id]])
            f.write(movie_id + ":" + vectors + "\n")
    return model
48 0.9553923010826111
256 0.9461638331413269
31 0.9321570992469788
186 0.9115440845489502
355 0.8810520768165588

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 达观数据推荐算法实现:协同过滤之item embedding

    推荐系统本质是在用户需求不明确的情况下,解决信息过载的问题,联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,...

    达观数据
  • 深度学习推荐系统中各类流行的Embedding方法(上)

    Embedding,中文直译为“嵌入”,常被翻译为“向量化”或者“向量映射”。在整个深度学习框架中都是十分重要的“基本操作”,不论是NLP(Natural La...

    OpenCV学堂
  • Item2vec: Neural Item Embedding for Collaborative Filtering

    推荐系统中,传统的CF算法都是利用 item2item 关系计算商品间相似性。i2i数据在业界的推荐系统中起着非常重要的作用。传统的i2i的主要计算方法分两类,...

    用户3578099
  • 干货 | 基于用户行为的视频聚类方案

    在个性化推荐系统中,通常是由挖掘物品属性来理解用户兴趣,从而构建推荐模型。从用户行为去理解物品属性往往做得比较简单,通常只是一些简单的标签统计。为了深入到用户行...

    美图数据技术团队
  • PySpark做数据处理

    PySpark是一种适合在大规模数据上做探索性分析,机器学习模型和ETL工作的优秀语言。若是你熟悉了Python语言和pandas库,PySpark适合你进一步...

    陆勤_数据人网
  • 浅谈Embedding技术在推荐系统中的应用(1)

    接着上一篇[推荐之矩阵分解],继续说Embedding在推荐领域的应用方法,矩阵分解为描述User/Item提供了一种向量化表达的方案,而本篇将探究如何从wor...

    流川枫
  • 金色传说,开源教程!属于算法的大数据工具-pyspark

    spark是目前大数据领域的核心技术栈,许多从事数据相关工作的小伙伴都想驯服它,变成"驯龙高手",以便能够驾驭成百上千台机器组成的集群之龙来驰骋于大数据之海。

    Sam Gor
  • 电商交易欺诈层出不穷,如何用深度学习系统布下天罗地网?

    AI科技评论按:交易欺诈对电子商务带来了巨大的威胁,来自清华大学交叉信息研究院博士后、物理学博士王书浩近日在AI研习社的青年分享会上介绍了基于循环神经网络的交易...

    AI科技评论
  • 使用Python写spark 示例

    个人GitHub地址: https://github.com/LinMingQiang

    py3study

扫码关注云+社区

领取腾讯云代金券