文本深度表示模型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

详细使用方法见 官网

模型分析

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

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条连边,每条边上也会有权值。

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

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

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

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

参考

官方资料

Word2Vec Homepage

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

理论资料

Deep Learning实战之word2vec

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

word2vec傻瓜剖析

实践资料

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

分词工具ANSJ(实例)

Word2vec在事件挖掘中的调研

文本深度表示模型Word2Vec 简介 Word2vec 是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效工具, 其利用深度学习的思想,可以通过训练,把对文本内容的处理简相关推荐

  1. 文本深度表示模型Word2Vec

    文本深度表示模型Word2Vec 简介 Word2vec 是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效工具, 其利用深度学习的思想,可以通过训练,把对文本内容的处理简化为 ...

  2. NLP中面向文本表示的模型梳理

    引言 语言表示是将自然语言表示为计算机或者模型能够处理的数据特征,是解决例如情感分析.命名实体识别.机器翻译.文本生成等这些高级任务的基础.本文作为NLP基础知识的入门,梳理了相关文本表征的模型与方法 ...

  3. CVPR 2022 中科院、腾讯提出LAS-AT,利用“可学习攻击策略”进行“对抗训练”

    关注公众号,发现CV技术之美 ▊ 1 引言 由中科院,腾讯AI实验室以及香港中文大学联合出品的硬核对抗训练的新作LAS-AT发表于CVPR2022.对抗训练被认为是抵御对抗攻击最有效的防御方法,它通常 ...

  4. 文本深度表示模型——word2vecdoc2vec词向量模型(转)

    from: https://www.cnblogs.com/maybe2030/p/5427148.html 阅读目录 1. 词向量 2.Distributed representation词向量表示 ...

  5. 文本深度表示模型—word2vecdoc2vec词向量模型

    来源:http://www.dataguru.cn/article-9478-1.html 深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推 ...

  6. 《The Frontiers of Memory and Attention in Deep Learning》 图文结合详解深度学习Memory Attention

    原文地址: https://yq.aliyun.com/articles/65356?spm=5176.100238.goodcont.2.Sy8Xe6 深度学习中的记忆前沿和吸引点 作者 Steph ...

  7. Word2Vec 简介

    Word2Vec 简介 Word2vec是一个用于处理文本的双层神经网络.它的输入是文本语料,输出则是一组向量:该语料中词语的特征向量.虽然Word2vec并不是深度神经网络,但它可以将文本转换为深度 ...

  8. 《拆解 XLNet 模型设计,回顾语言表征学习的思想演进》

    深度解析 XLNet 作者: 追一科技 AI Lab 研究员 Tony 在预训练语言模型 BERT 对自然语言处理的冲击还未平息时,CMU 和 Google 的研究员又放出了一个猛料:在 20 多项任 ...

  9. DL之DNN:基于自定义数据集利用深度神经网络(输入层(10个unit)→2个隐藏层(10个unit)→输出层1个unit)实现回归预测实现代码

    DL之DNN:基于自定义数据集利用深度神经网络(输入层(10个unit)→2个隐藏层(10个unit)→输出层1个unit)实现回归预测实现代码 目录 基于自定义数据集利用深度神经网络(输入层(10个 ...

最新文章

  1. 百度地图拖动标注后获取坐标
  2. Catlike Coding网站文章解析 -- 2.Procedural Grid
  3. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波17 - 锐化高通滤波器 - 梯度图像(罗伯特,Sobel算子)
  4. MySQL 添加列,修改列,删除列 的SQL写法
  5. ffmpeg在windows下的编译
  6. 安庆机器人编程选_安庆市首届中小学机器人创客竞赛举行 460名选手比智慧拼创新 科技感满满!...
  7. Python添加模块路径
  8. mysql 事务 隔离级别_MySQL的四种事务隔离级别
  9. 【干货】如何判断 Sql 注入点
  10. completable java_java8 CompletableFuture异步编程
  11. ZeroC IceBox介绍及demo构建
  12. Linux命令使用练习三
  13. 谁会成为中国互联网下一代英雄
  14. 第6章 为用户编程:终端控制和信号
  15. cass坡度土方计算案例_四面放坡且坡度不同的工程土方,CASS怎么算?
  16. CSDN日报20170224——《程序员该用哪种姿势来理财》
  17. 计算机excel表格教程高级筛选6,Excel高级筛选怎么用 Excel中高级筛选的使用详细教程...
  18. php curl post 很慢,php的curl函数模拟post数据提交,首次速度非常慢的处理办法 | 学步园...
  19. WinCC 7.3 + SQL server(杂)
  20. 淘宝线上线下“出淘”欲打造零售业航母

热门文章

  1. SQLServer服务的运行与登录
  2. java怎么修改会员信息_JavaWeb用户信息管理系统-修改用户操作的实现
  3. carplay是否可以用安卓系统_是否可以仅用键盘来操作Windows 10系统和Windows 10应用?...
  4. 哈工大操作系统环境配置
  5. 华为手环怎么没有上鸿蒙,不再是大号手环!华为鸿蒙手表来了:要和苹果抢生态?...
  6. 8. Leetcode 26. 删除有序数组中的重复项 (数组-同向双指针-快慢指针)
  7. ubantu使用apt安装时出现: xxx is not found 的解决方法
  8. 机器学习笔记:牛顿方法
  9. zip与zip(*)
  10. 文巾解题 10. 正则表达式匹配