欢迎这位怪蜀黍来到《spark机器学习从0到1特征抽取–Word2Vec(十四) - 大码王 - 博客园》

关闭页面特效

 

一、概念

Word2vec是一个Estimator,它采用一系列代表文档的词语来训练word2vecmodel。该模型将每个词语映射到一个固定大小的向量。word2vecmodel使用文档中每个词语的平均数来将文档转换为向量,然后这个向量可以作为预测的特征,来计算文档相似度计算等等。

二、代码实现

2.1、引包,获取spark

首先,我们引入相关包:

import java.util.Arrays;
import java.util.List;
import org.apache.spark.ml.feature.Word2Vec;
import org.apache.spark.ml.feature.Word2VecModel;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.ArrayType;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.Metadata;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;块

然后是获取spark

SparkSession spark =  SparkSession.builder().appName("Word2VecTest").master("local").getOrCreate();
2.2、构建测试数据

接着呢来构建一个DataFrame,往DateFrame里加一些测试的文档信息

List<Row> rawData =  Arrays.asList(RowFactory.create(Arrays.asList("Hi I heard about Spark".split(","))),
                        RowFactory.create(Arrays.asList("I wish Java  could use case classes".split(","))),
                        RowFactory.create(Arrays.asList("Logistic  regression models are neat".split(","))));
StructType schema = new StructType(new  StructField[] {
        new StructField("text",new  ArrayType(DataTypes.StringType,false),false,Metadata.empty())
});

Dataset<Row> documentDF =  spark.createDataFrame(rawData,schema);
documentDF.show(false);

我们来查看一下控制台的输出结果:

+-------------------------------------+
|text                                 |
+-------------------------------------+
|[Hi I heard about Spark]             |
|[I wish Java could use case classes] |
|[Logistic regression models are neat]|
+-------------------------------------+
2.3、新建评估器,训练,转换得到向量

接下来我们新建一个Word2Vec的评估器,把单词和向量建立一个映射,设定输入为文本信息text,输出为追加列result,变量的大小为3,最小计数为0。建立完之后,用Word2Vec评估器对文档进行训练和转换,得到Dataset的数据集。

Word2Vec word2Vec = new  Word2Vec().setInputCol("text")
                                   .setOutputCol("result")
                                   .setVectorSize(3)
                                   .setMinCount(0);

Word2VecModel model =  word2Vec.fit(documentDF);
Dataset<Row> result =  model.transform(documentDF);
result.show(false);

我们看一下输出结果:

+-----------------------------------------+-------------------------------------------------------------------------------+
|text                                                        |result                                                                                                            |
+-----------------------------------------+-------------------------------------------------------------------------------+
|[Hi I heard about Spark]                       |[-0.12674053013324738,0.09846510738134384,-0.10375533252954483] |
|[I wish Java could use case classes]      |[-0.1633371263742447,-0.14517612755298615,0.11354436725378036]   |
|[Logistic regression models are  neat] |[-0.019123395904898643,-0.13107778131961823,0.14307855069637299]|
+--------------------------------------- -+-------------------------------------------------------------------------------+

我们可以看到,通过Word2VecModel将文档转换为向量,然后这个向量可以作为预测的特征,来计算文档相似度计算啦。




 posted on   大码王  阅读(326)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

成都

复制代码

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示