1. 程式人生 > >Spark Mlib(三)用spark訓練詞向量

Spark Mlib(三)用spark訓練詞向量

自然語言處理中,在詞的表示上,向量的方式無疑是最流行的一種。它可以作為神經網路的輸入,也可直接用來計算。比如計算兩個詞的相似度時,就可以用這兩個詞向量的距離來衡量。詞向量的訓練需要大規模的語料,從而帶來的是比較長的訓練時間。spark框架基於記憶體計算,有忘加快詞向量的訓練速度。

以下是spark官網的程式碼(http://spark.apache.org/docs/latest/ml-features.html#word2vec)

package alg
import org.apache.spark.ml.feature.Word2Vec
import org.apache.spark.
ml.linalg.Vector import org.apache.spark.sql.{Row, SparkSession} object word2vec { def main(args:Array[String]):Unit={ val spark: SparkSession = SparkSession.builder .appName("My") .master("local[*]") .getOrCreate() val documentDF=spark.createDataFrame(Seq( "Hi I heard about Spark"
.split(" "), "I wish Java could use case classes".split(" "), "Logistic regression models are neat".split(" ")) .map(Tuple1.apply)) .toDF("text") //vectorSize可以自動調節,通常為300左右 val word2vec=new Word2Vec().setInputCol("text").setOutputCol("result").setVectorSize().setMinCount(0) val model=
word2vec.fit(documentDF) val result=model.transform(documentDF) result.collect().foreach{ case Row(text: Seq[_], features: Vector) => println(s"Text: [${text.mkString(", ")}] => \nVector: $features\n") } } }