继上次分享了经典统计语言模型,最近公众号中有很多做NLP朋友问到了关于word2vec的相关内容, 本文就在这里整理一下做以分享。 本文分为

  • 概括word2vec
  • 相关工作
  • 模型结构
  • Count-based方法 vs. Directly predict

几部分,暂时没有加实验章节,但其实感觉word2vec一文中实验还是做了很多工作的,希望大家有空最好还是看一下~


概括word2vec

要解决的问题: 在神经网络中学习将word映射成连续(高维)向量, 其实就是个词语特征求取。

特点:
1. 不同于之前的计算cooccurrence次数方法,减少计算量
2. 高效
3. 可以轻松将一个新句子/新词加入语料库

主要思想:神经网络语言模型可以用两步进行训练:1. 简单模型求取word vector; 在求取特征向量时,预测每个词周围的词作为cost 2. 在word vector之上搭建N-gram NNLM,以输出词语的概率为输出进行训练。


相关工作

在传统求取word的空间向量表征时, LSA 将词和文档映射到潜在语义空间,从而去除了原始向量空间中的一些“噪音”,但它无法保存词与词之间的linear regularities; LDA 是一个三层贝叶斯概率模型,包含词、主题和文档三层结构。文档到主题服从Dirichlet分布,主题到词服从多项式分布, 但是只要训练数据大了, 计算量就一下飚了。

基于神经网络的词语向量表征方法在[Y. Bengio, R. Ducharme, P. Vincent. A neural probabilistic language model, JMLR 2003]中就有提出, 名为NNLM, 它是一个前向网络, 同时学习词语表征和一个统计语言模型(后面具体讲)。

在Mikolov的硕士论文[1]和他在ICASSP 2009上发表的文章[2]中, 用一个单隐层网络训练词语表征, 然后将这个表征作为NNLM的输入进行训练。 Word2vec是训练词语表征工作的一个拓展。


模型结构

首先回顾NNLM,RNNLM,然后来看Word2Vec中提出的网络——CBOW,skip-gram Model。

1 . NNLM[3]

NNLM的目标是在一个NN里,求第t个词的概率, 即

其中f是这个神经网络, 包括 input,projection, hidden和output。将其分解为两个映射:C和g,C是word到word vector的特征映射(通过一个|V|*D的映射矩阵实现),也称作look-up table, g是以word特征为输入,输出|V|个词语概率的映射:

如下图所示:
输入: n个之前的word(其实是他们的在词库V中的index)
映射: 通过|V|*D的矩阵C映射到D维
隐层: 映射层连接大小为H的隐层
输出: 输出层大小为|V|,表示|V|个词语的概率

用parameter个数度量网络复杂度, 则这个网络的复杂度为:

O=N∗D+N∗D∗H+H∗VO = N*D + N*D*H + H*V

其中复杂度最高的部分为H*V, 但通常可以通过hierarchical softmax或binary化词库编码将|V|降至 log2Vlog_2V, 这样计算瓶颈就在于隐层 N∗D∗HN*D*H了。在word2vec中,为了避免隐层带来的高计算复杂度而去掉了隐层。

2 . RNNLM

RNN在语言模型上优于其他神经网络,因为不用像上面NNLM中的输入要定死前N个词的N。(具体RNN的结构我会在下篇中讲)简单地说, RNN就是一个隐层自我相连的网络, 隐层同时接收来自t时刻输入和t-1时刻的输出作为输入, 这使得RNN具有短期记忆能力, 所以RNNLM的复杂度为:

O=H∗H+H∗VO = H*H + H*V

同样地,其中 H∗VH*V也可以降至 log2Vlog_2V, 瓶颈就在于 H∗HH*H了。

由于复杂度最大的部分都在hidden layer, 而且我们的中级目标是提特征(而不是生成语言模型),文中就想能不能牺牲hidden layer的非线性部分, 从而高效训练。 这也是Word2vec中速度提升最多的部分。 这也就是一个Log linear model。所以本质上, word2vec并不是一个深度模型。文中提出了两种log linear model,如下面所述。

3 . Proposed Method 1 - Continuous Bag-of-Words(CBOW) Model

CBOW的网络结构和NNLM类似,变化:

  1. CBOW去掉了NNLM的非线性部分
  2. CBOW不考虑word之间的先后顺序, 一起放进bag,也就是在上面NNLM的projection层将映射后的结果求和/求平均(而非按照先后顺序连接起来)
  3. 输入不止用了历史词语,还用了未来词语。 即, 用t-n+1…t-1,t+1,…t+n-1的word作为输入,目标是正确分类得到第t个word。
    PS: 实验中得到的best n=4

CBOW的复杂度为:

O=N∗D+D∗log2VO = N*D + D*log_2V

CBOW结构图:

3 . Proposed Method 2 - Continuous Skip-gram Model

与CBOW相反,Continuous Skip-gram Model不利用上下文。 其输入为当前word,经过projection的特征提取去预测该word周围的c个词,其cost function为:

如下图所示。这里c增大有利于模型的完备性, 但过大的c可能造成很多无关词语相关联, 因此用随机采样方法,远的词少采, 近的多采。

比如定义最大周围距离为C,则对于每个词w(t),就选择距离为R=range(1,C), 选前后各R个词作为预测结果。
所以,Continuous Skip-gram Model的复杂度为:

O=2C∗(D+D∗log2V)O = 2C*(D + D*log_2V)

具体来说,最简单的情况下, P(wt+j|wt)P(w_{t+j}|w_t)的表达式可以为:

