1. 文本词频Word2Vec
1.1 概念
word2vec就是用一个一层的神经网络(CBOW的本质)把one-hot形式的词向量映射到分布式形式的词向量
用来推断总体参数的统计量称为估计量(estimator)
当经测定的具体数值代入估计量时,它就是一个具体的数值,称为估计值(estimate) 。
an estimator is rule which before weobserve any data, we plan to use to estimate a parameter, it is a randomvariable. an estimate is the value of an estimator after the data have beenobserved
Word2vec是一个Estimator(估计量),它采用一系列代表文档的词语来训练word2vecmodel。该模型将每个词语映射到一个固定大小的向量。word2vecmodel使用文档中每个词语的平均数来将文档转换为向量,然后这个向量可以作为预测的特征,来计算文档相似度计算等等
1.2 历史
2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。随着深度学习(Deep Learning)在自然语言处理中应用的普及,很多人误以为word2vec是一种深度学习算法。其实word2vec算法的背后是一个浅层神经网络。另外需要强调的一点是,word2vec是一个计算word vector的开源工具。当我们在说word2vec算法或模型的时候,其实指的是其背后用于计算word vector的CBoW模型和Skip-gram模型。很多人以为word2vec指的是一个算法或模型,这也是一种谬误。
1.3 相关原理
http://blog.csdn.net/itplus/article/details/37969519
1.4 Demo
val sparkConf = new SparkConf().setAppName("ChiSquareTest").setMaster("local[8]")
val sc = new SparkContext(sparkConf)
val spark = SparkSession.builder
val ss = spark.getOrCreate();
val documentDF = ss.createDataFrame(Seq(
Array("刘伟"),
Array("张三"),
Array("李四")
).map(Tuple1.apply)).toDF("text")
// Learn a mapping from words to Vectors.
val word2Vec = new Word2Vec()
.setInputCol("text")
.setOutputCol("result")
.setVectorSize(4)
.setMinCount(0)
val model = word2Vec.fit(documentDF)
val result = model.transform(documentDF)
result.select("result").take(4).foreach(println)