Spark Mlib(三)用spark訓練詞向量
阿新 • • 發佈:2018-11-13
自然語言處理中,在詞的表示上,向量的方式無疑是最流行的一種。它可以作為神經網路的輸入,也可直接用來計算。比如計算兩個詞的相似度時,就可以用這兩個詞向量的距離來衡量。詞向量的訓練需要大規模的語料,從而帶來的是比較長的訓練時間。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(3).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") }
}
}