文本深度表示工具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
Allocation,LDA)的经典过程相比,Word2vec利用了词的上下文,语义信息更加地丰富。

样例实验

在服务器上部署有Word2Vec系统,可以试试玩一玩

```

cd /home/liwei/word2vec/trunk

./demo-analogy.sh # Interesting properties of the word vectors (try apple red
mango / Paris France Italy)

./demo-phrases.sh # vector representation of larger pieces of text using the
word2phrase tool

./demo-phrase-accuracy.sh # measure quality of the word vectors

./demo-classes.sh # Word clustering

./distance GoogleNews-vectors-negative300.bin # Pre-trained word and phrase
vectors

./distance freebase-vectors-skipgram1000-en.bin # Pre-trained entity vectors
with Freebase naming

```

详细使用方法见 https://code.google.com/p/word2vec

模型分析

传统的统计语言模型是表示语言基本单位(一般为句子)的概率分布函数,这个概率分布也就是该语言的生成模型。一般语言模型可以使用各个词语条件概率的形式表示:

p(s)=p(w_1^T )=p(w_1,w_2,…,w_T )=∏_t p(w_t |context)

Word2vec采用的是层次化Log-Bilinear语言模型,其中一种是CBOW(Continuous
Bag-of-Words Model)模型,由上下文预测下一个词为w_t的公式为:

p(w_t |context)=p(w_t |w_(t-k),w_(t-k+1),…,w_(t-1),w_(t+1),…,w_(t+k-1),w_(t+k))

CBOW的计算可以用 层次Softmax算法 ,这种算法结合了Huffman编码,每个词 w
都可以从树的根结点root沿着唯一一条路径被访问到,其路径也就形成了其编码code。假设 n(w, j)为这条路径上的第 j 个结点,且
L(w)为这条路径的长度, j 从 1 开始编码,即 n(w, 1)=root,n(w, L(w)) = w。对于第 j 个结点,层次 Softmax
定义的Label 为 1 - code[j]。

取一个适当大小的窗口当做语境,输入层读入窗口内的词,将它们的向量(K维,初始随机)加和在一起,形成隐藏层K个节点。输出层是一个巨大的二叉树,叶节点代表语料里所有的词(语料含有V个独立的词,则二叉树有|V|个叶节点)。而这整颗二叉树构建的算法就是Huffman树。这样,对于叶节点的每一个词,就会有一个全局唯一的编码,形如"010011",不妨记左子树为1,右子树为0。接下来,隐层的每一个节点都会跟二叉树的内节点有连边,于是对于二叉树的每一个内节点都会有K条连边,每条边上也会有权值。

对于语料库中的某个词wt,对应着二叉树的某个叶子节点,因此它必然有一个二进制编码,如"010011"。在训练阶段,当给定上下文,要预测后面的词wt的时候,我们就从二叉树的根节点开始遍历,这里的目标就是预测这个词的二进制编号的每一位。即对于给定的上下文,我们的目标是使得预测词的二进制编码概率最大。形象地说,我们希望在根节点,词向量和与根节点相连经过logistic计算得到bit=1的概率尽量接近0,在第二层,希望其bit=1的概率尽量接近1,这么一直下去,我们把一路上计算得到的概率相乘,即得到目标词wt在当前网络下的概率P(wt),那么对于当前这个sample的残差就是1-P(w_t),于是就可以使用梯度下降法训练这个网络得到所有的参数值了。显而易见,按照目标词的二进制编码计算到最后的概率值就是归一化的。

Hierarchical
Softmax用Huffman编码构造二叉树,其实借助了分类问题中,使用一连串二分类近似多分类的思想。例如我们是把所有的词都作为输出,那么“桔子”、“汽车”都是混在一起。给定wt的上下文,先让模型判断wt是不是名词,再判断是不是食物名,再判断是不是水果,再判断是不是“桔子”。

但是在训练过程中,模型会赋予这些抽象的中间结点一个合适的向量,这个向量代表了它对应的所有子结点。因为真正的单词公用了这些抽象结点的向量,所以Hierarchical
Softmax方法和原始问题并不是等价的,但是这种近似并不会显著带来性能上的损失同时又使得模型的求解规模显著上升。

没有使用这种二叉树,而是直接从隐层直接计算每一个输出的概率——即传统的Softmax,就需要对|V|中的每一个词都算一遍,这个过程时间复杂度是O(|V|)的。而使用了二叉树(如Word2vec中的Huffman树),其时间复杂度就降到了O(log2(|V|)),速度大大地加快了。

参考


官方资料

Word2Vec Homepage

https://code.google.com/p/word2vec/

Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient Estimation
of Word Representations in Vector Space. In Proceedings of Workshop at ICLR,
2013.

http://arxiv.org/pdf/1301.3781.pdf

理论资料

Deep Learning实战之word2vec

http://techblog.youdao.com/?p=915#LinkTarget_699

Deep Learning in NLP (一)词向量和语言模型

http://licstar.net/archives/328

word2vec傻瓜剖析

http://xiaoquanzi.net/?p=156

实践资料

利用中文数据跑Google开源项目word2vec

http://www.cnblogs.com/hebin/p/3507609.html

分词工具ANSJ

