词向量工具word2vec的学习

标签: 程序开发 自然语言处理 | 发表时间:2017-02-13 19:37 | 作者:标点符
出处:https://www.biaodianfu.com

什么是word2vec?

word2vec是Google在2013年开源的一款将词表征为实数值向量(word vector)的高效工具,采用的模型有CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和Skip-Gram两种。

word2vec通过训练,可以把对文本内容的处理简化为K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。因此,word2vec输出的词向量可以被用来做很多NLP相关的工作,比如聚类、找同义词、词性分析等等。Word2vec的应用不止于解析自然语句。它还可以用于基因组、代码、点赞、播放列表、社交媒体图像等其他语言或符号序列,同样能够有效识别其中存在的模式。为什么呢?因为这些数据都是与词语相似的离散状态,而我们的目的只是求取这些状态之间的转移概率,即它们共同出现的可能性。所以gene2vec、like2vec和follower2vec都是可行的。

而word2vec被人广为传颂的地方是其向量的加法组合运算(Additive Compositionality),官网上的例子是:vector(‘Paris’) -vector(‘France’) + vector(‘Italy’)≈vector(‘Rome’),vector(‘king’) -vector(‘man’) + vector(‘woman’)≈ vector(‘queen’)。但这个多少有点被过度炒作了,很多其他降维或主题模型在一定程度也能达到类似效果,而且word2vec也只是少量的例子完美符合这种加减法操作,并不是所有的case都满足。

word2vec一般被外界认为是一个Deep Learning(深度学习)的模型,究其原因,可能和word2vec的作者Tomas Mikolov的Deep Learning背景以及word2vec是一种神经网络模型相关,但我们谨慎认为该模型层次较浅,严格来说还不能算是深层模型。当然如果word2vec上层再套一层与具体应用相关的输出层,比如Softmax,此时更像是一个深层模型。Word2vec是一个用于处理文本的双层神经网络。它的输入是文本语料,输出则是一组向量:该语料中词语的特征向量。虽然Word2vec并不是深度神经网络,但它可以将文本转换为深度神经网络能够理解的数值形式。Word2vec衡量词的余弦相似性,无相似性表示为90度角,而相似度为1的完全相似则表示为0度角,即完全重合。

word2vec是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。word2vec大受欢迎的另一个原因是其高效性,Mikolov在论文中指出一个优化的单机版本一天可训练上千亿词。

什么是词向量?

自然语言理解的问题要转化为机器学习的问题,第一步肯定是要找一种方法把这些符号数学化。词向量就是用来将语言中的词进行数学化的一种方式,顾名思义,词向量就是把一个词表示成一个向量。主要有两种表示方式:

One-Hot Representation

NLP相关任务中最常见的第一步是创建一个词表库并把每个词顺序编号。这实际就是词表示方法中的One-hot Representation,这种方法把每个词顺序编号,每个词就是一个很长的向量,向量的维度等于词表大小,只有对应位置上的数字为1,其他都为0。当然在实际应用中,一般采用稀疏编码存储,主要采用词的编号。举个例子:

  • “话筒”表示为 [0 0 0 1 00 0 0 0 0 0 0 0 0 0 0 …]
  • “麦克”表示为 [0 0 0 0 00 0 0 1 0 0 0 0 0 0 0 …]

这种 One-hotRepresentation 如果采用稀疏方式存储,会是非常的简洁:也就是给每个词分配一个数字 ID。比如刚才的例子中,话筒记为 3,麦克记为 8(假设从 0 开始记)。如果要编程实现的话,用 Hash 表给每个词分配一个编号就可以了。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。这种表示方法一个最大的问题是无法捕捉词与词之间的相似度,就算是近义词也无法从词向量中看出任何关系。此外这种表示方法还容易发生维数灾难,尤其是在Deep Learning相关的一些应用中。

Distributed Representation

Distributed representation 最早是 Hinton 在 1986 年的论文《Learning distributed representations of concepts》中提出的。其基本思想是通过训练将每个词映射成 K维实数向量(K一般为模型中的超参数),通过词之间的距离(比如cosine相似度、欧氏距离等)来判断它们之间的语义相似度。虽然这篇文章没有说要将词做 Distributed representation,但至少这种先进的思想在那个时候就在人们的心中埋下了火种,到 2000 年之后开始逐渐被人重视。Distributed representation 用来表示词,通常被称为“Word Representation”或“Word Embedding”,中文俗称“词向量”。

Distributed representation 最大的贡献就是让相关或者相似的词,在距离上更接近了。向量的距离可以用最传统的欧氏距离来衡量,也可以用余弦夹角来衡量。用这种方式表示的向量,“麦克”和“话筒”的距离会远远小于“麦克”和“天气”。可能理想情况下“麦克”和“话筒”的表示应该是完全一样的,但是由于有些人会把英文名“迈克”也写成“麦克”,导致“麦克”一词带上了一些人名的语义,因此不会和“话筒”完全一致。word2vec使用的就是这种Distributed representation的词向量表示方式。

word2vec的模型训练

