spark scala word2vec 和多层分类感知器在情感分析中的实际应用

转自:http://www.cnblogs.com/canyangfeixue/p/7227998.html 对于威胁检测算法使用神经网络训练有用!!!TODO待实验

/**
  * Created by lkl on 2017/7/21.
  */
//import com.ibm.spark.exercise.util.LogUtils
//import com.ibm.spark.exercise.util.LogUtils
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification.MultilayerPerceptronClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature.{IndexToString, StringIndexer, Word2Vec}
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SQLContext
object mllib {

  final val VECTOR_SIZE = 1000
//  def main(args: Array[String]) {
//    if (args.length < 1) {
//      println("Usage:SMSClassifier SMSTextFile")
//      sys.exit(1)
//    }
  def main(args: Array[String]) {
    val conf = new SparkConf().setMaster("local").setAppName("test")
       val sc = new SparkContext(conf)
      val sqlContext = new org.apache.spark.sql.SQLContext(sc)

//    val role = "jdbc:mysql://192.168.0.37:3306/emotional?user=root&password=123456&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false"
//    import sqlContext.implicits._
//    val df = sc.textFile("hdfs://192.168.0.211:9000/user/hadoop/emotion/SMS.txt").map(line=>(line.split(" ")(0),line.split(" ")(1),line.split(" ")(2),line.split(" ")(3))).toDF("id","innserSessionid","words","value")
//    df.printSchema()
//    df.insertIntoJDBC(role, "SMS", true)
    val sqlCtx =new org.apache.spark.sql.SQLContext(sc)
    import sqlContext.implicits._// 读取hdfs 数据源,格式如下:以空格隔开,最后一列数字列是分析标题后,人为打上的标签,值是按照情绪程度,值选择于【-1,-0.75,-0.5,-0.25,,0.25,0.50,0.75,1】其中之一。
// 10090 C779C882AA39436A89C463BCB406B838 涨停板,复盘,全,靠,新,股,撑,门面,万科,A,尾盘,封板 0.75
// 10091 519A9C6AD0A845298B0B3924117C0B4F 一,行业,再现,重大,利好,板块,反弹,仍,将,继续 0.75
// 10092 C86CEC7DB9794311AF386C3D7B0B7CBD 藁城区,3,大,项目,新,获,规划证,开发,房企,系,同,一家 0
// 10093 FCEA2FFC1C2F4D6C808F2CBC2FF18A8C 完善,对,境外,企业,和,对外,投资,统计,监测 0.5
// 10094 204A77847F03404986331810E039DFC2 财联社,电报 0
// 10095 E571B9EF451F4D5F8426A1FA06CD9EE6 审计署,部分,央企,业绩,不,实 -0.5
// 10096 605264A2F6684CC4BB4B2A0B6A8FA078 厨卫,品牌,新,媒体,榜,看看,谁家,的,官微,最,爱,卖萌 0.25
val parsedRDD = sc.textFile("hdfs://192.168.0.211:9000/user/hadoop/emotion/SMS.txt").map(line=>{  val a = line.split(" ")  if(a.length == 4 ){    (line.split(" ")(3),line.split(" ")(2).split(","))  }else{    ("","".split(","))  }})
val msgDF = sqlCtx.createDataFrame(parsedRDD).toDF("label","message")    val labelIndexer = new StringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(msgDF)    val word2Vec = new Word2Vec().setInputCol("message").setOutputCol("features").setVectorSize(VECTOR_SIZE).setMinCount(1)

val layers = Array[Int](VECTOR_SIZE,250,500,200)    val mlpc = new MultilayerPerceptronClassifier().setLayers(layers).setBlockSize(512).setSeed(1234L).setMaxIter(128).setFeaturesCol("features").setLabelCol("indexedLabel").setPredictionCol("prediction")

val labelConverter = new IndexToString().setInputCol("prediction").setOutputCol("predictedLabel").setLabels(labelIndexer.labels)

val Array(trainingData, testData) = msgDF.randomSplit(Array(0.8, 0.2))    val pipeline = new Pipeline().setStages(Array(labelIndexer,word2Vec,mlpc,labelConverter))    val model = pipeline.fit(trainingData)    val predictionResultDF = model.transform(testData)    //below 2 lines are for debug use    predictionResultDF.printSchema    predictionResultDF.select("message","label","predictedLabel").show(30)    val evaluator = new MulticlassClassificationEvaluator().setLabelCol("indexedLabel").setPredictionCol("prediction").setMetricName("precision")    val predictionAccuracy = evaluator.evaluate(predictionResultDF)    println("Testing Accuracy is %2.4f".format(predictionAccuracy * 100) + "%")   // sc.stop

}}
 

