博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于spark和sparkstreaming的word2vec
阅读量:6821 次
发布时间:2019-06-26

本文共 1661 字,大约阅读时间需要 5 分钟。

概述

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,但这并不影响相似度的判断

 

测试数据下载地址,数据集为搜狗语料分类中的军事篇

 

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数量的相似问题

//官方1.5.0版本的word2vec介绍

转载于:https://www.cnblogs.com/ulysses-you/p/6863585.html

你可能感兴趣的文章
Win7批处理文件设置代理服务器
查看>>
安卓 按键精灵 命令
查看>>
keepalived原理(主从配置+haproxy)及配置文件详解
查看>>
数据结构与算法面试题80道(6)
查看>>
vue教程4-vueadmin上手
查看>>
dp第一题
查看>>
xml相关知识
查看>>
CCCC L2-024 部落【并查集】
查看>>
CF 1003C Intense Heat【前缀和/精度/双层暴力枚举】
查看>>
typeof(fatime)方法 检查变量类型 bool number string null 等
查看>>
字符编码简介
查看>>
LevelDB源码之六缓存机制
查看>>
双向链表
查看>>
安装unity3d多个版本共存
查看>>
如何获取模拟器安装的app的位置
查看>>
二叉树--堆的实现(数组,非指针)
查看>>
[LeetCode] Largest Rectangle in Histogram 解题报告
查看>>
未能加载文件或程序集Newtonsoft.Json, Version=4.5.0.0
查看>>
国外服务器鸟文windows,时间12小时制,如何改成24小时呢?我来告诉你
查看>>
html里的<wbr>标签什么意思
查看>>