spark Word2Vec+LSH相似文本推荐(scala)

2024-08-28 20:18

本文主要是介绍spark Word2Vec+LSH相似文本推荐(scala),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在上一篇博客,我们使用spark CountVectorizer与IDF进行了关键词提取,博客地址:

spark CountVectorizer+IDF提取中文关键词(scala)

本篇博客在上一篇博客的基础上,介绍如何根据关键词获取文档的相似度,进行相似文本的推荐。在这里我们需要使用到两个算法:Word2Vec与LSH。

其中Word2Vec即将词转换为词向量,这样词之间的关系就可以向量距离去定量计算,距离越近的两个词相似性也较高,而spark中文档的词向量,即是这个文档所有词的词向量的平均值(这也就是为什么要使用关键词来计算文档的词向量,而不是直接计算文档的词向量的原因),Word2Vec的原理网上详细的教程 比较多,这里就不再累述了。

LSH可能使用得相对不那么频繁。LSH即Locality Sensitive has,局部敏感哈希,主要用来解决海量数据的相似性检索。由spark的官方文档翻译为:LSH的一般思想是使用一系列函数将数据点哈希到桶中,使得彼此接近的数据点在相同的桶中具有高概率,而数据点是远离彼此很可能在不同的桶中。spark中LSH支持欧式距离与Jaccard距离。

之所以使用Word2Vec+LSH,是因为Word2Vec将文档转换成了一个向量,而要求两篇文章的相似度,就是通过求其词向量的欧式距离,距离越近的则越相似。但对于海量的数据,要对文档两两求距离在寻找与当前文档最相似的文档,显然是不可能的。所以通过LSH来进行相似性检索。下面直接上代码(scala):

1、提取关键词后的初始数据集:

2、使用Word2Vec获取词向量:

        //Word2Vec获取关键词词向量val word2Vec = new Word2Vec().setInputCol("keywords").setOutputCol("wordvec").setVectorSize(15).setMinCount(0);val wvModel = word2Vec.fit(keyWordsDf);val w2vDf = wvModel.transform(keyWordsDf);w2vDf.show(false);

3、获取LSH模型

        val brp = new BucketedRandomProjectionLSH().setBucketLength(4.0).setNumHashTables(10).setInputCol("wordvec").setOutputCol("hashes")val brpModel = brp.fit(w2vDf);val tsDf = brpModel.transform(w2vDf);

4、使用LSH模型获取每个文档的相似文档(欧式距离在某个范围内)

        val brpDf = brpModel.approxSimilarityJoin(tsDf, tsDf, 0.015, "EuclideanDistance");brpDf.show(false);

5、整理计算结果

       val getIdFun = udf((input:Row)=> {input(0).toString.toInt;});val corrDf = brpDf.withColumn("id",getIdFun(col("datasetA"))).withColumn("id_sim",getIdFun(col("datasetB"))).drop("datasetA").drop("datasetB").drop("EuclideanDistance");corrDf.show(false);corrDf.createOrReplaceTempView("test");val resDf = sparkSQL.sql("select id,concat_ws(',',collect_set(id_sim)) as sim from test where id != id_sim group by id");resDf.show(false);

计算结果如下截图:

其中id为每篇文章的id,sim为相似的文档的id。可以看到,由于是推荐欧式距离在一定范围内的文档,所以对于每篇文档,推荐的结果的数量是不一致的。

这篇关于spark Word2Vec+LSH相似文本推荐(scala)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115775

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

Level3 — PART 3 — 自然语言处理与文本分析

目录 自然语言处理概要 分词与词性标注 N-Gram 分词 分词及词性标注的难点 法则式分词法 全切分 FMM和BMM Bi-direction MM 优缺点 统计式分词法 N-Gram概率模型 HMM概率模型 词性标注(Part-of-Speech Tagging) HMM 文本挖掘概要 信息检索(Information Retrieval) 全文扫描 关键词

开放式耳机好用?平价开放式耳机推荐?四款开放式的蓝牙耳机推荐

开放式耳机好用吗?有平价些的开放式耳机推荐吗?那这两个问题的回答当然是肯定的。 首先开放式耳机好不好用取决于对耳机的需求,因为开放式耳机其实是比较适用于需要注意周围环境、需要‌长时间佩戴舒适以及需要频繁与人交流的场景中,在这些场景下使用开放式耳机的话就会比较有优势。就例如跑步骑行健身等运动的时候,能够兼得佩戴舒适度的同时,增加一定的安全性;还有在办公学习的时候,会很适合长时间佩戴,能够方便和

CCF推荐C类会议和期刊总结(计算机网络领域)

CCF推荐C类会议和期刊总结(计算机网络领域) 在计算机网络领域,中国计算机学会(CCF)推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结,包括全称、出版社、dblp文献网址以及所属领域。 目录 CCF推荐C类会议和期刊总结(计算机网络领域) C类期刊 1. Ad Hoc Networks 2. CC 3. TNSM 4. IET Com

基于Python的自然语言处理系列(1):Word2Vec

在自然语言处理(NLP)领域,Word2Vec是一种广泛使用的词向量表示方法。它通过将词汇映射到连续的向量空间中,使得计算机可以更好地理解和处理文本数据。本系列的第一篇文章将详细介绍Word2Vec模型的原理、实现方法及应用场景。 1. Word2Vec 原理         Word2Vec模型由Google的Tomas Mikolov等人在2013年提出,主要有两种训练方式

推荐练习键盘盲打的网站

对于初学者来说,以下是一些推荐的在线打字练习网站: 打字侠:这是一个专业的在线打字练习平台,提供科学合理的课程设置和个性化学习计划,适合各个水平的用户。它还提供实时反馈和数据分析,帮助你提升打字速度和准确度。 dazidazi.com:这个网站提供了基础的打字练习,适合初学者从零开始学习打字。 Type.fun打字星球:提供了丰富的盲打课程和科学的打字课程设计,还有诗词歌赋、经典名著等多样