结果如下:

+--------------------+-----+--------------+
|             message|label|predictedLabel|
+--------------------+-----+--------------+
|[价格会, 一飞, 冲天, 神秘,...|  0.5|           0.5|
|[审计署, 部分, 央企, 业绩,...| -0.5|           0.5|
|[广电, 总局, 新浪, 微博, ...| -0.5|           0.5|
|[叶檀, 若, 粤, 港澳湾区, ...| 0.25|           0.5|
|      [万达, 崩, 万科, 起]|    0|           0.5|
|[外汇, 小白, 必, 看, 视频...| 0.25|           0.5|
|[乐视, 回, 应发, 不, 出,...|-0.75|           0.5|
|[万达, 电影, 高开, 1.69...|  0.5|           0.5|
|[万科, A, 股, 6月, 23...| 0.75|           0.5|
|[金价, 周一, 反弹, 扭转, ...|  0.5|           0.5|
|[收评, 两, 市, 震荡, 沪指...| 0.25|           0.5|
|[点睛, 军工, 混改, 加速, ...|  0.5|           0.5|
|[棉花, 日报, 棉花, 短期, ...| 0.25|           0.5|
|[探秘, 巴铁, 试验线, 部分,...|-0.75|           0.5|
|[万达, 复星, 股价, 暴跌, ...|-0.75|           0.5|
|[油价, 迎, 年内, 最, 大,...|-0.25|           0.5|
|[2017年, IPO, 被, 否...|-0.75|           0.5|
|[股, 转, 监事长, 邓映翎, ...| -0.5|           0.5|
|[发改委, 国内, 汽, 柴油, ...|-0.25|           0.5|
|[周报, 明晟, MSCI, 宣布...|  0.5|           0.5|
|[夏季, 达沃斯, 共识, 中国,...|  0.5|           0.5|
|[重磅, 又, 一, 家, 公司,...|-0.75|           0.5|
|[麦格里, 重磅, 警告, OPE...| -0.5|           0.5|
|[韩国, 娱乐, 公司, TO-W...|  0.5|           0.5|
|       [新, 三, 板, 周报]|    0|           0.5|
|[分享, 华尔街, 对, 美国, ...|  0.5|           0.5|
|[盛和, 资源, 2015年, 公...|    0|           0.5|
|[交易, 实况, 黄金, 两, 连...| -0.5|           0.5|
|[徽商, 银行, 内斗戏, 第二,...| -0.5|           0.5|
|[2017, 夏季, 达沃斯, 论...| 0.25|           0.5|

时间: 2024-10-18 22:20:16

spark scala word2vec 和多层分类感知器在情感分析中的实际应用的相关文章

Spark mllib多层分类感知器在情感分析中的实际应用

import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.MultilayerPerceptronClassifier import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator import org.apache.spark.ml.feature.{IndexToString, StringIndexer, Wor

人工神经网络之感知器算法

感知器作为人工神经网络中最基本的单元,有多个输入和一个输出组成.虽然我们的目的是学习很多神经单元互连的网络,但是我们还是需要先对单个的神经单元进行研究. 感知器算法的主要流程: 首先得到n个输入,再将每个输入值加权,然后判断感知器输入的加权和最否达到某一阀值v,若达到,则通过sign函数输出1,否则输出-1. 为了统一表达式,我们将上面的阀值v设为-w0,新增变量x0=1,这样就可以使用w0x0+w1x1+w2x2+…+wnxn>0来代替上面的w1x1+w2x2+…+wnxn>v.于是有: 从

情感分析的现代方法(包含word2vec Doc2Vec)

英文原文地址:https://districtdatalabs.silvrback.com/modern-methods-for-sentiment-analysis 转载文章地址:http://datartisan.com/article/detail/48.html 情感分析是一种常见的自然语言处理(NLP)方法的应用,特别是在以提取文本的情感内容为目标的分类方法中.通过这种方式,情感分析可以被视为利用一些情感得分指标来量化定性数据的方法.尽管情绪在很大程度上是主观的,但是情感量化分析已经有

使用Spark MLlib进行情感分析

使用Spark MLlib进行情感分析 使用Spark MLlib进行情感分析 一.实验说明 在当今这个互联网时代,人们对于各种事情的舆论观点都散布在各种社交网络平台或新闻提要中.我们可以在移动设备或是个人PC上轻松地发布自己的观点.对于这种网上海量分布地数据,我们可以利用文本分析来挖掘各种观点.如下图中,CognoviLabs利用Twitter上人们发布对于美国大选两个候选人的推特,进行情感分析的结果.从这张图我们也可以直观地感受到民意所向(此图发表日期为10月10日,早于今年美国大选的日子)

神经网络入门回顾(感知器、多层感知器)

神经网络属于“连接主义”,和统计机器学习的理论基础区别还是很不一样. 以我自己的理解,统计机器学习的理论基于统计学,理论厚度足够强,让人有足够的安全感:而神经网络的理论更侧重于代数,表征能力特别强,不过可解释性欠佳. 这两个属于机器学习的两个不同的流派,偶尔也有相互等价的算法. 本文回顾神经网络最简单的构件:感知器.多层感知器. 感知器 感知器是二类分类的线性分类模型,将实例划分为正负两类的分离超平面(separating hyperplane),属于判别模型. 感知器基于线性阈值单元(Line

多层感知器学习

1.多层感知器简介 多层感知器(MLP)可以看做一个逻辑回归,不过它的输入要先进行一个非线性变换,这样数据就被映射到线性可分的空间了,这个空间我们称为隐藏层.通常单层隐藏层就可以作为一个感知器了,其结构如下图所示: 这里输入层首先通过权重矩阵和偏置得到总输出值并且通过tanh函数作一个非线性变换就可以得到hidden layer,然后从hidden layer到output layer可以使用之前的逻辑回归进行操作. 这里我们同样使用SGD算法来对参数进行更新,参数共有四个,分别是input-h

TFboy养成记 多层感知器 MLP

内容总结与莫烦的视频. 这里多层感知器代码写的是一个简单的三层神经网络,输入层,隐藏层,输出层.代码的目的是你和一个二次曲线.同时,为了保证数据的自然,添加了mean为0,steddv为0.05的噪声. 添加层代码: def addLayer(inputs,inSize,outSize,activ_func = None):#insize outsize表示输如输出层的大小,inputs是输入.activ_func是激活函数,输出层没有激活函数.默认激活函数为空 with tf.name_sco

RBF神经网络学习算法及与多层感知器的比较

对于RBF神经网络的原理已经在我的博文<机器学习之径向基神经网络(RBF NN)>中介绍过,这里不再重复.今天要介绍的是常用的RBF神经网络学习算法及RBF神经网络与多层感知器网络的对比. 一.RBF神经网络学习算法 广义的RBF神经网络结构如下图所示: N-M-L结构对应着N维输入,M个数据中心点centers,L个输出. RBF 网络常用学习算法 RBF 网络的设计包括结构设计和参数设计.结构设计主要解决如何确定网络隐节点数的问题.参数设计一般需考虑包括3种参数:各基函数的数据中心和扩展常

感知器实现鸢尾花的分类

import numpy as npfrom sklearn.datasets import load_irisimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib as mplclass perceptron: ''' 感知器类实现 ''' def __init__(self,eta,epoch): ''' init perceptron parameters -------- eta: float learni