基于Spark的案例:同义词识别


未经许可,禁止以任何形式转载,若要引用,请标注链接地址
全文共计2844字,阅读大概需要3分钟

一、业务场景

在机器学习中,有时会遇到同义词识别问题。现需要使用Spark ML库来解决同义词识别问题。

二、数据集说明

本案例所使用的数据集为纯文本文件,说明如下:
  数据集路径:/data/dataset/ml/synonymous.txt

三、操作步骤

阶段一、启动HDFS、Spark集群服务和zeppelin服务器

1、启动HDFS集群
  在Linux终端窗口下,输入以下命令,启动HDFS集群:

1.	$ start-dfs.sh

2、启动Spark集群
  在Linux终端窗口下,输入以下命令,启动Spark集群:

1.	$ cd /opt/spark
2.	$ ./sbin/start-all.sh

3、启动zeppelin服务器
  在Linux终端窗口下,输入以下命令,启动zeppelin服务器:

1.	$ zeppelin-daemon.sh start

4、验证以上进程是否已启动
  在Linux终端窗口下,输入以下命令,查看启动的服务进程:

1.	$ jps

如果显示以下6个进程,则说明各项服务启动正常,可以继续下一阶段。

1.	2288 NameNode
2.	2402 DataNode
3.	2603 SecondaryNameNode
4.	2769 Master
5.	2891 Worker
6.	2984 ZeppelinServer

阶段二、准备案例中用到的数据集

1、将本案例要用到的数据集上传到HDFS文件系统的/data/dataset/目录下。在Linux终端窗口下,输入以下命令:

1.	$ hdfs dfs -mkdir -p /data/dataset
2.	$ hdfs dfs -put /data/dataset/ml/synonymous.txt /data/dataset/

2、在Linux终端窗口下,输入以下命令,查看HDFS上是否已经上传了该数据集:

1.	$ hdfs dfs -ls /data/dataset/

这时应该看到数据集文件synonymous.txt已经上传到了HDFS的/data/dataset/目录下。

阶段三、对数据集进行探索和分析

1、新建一个zeppelin notebook文件,并命名为”tyc_project”。
  2、加载数据集。在notebook单元格中,输入以下代码:

1.	val filePath = "hdfs://localhost:9000/data/dataset/synonymous.txt"
2.	val synonymousRDD = sc.textFile(filePath)
3.	synonymousRDD.collect.foreach(println)

同时按下【Shift+Enter】键,执行以上代码,输出内容如下:

Unified data analytics engine Spark
People use Hive for data analytics
MapReduce is not fading away
mysql sqlserver and oracle all is sql

3、将数据集从RDD转换为DataFrame。在notebook单元格中,输入以下代码:

1.	// 从RDD转换为DataFrame
2.	val documentRDD = synonymousRDD.map(line => line.split(" "))
3.	val documentDF = documentRDD.toDF("word")
4.	     
5.	// 显示
6.	documentDF.show(false)

同时按下【Shift+Enter】,执行以上代码,输出内容如下:
在这里插入图片描述

4、需要使用Word2Vec estimator来计算单词的嵌入和发现类似的单词(识别同义词)。在notebook单元格中,输入以下代码,构造一个Word2Vec,并指定输入列和生成的特征列:

1.	// 使用Word2Vec estimator来计算单词的嵌入和发现类似的单词(识别同义词)
2.	import org.apache.spark.ml.feature.Word2Vec
3.	     
4.	val word2Vec = new Word2Vec().setInputCol("word").
5.	                              setOutputCol("feature").
6.	                              setVectorSize(3).
7.	                              setMinCount(0)

同时按下【Shift+Enter】,执行以上代码,输出内容如下:

word2Vec: org.apache.spark.ml.feature.Word2Vec = w2v_1aa5649a64e5

5、使用上一步得到的estimator来拟合数据,得到一个模型对象。在notebook单元格中,输入以下代码:

1.	val model = word2Vec.fit(documentDF)

同时按下【Shift+Enter】,执行以上代码,输出内容如下:

model: org.apache.spark.ml.feature.Word2VecModel = w2v_1aa5649a64e5

由以上输出内容可以看出,在拟合数据后,得到一个Word2VecModel的模型对象。

6、使用得到的模型对DataFrame documentDF进行转换,得到特征列。在notebook单元格中,输入以下代码:

1.	val result = model.transform(documentDF)
2.	result.show(false)

同时按下【Shift+Enter】,执行以上代码,输出内容如下:
在这里插入图片描述

上面输出表格中的”feature”列就是生成的特征列。

7、找出与Spark相似的3个单词。在notebook单元格中,输入以下代码:

1.	model.findSynonyms("Spark", 3).show

同时按下【Shift+Enter】,执行以上代码,输出内容如下:
在这里插入图片描述

由以上输出内容可以看出,与单词”Spark”最接近的单词有”engine”、”MapReduce”和”Hive”。

8、找出与Hive相似的3个单词。在notebook单元格中,输入以下代码:

1.	model.findSynonyms("Hive", 3).show

同时按下【Shift+Enter】,执行以上代码,输出内容如下:
在这里插入图片描述

由以上输出内容可以看出,与单词”Hive”最接近的单词有”spark”、”fading”和”engine”。

阶段四、自我练习

请使用Spark ML库,在本案例项目数据集基础上,回答以下问题:
1、请找出与SQL最接近的5个同义词。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂开发的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值