其中v和v’分别为输入和输出中的word特征向量。所以说, word2vec方法本质上是一个动态的逻辑回归。


Count-based方法 vs. Directly predict

最后我们看一下之前我们讲过的几个基于统计的传统语言模型与word2vec这种直接预测的方法的比较:

图片摘自Stanford CS244。


参考文献:

  1. NNLM: Y. Bengio, R. Ducharme, P. Vincent. A neural probabilistic language model, JMLR 2003
  2. 类似工作:T. Mikolov. Language Modeling for Speech Recognition in Czech, Masters thesis
  3. 类似工作:T. Mikolov, J. Kopecky´, L. Burget, O. Glembek and J. Cˇ ernocky´. Neural network based language models for higly inflective languages, In: Proc. ICASSP 2009.]
  4. 类似工作:Pennington J, Socher R, Manning C D. Glove: Global vectors for word representation[J]. Proceedings of the Empiricial Methods in Natural Language Processing (EMNLP 2014), 2014, 12.

word2vec——高效word特征求取相关推荐

  1. 2.文本预处理(分词,命名实体识别和词性标注,one-hot,word2vec,word embedding,文本数据分析,文本特征处理,文本数据增强)

    文章目录 1.1 认识文本预处理 文本预处理及其作用 文本预处理中包含的主要环节 文本处理的基本方法 文本张量表示方法 文本语料的数据分析 文本特征处理 数据增强方法 重要说明 1.2 文本处理的基本 ...

  2. NLP(词向量、word2vec和word embedding)

    最近在做一些文本处理相关的任务,虽然对于相关知识有所了解,而且根据相关开源代码也可以完成相应任务:但是具有有些细节,尤其是细节之间的相互关系,感觉有些模糊而似懂非懂,所以找到相关知识整理介绍,分享如下 ...

  3. word2vec和word embedding有什么区别?

    目录 〇.序 一.DeepNLP的核心关键:语言表示(Representation) 二.NLP词的表示方法类型 三.NLP语言模型 四.词的分布式表示 五.词嵌入( word embedding) ...

  4. 从多个Word文件中取值到Excel中,整理文件的神器,Word精灵V7.3

    Word精灵V7.3版,包含107个功能 工具网址:http://excelbbx.net/Word.htm 演示一个功能: 从多个Word文件中提取指定的值到Excel中,也可以理解为把多个Word ...

  5. pandas合并列-直方图-读取word文件-merge-读取nan行

    数据分析(2) 以下是工作中遇到问题时,检索到比较好的案例, 收集起来方便自己查看. 同时,希望也能给遇到相同问题的同学节约时间, 快速检索到解决方案. 1.pandas多列合并成一列 https:/ ...

  6. java取余位运算_java学习--高效的除模取余运算(n-1)hash

    没有测试过使用取余运算符和位运算符都做同一件事时的时间效率! 取余运算符% 如3除以2取余数 int a = a = a%; 结果为1 上面是传统的方式进行求余运算. 需要先将10进制转成2进制到内存 ...

  7. 爬取网页数据php,不到40行代码教你如何利用php高效快速的爬取10w+网页数据

    前几天看了一下swoole,今天找到了使用场景,就简单写一个demo swoole安装教程>>之前分享过,自己去公众号找一下 本文是 php利用swoole协程启动多个子进程模式,根据服务 ...

  8. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

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

    笔者寄语:2013年末,Google发布的 word2vec工具引起了一帮人的热捧,大家几乎都认为它是深度学习在自然语言领域的一项了不起的应用,各种欢呼"深度学习在自然语言领域开始发力 了& ...

最新文章

  1. 2星|《约见投资人》:A股上市公司软文集
  2. C#中方法的参数的四种类型(转)
  3. 计算机信息系统安全管理制度
  4. excel行列互换_Excel如何实现行列数据互换?其实除了复制粘贴,还能这样操作...
  5. 第三方登录如何给前台返回token_如何设计优雅的第三方账号登录?
  6. php mysql刷新表格_php读入mysql数据并以表格形式显示(表单实现无刷新提交)
  7. electron 5.0.3版本 改动的地方
  8. 测试ASP.NET 2.0中Gridview控件高级技巧
  9. setpairint,int 的用法
  10. 构建一个基本的Python迭代器
  11. mfc单文档中如何将view的基类由CView转为CScrollview
  12. [USACO13JAN]Painting the Fence【扫描线】
  13. 可能促使您决定创建自定义数据绑定控件的一些原因:
  14. Visual Studio Code编辑器的实用插件和工作中实用的技巧
  15. SPSS作业-检验两组数据有无显著
  16. Python CT图像预处理——nii格式读取、重采样、窗宽窗位设置
  17. 父级fixed_CSS-应用position:fixed时是否可以保持父元素的宽度?
  18. 年轻程序员如何快速成长
  19. 分享几个实用的Chrome扩展程序
  20. Linux 系统查看服务器SN序列号以及服务器型号

热门文章

  1. Text Preprocessing
  2. OmniGraffle 7 Mac 注册码(仅做记录)
  3. 要进入SAP行业作为顾问,是通过培训机构好,还是找资料自学好,还是直接入行从实习起步好
  4. java web 红头文件打印方案(含技术)
  5. Excel 日历控件的使用
  6. 通达信交易软件接口的标记是什么?
  7. ffmpeg h264转avi学习笔记
  8. 流放者柯南自建服务器 linux,流放者柯南自建服务器教程 怎么创建自己的服务器_游侠网...
  9. Python-古典问题-猴子生小猴子
  10. Oberon 操作系统:被忽略的珍宝