使用Spark调用word2vec接口将文本转化为向量

来源:互联网 发布:网络写手排名 编辑:程序博客网 时间:2024/05/16 08:00
概述:用Spark做机器学习已应用得比较普遍,例如语义分析,文本聚类,用户360°画像的建立。常常第一步是将拿到的文本进行切词,也叫分词,之后提取关键词,这个过程可以使用NLP完成。接下来就是将关键词转成向量,再放到k-means或knn或贝叶斯分类等算法中做聚类分析。词串转成向量就要用到word2vec这个工具,Spark提供了相应的接口,本文给出一个Python语言实现的demo,Spark版本为2.0.0。此版本较之前的版本入口变动较大, SparkContext需要换成SparkSession。 

 

 

 源代码:

__author__ = 'Rossie'
from
pyspark.mllib.featureimport Word2Vec
from pyspark.ml.featureimport Word2Vec
# Input data: Each row is a bag of wordsfrom a sentence or document.
from pyspark.sqlimport SparkSession

spark = SparkSession\
   
.builder\
    .appName("PythonSQL")\
   
.config('spark.sql.warehouse.dir','file:///D:/software/spark-2.0.0-bin-hadoop2.7')\
   
.getOrCreate()
documentDF = spark.createDataFrame([
    ("Hi I heard about Spark".split(" "), ),
   
("I wish Java could use case classes".split(" "), ),
   
("Logistic regression models are neat".split(" "), )
], [
"text"])
#可以控制向量的维度.
word2Vec = Word2Vec(vectorSize=4,minCount=0,inputCol="text",outputCol="result")
model = word2Vec.fit(documentDF)
result = model.transform(documentDF)
for featurein result.select("result").take(3):
   
print(feature)

 

 

运行结果:

Row(result=DenseVector([0.0138, -0.0281,-0.0111, 0.0095]))

Row(result=DenseVector([0.0201, 0.0458,0.0007, 0.0413]))

Row(result=DenseVector([-0.0373, 0.0386,-0.0117, 0.0064]))

0 0
原创粉丝点击