概述

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

基于spark和sparkstreaming的word2vec的更多相关文章

  1. 基于Spark和SparkSQL的NetFlow流量的初步分析——scala语言

    基于Spark和SparkSQL的NetFlow流量的初步分析--scala语言 标签: NetFlow Spark SparkSQL 本文主要是介绍如何使用Spark做一些简单的NetFlow数据的 ...

  2. 基于Spark Mllib的文本分类

    基于Spark Mllib的文本分类 文本分类是一个典型的机器学习问题,其主要目标是通过对已有语料库文本数据训练得到分类模型,进而对新文本进行类别标签的预测.这在很多领域都有现实的应用场景,如新闻网站 ...

  3. 基于HDFS的SparkStreaming案例实战和内幕源码解密

    一:Spark集群开发环境准备 启动HDFS,如下图所示: 通过web端查看节点正常启动,如下图所示: 2.启动Spark集群,如下图所示: 通过web端查看集群启动正常,如下图所示: 3.启动sta ...

  4. 基于Spark的电影推荐系统(推荐系统~7)

    基于Spark的电影推荐系统(推荐系统~7) 22/100 发布文章 liuge36 第四部分-推荐系统-实时推荐 本模块基于第4节得到的模型,开始为用户做实时推荐,推荐用户最有可能喜爱的5部电影. ...

  5. 基于Spark的电影推荐系统(推荐系统~1)

    第四部分-推荐系统-项目介绍 行业背景: 快速:Apache Spark以内存计算为核心 通用 :一站式解决各个问题,ADHOC SQL查询,流计算,数据挖掘,图计算 完整的生态圈 只要掌握Spark ...

  6. 基于spark邮件自动分类

    代码放在github上:click me 一.数据说明 数据集为英文语料集,一共包含20种类别的邮件,除了类别soc.religion.christian的邮件数为997以外每个类别的邮件数都是100 ...

  7. 基于Spark ALS构建商品推荐引擎

    基于Spark ALS构建商品推荐引擎   一般来讲,推荐引擎试图对用户与某类物品之间的联系建模,其想法是预测人们可能喜好的物品并通过探索物品之间的联系来辅助这个过程,让用户能更快速.更准确的获得所需 ...

  8. 【基于spark IM 的二次开发笔记】第一天 各种配置

    [基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...

  9. 大数据实时处理-基于Spark的大数据实时处理及应用技术培训

    随着互联网.移动互联网和物联网的发展,我们已经切实地迎来了一个大数据 的时代.大数据是指无法在一定时间内用常规软件工具对其内容进行抓取.管理和处理的数据集合,对大数据的分析已经成为一个非常重要且紧迫的 ...

随机推荐

  1. PMBOK 和 PRINCE2的技术不同的地方是什么

    首先,PMBOK是一个框架指导,PRINCE2是一种实现方法. PMBOK是一种建议及最佳实践的集锦.PMBOK包含项目管理的工具和技术并且是一个指导,告诉我们如何做事情,在一种环境中怎样处理问题;而 ...

  2. websocket 项目应用

    序言 很早就想用起来websocket,可惜需要后台服务的支持,技术的翻新总会给我带来巨大的冲击,最近后端人员学习了websocket相关后台技术.于是我们开始动起来了. 学习 这位大兄弟的文章  h ...

  3. linux命令之查看字符集

    lucifer@abc:~$ locale -a 查看本地字符集lucifer@abc:~$ locale -m 查看所有支持的字符集将文件从gb2312转为utf8iconv -f gb2312 - ...

  4. tomcat配置管理员-走后门

    在Tomcat中,应用程序的部署很简单,只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压.在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为To ...

  5. 老李分享:导出xml报告到手机

    老李分享:导出xml报告到手机   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821 ...

  6. 这辈子只能碰到一次! 记一次SSL无故被撤消!

    SSL证书刚更新一切都那么正常, 突然有一天网站不能访问了, Chrome浏览器提示有风险, 没有继续访问链接,没有,没有, 重要的事情说三遍, 于是乎赶紧加班查原因, 发展浏览器报的错误是证书撤消( ...

  7. Centos7上安装Kubernetes集群部署docker

    一.安装前准备1.操作系统详情需要三台主机,都最小化安装 centos7.3,并update到最新 [root@master ~]# (Core) 角色 主机名 IPMaster master 192 ...

  8. jmeter 登录并发 (此文章有待修改)

    1.先通过录制通过取样器找到所需要的请求.并新建添加至线程组,也可以根据以下样式找到所需请求.复制添加至线程组 寻找请求 添加后 2.添加CSV配置元件 3.填写CSV参数 4.修改参数.这是格式:& ...

  9. Ubuntu搭建mysql,Navicat Premium连接

    保存编辑结果与退出vim编辑器 https://jingyan.baidu.com/article/495ba8410ff14d38b30ede01.html 首先,我们需要使用apt安装mysql, ...

  10. Docker 架构详解 - 每天5分钟玩转容器技术(7)

    Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 ...