Word2vec与自动编码器相似,它将每个词编码为向量,但Word2vec不会像受限玻尔兹曼机那样通过重构输入的词语来定型,而是根据输入语料中相邻的其他词来进行每个词的定型。具体的方式有两种,一种是用上下文预测目标词(连续词袋法,简称CBOW),另一种则是用一个词来预测一段目标上下文,称为skip-gram方法。这两种方法都利用人工神经网络作为它们的分类算法。

  • CBOW是Continuous Bag-of-Words Model的缩写,是一种与前向NNLM类似的模型,不同点在于CBOW去掉了最耗时的非线性隐层且所有词共享隐层。如上图所示。可以看出,CBOW模型是预测P( w t| w t-k, w t-(k-1)…, w t-1 ,w t+1 ,w t+2…, w t+k)。
  • Skip-Gram模型的图与CBOW正好方向相反,从图中看应该Skip-Gram应该预测概率p( w i| w t),其中−≤≤+且≠, c是决定上下文窗口大小的常数, c越大则需要考虑的pair就越多,一般能够带来更精确的结果,但是训练时间也会增加。

开源代码:

除了google自己的word2vec工具,各位对词向量感兴趣的牛人们也相继编写了各自不同的版本。其中比较好用的是Python Gensim主题模型包中的word2vec,通过阅读其源码python版本只实现了skip-gram模型,并且只实现了通过分层softmax方法对其训练,并没有使用negative sampling。

参考资料:

The post 词向量工具word2vec的学习 appeared first on 标点符.

相关 [向量 工具 word2vec] 推荐:

词向量工具word2vec的学习

- - 标点符
word2vec是Google在2013年开源的一款将词表征为实数值向量(word vector)的高效工具,采用的模型有CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和Skip-Gram两种. word2vec通过训练,可以把对文本内容的处理简化为K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度.

Word2Vec

- - Yonglong.Zhou
Word2Vec核心包括四个组组件,Context Builder、Input Vectors、Output Vectors和Parameter Learner. Context Builder决定是了是采用CBOW模型还是Skip-Gram模型,一般采用Input Vectors作为最终的词向量输出结果,参数学习可以按照常规的反向传播算法,以及为了提升计算速度提出来的霍夫曼树softmax和负采样方法.

word2vec词向量训练及中文文本相似度计算 - CSDN博客

- -
本文是讲述如何使用word2vec的基础教程,文章比较基础,希望对你有所帮助. 参考:《Word2vec的核心架构及其应用 · 熊富林,邓怡豪,唐晓晟 · 北邮2015年》.           《Word2vec的工作原理及应用探究 · 周练 · 西安电子科技大学2014年》.           《Word2vec对中文词进行聚类的研究 · 郑文超,徐鹏 · 北京邮电大学2013年》.

Word2vec之情感语义分析实战(part3)--利用分布式词向量完成监督学习任务

- - CSDN博客推荐文章
这篇博客将基于前面一篇博客 Part2做进一步的探索与实战. demo代码与数据: 传送门. 前面我们训练了单词的语义理解模型. 如果我们深入研究就会发现,Part2中训练好的模型是由词汇表中单词的特征向量所组成的. 这些特征向量存储在叫做syn0的numpy数组中:. 很明显这个numpy数组大小为(16490,300)分别代表词汇表单词数目及每个单词对应的特征数.

使用Word2Vec/Doc2Vec对IMDB情感分析

- - 标点符
情感分析是一种常见的自然语言处理(NLP)方法的应用,特别是在以提取文本的情感内容为目标的分类方法中. 通过这种方式,情感分析可以被视为利用一些情感得分指标来量化定性数据的方法. 尽管情绪在很大程度上是主观的,但是情感量化分析已经有很多有用的实践,比如企业分析消费者对产品的反馈信息,或者检测在线评论中的差评信息.

Facebook词向量工具FastText

- - 标点符
fastText是Facebook于2016年开源的一个词向量计算和文本分类工具,在文本分类任务中,fastText(浅层网络)往往能取得和深度网络相媲美的精度,却在训练时间上比深度网络快许多数量级. 在标准的多核CPU上, 能够训练10亿词级别语料库的词向量在10分钟之内,能够分类有着30万多类别的50多万句子在1分钟之内.

深度学习word2vec笔记之应用篇

- - 我爱机器学习
1)该博文是Google专家以及多位博主所无私奉献的论文资料整理的. 2)本文仅供学术交流,非商用. 所以每一部分具体的参考资料并没有详细对应,更有些部分本来就是直接从其他博客复制过来的. 如果某部分不小心侵犯了大家的利益,还望海涵,并联系老衲删除或修改,直到相关人士满意为止. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢.

基于word2vec和Elasticsearch实现个性化搜索

- - GinoBeFunny
在 word2vec学习小记一文中我们曾经学习了word2vec这个工具,它基于神经网络语言模型并在其基础上进行优化,最终能获取词向量和语言模型. 在我们的商品搜索系统里,采用了word2vec的方式来计算用户向量和商品向量,并通过Elasticsearch的function_score评分机制和自定义的脚本插件来实现个性化搜索.

[转]词向量

- - 狮子座明仔知识集散场
本教程来自深度学习框架PaddlePaddle的入门引导. 我没有修改前面的理论知识部分,是在后面加入了自己的应用实例便于理解. 本教程源代码目录在 book/word2vec, 初次使用请参考PaddlePaddle 安装教程,更多内容请参考本教程的 视频课堂. 本章我们介绍词的向量表征,也称为word embedding.

Javascript向量图Lib–Raphaël

- winners - 酷壳 - CoolShell.cn
我们知道很多的Javascript的lib库了,比如:jQuery,YUI,Ext JS等等. 今天看到一个很牛X的lib叫Raphaël [ˈrafēəl],这是一个很小的JavaScript library,可以让在你的Web上整一些向量图,并且可以完成一些动画和图形变化,很强大. Raphaël使用的是  W3C 推荐的 SVG和VML 来创建图片.