https://github.com/ansjsun/ansj_seg

http://blog.csdn.net/zhaoxinfan/article/details/10403917

Word2vec在事件挖掘中的调研

http://blog.csdn.net/shuishiman/article/details/20769437#1536434-tsina-1-26292-66a1f5d8f89e9ad52626f6f40fdeadaa

使用word2vec训练的模型,能够很好的语义表述query,不需要query之间一定有字面交集。如:“特警15秒钟内开枪击倒5暴徒”和“车站事件"和”3.1昆明事件"有很强的语义关联,这是
传统的 tf-idf方法是达不到的。

而在医疗项目中,如诊断报告和检查报告,短文本很常见,因此word2vec可能会达到很好的语义表征效果

如果能够结合口腔医院的语料,得到例如这样的词语相似度结果,甚至把传统的TF/IDF特征表示映射到新的向量空间中,将是很有意义的

http://cikuapi.com/index.php?content=%E7%89%99%E5%91%A8%E7%82%8E

时间: 2024-10-03 23:15:35

文本深度表示工具Word2Vec的相关文章

文本深度表示模型Word2Vec

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

重磅︱文本挖掘深度学习之word2vec的R语言实现

笔者寄语:2013年末,Google发布的 word2vec工具引起了一帮人的热捧,大家几乎都认为它是深度学习在自然语言领域的一项了不起的应用,各种欢呼"深度学习在自然语言领域开始发力 了". 基于word2vec现在还出现了doc2vec,word2vec相比传统,考虑单词上下文的语义:但是doc2vec不仅考虑了单词上下文的语义,还考虑了单词在段落中的顺序. 如果想要了解word2vec的实现原理,应该读一读官网后面的三篇参考文献.显然,最主要的应该是这篇: Distributed

批量大文本筛选过滤工具开发记录

批量大文本筛选过滤工具开发记录 本周花了两三天的时间做了一个大文本数据筛选工具,主要是针对excel打开很慢或者无法打开的几百兆乃至几G的csv.txt文件,提供常规的数据筛选.统计和输出功能.这个大文本筛序需求对生产中的数据挑选和数据分析来说是比较常见的.本文就开发的过程简单记录如下: 使用什么开发语言? 怎样保证用户体验? 如何维护优化? 使用什么开发语言? 这问得有点像是废话.我很熟悉Python,它的开发速度足够的快,又足够灵活,特别是它强大的eval函数可以直接执行字符串代码,字符串代

(转)Matlab深度学习工具试玩手册一:基本操作与迁移学习

原贴博客:https://blog.csdn.net/zfrycw/article/details/80633979 目录 前言 一.利用现成网络进行分类 二.构建简单的分类网络 三.迁移学习 前言 Matlab从2016a版本开始提供了深度学习的相关工具,可以很方便地构建自己的网络或下载一些现成的经典网络(如AlexNet,GoogLeNet和VGG系列)进行迁移学习.作为一个初学者,我粗浅地认为,对于深度学习,我们实际的操作步骤可以分三大块:数据集(包括载入图片,制作训练集验证集,送入网络前

[深度学习工具]·极简安装Dlib人脸识别库

[深度学习工具]·极简安装Dlib人脸识别库 Dlib介绍 Dlib是一个现代化的C ++工具箱,其中包含用于在C ++中创建复杂软件以解决实际问题的机器学习算法和工具.它广泛应用于工业界和学术界,包括机器人,嵌入式设备,移动电话和大型高性能计算环境.Dlib的开源许可证 允许您在任何应用程序中免费使用它.Dlib有很长的时间,包含很多模块,近几年作者主要关注在机器学习.深度学习.图像处理等模块的开发. 安装 此博文针对Windows10安装,其他平台可以仿照这个步骤来安装 安装Minicond

linux文本常用shell工具

下面将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行:如果有更为复杂的任务需求,还是考虑python吧: find 文件查找 查找txt和pdf文件 [indent]  find . \( -name "*.txt" -o -name "*.pdf" \) -

几个常用文本处理小工具tr ,wc,cut,sort,uniq用法详解

几个文本处理的小工具:tr ,wc,cut,sort,uniq 1. tr命令可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大. 语法:tr 选项  SET1 SET2 -c或--complerment:取代所有不属于第一字符集的字符(就是补集): -d或--delete:删除所有属于第一字符集的字符: -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示: -t或--truncate-set1:先删除第

深度学习工具调研

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 深度学习(Deep Learning)是机器学习的一个进展迅速的分支.Google下围棋的AlphaGo就采用了深度学习算法,从而让机器学习算法广受关注.这里是我对深度学习常用库的一个调研总结. 基于Python的常用方案: Theano + Pylearn2: 大部分基于Python本身.在学术界使用广泛,有很多实验性的新算法.但性能和商业支持方面都有问题. Caffe:底层用C++实现.算法

7种深度学习工具介绍

1)TensorFlow TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理. –Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从图像的一端流动到另一端的计算过程. –TensorFlow是将复杂的数据结构,传输至人工智能神经网中进行分析和处理过程的系统. TensorFlow表达了高层次的机器学习计算,可被用于语音识别或图像识别等多项机器深度学习领域. –TensorFl