zoukankan      html  css  js  c++  java
  • 基于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

  • 相关阅读:
    MVP模式与MVVM模式
    webpack的配置处理
    leetcode 287 Find the Duplicate Number
    leetcode 152 Maximum Product Subarray
    leetcode 76 Minimum Window Substring
    感知器算法初探
    leetcode 179 Largest Number
    leetcode 33 Search in Rotated Sorted Array
    leetcode 334 Increasing Triplet Subsequence
    朴素贝叶斯分类器初探
  • 原文地址:https://www.cnblogs.com/ulysses-you/p/6863585.html
Copyright © 2011-2022 走看看