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

发布时间:2024-06-17 10:01

同义词识别

  • 一、业务场景
  • 二、数据集说明
  • 三、操作步骤
    • 阶段一、启动HDFS、Spark集群服务和zeppelin服务器
    • 阶段二、准备案例中用到的数据集
    • 阶段三、对数据集进行探索和分析
    • 阶段四、自我练习

未经许可,禁止以任何形式转载,若要引用,请标注链接地址
全文共计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】,执行以上代码,输出内容如下:
基于Spark的案例:同义词识别_第1张图片

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】,执行以上代码,输出内容如下:
基于Spark的案例:同义词识别_第2张图片

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

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

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

同时按下【Shift+Enter】,执行以上代码,输出内容如下:
基于Spark的案例:同义词识别_第3张图片

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

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

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

同时按下【Shift+Enter】,执行以上代码,输出内容如下:
基于Spark的案例:同义词识别_第4张图片

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

阶段四、自我练习

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

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号