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") }

  }


}

猜你喜欢

转载自blog.csdn.net/fightingdog/article/details/83865171
今日推荐