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

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

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

分类: 机器学习

文本深度表示模型Word2Vec相关推荐

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

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

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

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

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

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

  4. 【NLP】相当全面:各种深度学习模型在文本分类任务上的应用

    论文标题:Deep Learning Based Text Classification:A Comprehensive Review 论文链接:https://arxiv.org/pdf/2004. ...

  5. (翻译)传统和深度学习模型在文本分类中的应用综述与基准

    原文:Overview and benchmark of traditional and deep learning models in text classification 本文是我在试验Twit ...

  6. 【文本分类】常见文本分类深度学习模型汇总

    在深度学习被广泛用于NLP之前,文本分类任务的常见pipeline为: (1)人工/半自动特征抽取:包括one-hot编码.count features.TF-IDF.词性/句法信息等等 (2)分类器 ...

  7. 文献阅读:深度学习模型利用生物医学文本上下文关系进行命名实体识别

    文献阅读:利用深度学习模型在生物医学文本的上下文关系中进行命名实体识别 题目 1 背景 2 材料和方法 2.1 GRAM-CNN方法 2.1.1 嵌入方法 2.1.2 GRAM-CNN 2.1.3 C ...

  8. 使用深度学习模型在 Java 中执行文本情感分析

    积极的? 消极的? 中性的? 使用斯坦福 CoreNLP 组件以及几行代码便可对句子进行分析. 本文介绍如何使用集成到斯坦福 CoreNLP(一个用于自然语言处理的开源库)中的情感工具在 Java 中 ...

  9. (二)基于文本的QA问答系统——深度检索模型概述

    深度检索模型 概述 该部分用于基于上下文信息实现语境对称检索和语境非对称检索. 名词解释 语境检索semantic search指的是结合上下文语境信息的检索. 关于对称检索和非对称检索在文章SGPT ...

最新文章

  1. 深思:外卖背后的人工智能算法揭秘
  2. 访问HTTP网址的两种方式
  3. ZServer4D开源项目
  4. python 分类变量转因子变量_python – 将分类变量的Pandas DataFrame转换为具有计数和比例的MultiIndex...
  5. EC笔记:第二部分:11:在operator=中处理“自我赋值”
  6. OpenMP 线程互斥锁
  7. python int函数详解,python int()函数
  8. 2000以内最好的无人机_全球军用无人机排行榜之国产翔龙无人机
  9. SQLite、MySQL和PostgreSQL 三种关系数据库比较
  10. 记录Yii2代码调试中出现的两个问题(截图展示)
  11. GridView控件常见问题及处理方法
  12. 渗透工具—反制爬虫之Burp Suite RCE
  13. OSG 实现跟随节点的相机(转)
  14. JSTL-格式标签库
  15. 读书篇:《细说PHP》一、简介
  16. 电源压敏电阻的计算选择
  17. OneNote PC端同步时遇到0×80004005
  18. itunes显示无法更新服务器失败怎么办啊,iTunes更新时出错怎么办?iTunes更新时出错的解决方法...
  19. 传统医美身处风口浪尖,互联网医美如何拯救?
  20. 我的申请已经通过审核,你想成为阿里云 MVP 吗?

热门文章

  1. linux怎么增加cpu负载,Linux下的CPU平均负载
  2. arm开发板上电设置静态ip_与X86/Arm三分天下,RISCV还需几步?
  3. linux内核kfifo(一)
  4. leetcode算法题--只有两个键的键盘
  5. hashMap死循环
  6. 爬虫进阶教程:极验(GEETEST)验证码破解教程
  7. Linux查看用户所属用户组
  8. Python高级网络编程系列之第一篇
  9. laravel判断HTTP请求是否ajax
  10. 精通CSS+DIV基础总结(三)