文本词向量Word2Vec模型 您所在的位置:网站首页 词向量编码 文本词向量Word2Vec模型

文本词向量Word2Vec模型

2022-03-24 12:31| 来源: 网络整理| 查看: 265

文本词向量Word2Vec模型

         冯志伟在意大利西西里海上

文本词向量Word2Vec模型

原创 2017-07-01 秦陇纪10汇编 数据简化DataSimp

 目录

一、文本词向量Word2Vec模型(3210字)1

前言1

Word2vec简介1

Word2Vec例一代码及结果2

word2vec原理简述2

Word2Vec例二3

Word2Vec模型分析3

技术参考资料5

参考文献(100字)6

Appx. 新闻4则及历史名人事件(7280字)6

Appx. 数据简化DataSimp社区译文志愿者(620字)10

 

简介:Word2vec是Google在2013年开源的将词表征为实数值向量的工具,利用深度学习训练,把对文本内容的处理简化为 K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。Word2vec输出的词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分析等等。如果换个思路,把词当做特征,那么Word2vec就可以把特征映射到 K 维向量空间,可以为文本数据寻求更加深层次的特征表示,在一定程度上揭示了单词之间某些非线性的关系。例如,如果你用“意大利”这个单词的属性向量来减去“罗马”的属性向量,再加上“巴黎”的属性向量,你能得到“法国”这个单词或者相近的意思。类似的,用“国王”减去“男人”加上“女人”,能得到“王后”。

来源:秦陇纪2010数据简化DataSimp结合Yoshua Bengio教授14年访谈、Word2Vec提出者Tomas Mikolov简介,汇编三篇博文,出处见参考文献。附:周六新闻4则及历史名人事件。文末留言/打赏后“阅读原文”下载22k字11页彩标PDF文档。七一快乐!

 

一、文本词向量Word2Vec模型(3210)

前言

文本挖掘领域首先要对词做定量化表示,常见方法有One-hot Representation和Distributed Representation两种。这里强调词向量(Distributed Representation的逻辑含义,为什么能从一定程度利用距离表示词语间的语义相似性

例如:词“篮球”相关的几个词有“体育,运动,NBA,足球”,用DR方式表示为(0.5,0.2,0.1,0.2),可以认为篮球跟这组词向量的权重关系,像LDA这种模型便能达到求解的效果。

而Word2Vec也是采用此种表示方式便给出具体的实现算法,它据说神奇之处在于词向量的加减法可以实现意想不到的效果,比如挖掘出词之间的语义逻辑关系。

深度学习活跃者Yoshua Bengio教授,与Geoff Hinton和Yann LeCun教授共同缔造了2006年始的深度学习复兴,他在美国东部时间2014年2月27日下午一点到两点,在著名社区Reddit的机器学习板块参加了“Ask Me AnyThing”活动,预感深度学习肯定会在自然语言处理方面产生非常大的影响。

Yoshua Bengio教授:实际上影响已经产生了,跟我在NIPS 2000年和JMLR 2003年的论文有关:用一个学习出来的属性向量来表示单词,从而能够对自然语言文本中单词序列的概率分布建模。目前的工作主要在于学习单词、短语和句子序列的概率分布。可以看一看Richard Socher的工作,非常的深入。也可以看看Tomas Mikolov的工作,他用递归神经网络击败了语言模型的世界纪录,他研究出来的分布,在一定程度上揭示了单词之间某些非线性的关系。例如,如果你用“意大利”这个单词的属性向量来减去“罗马”的属性向量,再加上“巴黎”的属性向量,你能得到“法国”这个单词或者相近的意思。类似的,用“国王”减去“男人”加上“女人”,能得到“王后”。这非常令人振奋,因为他的模型并没有刻意的设计来做这么一件事 [1] 

Word2vec简介

Word2vec 是 Google 在 2013 年开源的一款将词表征为实数值向量的高效工具,利用深度学习思想,通过训练,把对文本内容的处理简化为 K 维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。Word2vec输出的词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分析等等。如果换个思路,把词当做特征,那么Word2vec就可以把特征映射到 K 维向量空间,可以为文本数据寻求更加深层次的特征表示。

Word2vec 使用的是 Distributed representation 的词向量表示方式。Distributed representation 最早由 Hinton在 1986 年提出[4],基本思想是通过训练将每个词映射成 K 维实数向量(K一般为模型中的超参数),通过词之间的距离(比如 cosine 相似度、欧氏距离等)来判断它们之间的语义相似度。采用一个三层的神经网络“输入层-隐层-输出层”。有个核心的技术是根据词频用Huffman编码,使得所有词频相似的词隐藏层激活的内容基本一致,出现频率越高的词语,他们激活的隐藏层数目越少,这样有效的降低了计算的复杂度。而Word2vec大受欢迎的一个原因正是其高效性,Mikolov在论文[2]中指出,一个优化的单机版本一天可训练上千亿词。

这个三层神经网络本身是对语言模型进行建模,但也同时获得一种单词在向量空间上的表示,而这个副作用才是Word2vec的真正目标。

潜在语义分析(Latent Semantic Index, LSI)、潜在狄立克雷分配(Latent Dirichlet AllocationLDA的经典过程相比,Word2vec利用了词的上下文,语义信息更加地丰富。

Word2Vec例一代码及结果

这里结合spark mllib包提供的word2vec算法来简单实现细节的剖析:

输入数据text7(spark中默认滑动窗口window=5)

this is this is good this is this is this is ok this is this is bad

示例代码:

import org.apache.spark._

import org.apache.spark.rdd._

import org.apache.spark.SparkContext._

import org.apache.spark.mllib.feature.{Word2Vec, Word2VecModel}

object wordtovec {

  def main(args: Array[String]){

      System.setProperty("hadoop.home.dir", "E:\\software\\hadoop-2.5.2");

      val conf=new SparkConf().setAppName("word2vec")

      val sc = new SparkContext(conf)

      val input = sc.textFile("data/mllib/text7").map(line=>line.split(' ').toSeq)

      val word2vec = new Word2Vec().setMinCount(1).setVectorSize(5).setNumIterations(100).setSeed(1L)

      val model = word2vec.fit(input)

      val synonyms = model.findSynonyms("ok", 3)

      model.getVectors("good").foreach(p=>print(p))

      println()

      for((synonym, cosineSimilarity)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有