基於spark和sparkstreaming的word2vec


概述

Word2vec是一款由谷歌發布開源的自然語言處理算法,其目的是把words轉換成vectors,從而可以用數學的方法來分析words之間的關系。Spark其該算法進行了封裝,並在mllib中實現。

整體流程是spark離線訓練模型,可以是1小時1訓練也可以1天1訓練,根據具體業務來判斷,sparkstreaming在線分析。

由於歷史問題,spark還在用1.5.0,接口上和2.1還是有點區別,大概看了下文檔,流程上差不多

 

spark離線訓練

如下代碼,通過word2vec訓練出一個模型,並且找出“導彈”的10個近義詞

    val input = sc.textFile("word2vec.txt").map(line => line.split(" ").toSeq)
    val word2vec = new Word2Vec()
    word2vec.setMinCount(1)
    word2vec.setNumPartitions(1)
    word2vec.setNumIterations(1)
    val model = word2vec.fit(input)
    val synonyms = model.findSynonyms("導彈", 10)
    for((synonym, cosineSimilarity) <- synonyms) {
      println(s"$synonym $cosineSimilarity")
    }
  model.save(sc,"myModelPath")

參數解釋

參數

默認

解釋

vectorSize

100

向量的維度,一般維度不會太大,通常在100-500

learningRate

0.025

Sets initial learning rate

 

numPartitions

1

分區個數,設置多個可以提高計算效率,但會少量的numpartitions有利於精確度

numIterations

1

迭代次數,應該小於等於numPartitions

經過粗略的測試,適當提高numPartition可以加快word2vec的計算速度

測試結果

每次測試的結果都有點不同,大致差不多

這里說明一點,結果中第一個字段是word,第二個字段是余弦相似度,由於sparkmllib考慮到計算效率,沒有用完成的余弦相似度公式,所以結果會大於1,但這並不影響相似度的判斷

 

測試數據下載地址,數據集為搜狗語料分類中的軍事篇

http://files.cnblogs.com/files/ulysses-you/word2vec.zip

 

sparkstreaming在線分析

這個demo用了socket接口(這樣測試是最方便的..),實現了在線對word2vec模型的調用

  val model = Word2VecModel.load(ssc.sparkContext, "myModelPath")
  val lines = ssc.socketTextStream("localhost",9999)
    // Split each line into words
    val words = lines.flatMap(_.split(" "))
    // Count each word in each batch
    words.map{word =>
      val synonyms = model.findSynonyms(word,10)
      for((synonym, cosineSimilarity) <- synonyms) {
        println(s"syn => $synonym $cosineSimilarity")
      }
    }

 

參考資料

//numPartitions和numIterations數量的相似問題

http://stackoverflow.com/questions/37582929/how-are-number-of-iterations-and-number-of-partitions-releated-in-apache-spark-w

//官方1.5.0版本的word2vec介紹

http://spark.apache.org/docs/1.5.0/mllib-feature-extraction.html#word2vec


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM