word2vec研究如何将词用向量表示,使用的两个重要模型——CBOW模型(Continuous Bag-of-Words Model)和Skip-gram模型(Continuous Skip-gram Model),CBOW通过上下文预测中间词,Skip-gram对中间词预测它的上下文,本文只对CBOW进行介绍

词的向量表示

  • one-hot:语料库的词项个数为m,则one-hot表示的长度为m,只有一个位置是1,其余都是0
  • distributed representation:假设每个词项有d个特征,d远小于m,用d维向量表示每个词项

CBOW

CBOW 是 word2vec 中使用的浅层神经网络模型,语料库中词项和词项的上下文做为样本,Sample(Context(x), x),对模型的参数进行训练,得到每个词项的向量表示

词的上下文 Context(x)

一个词出现的概率只与它前后固定数目(n)的词相关,n的取值与模型参数有关,可以参考:

n 模型参数数量
1
2
3
4

例子:我很爱学信息检索

如果n=2,则的上下文Context(学)={ 很,爱,信息,检索 } 4 个词组成

模型结构

输入层

上下文词项的one-hot

隐藏层

对于一个样本Sample(Context(x), x),将的one-hot向量与表示矩阵相乘,得到的当前表示向量,,将做为隐藏层的输出,是一个1*d的向量。

输出层

隐藏层得到的1d向量与权重矩阵相乘,得到1m的向量,通过softmax处理后得到一个1*m的向量,为中间词出现的概率,概率最大的index指向的词项即为预测出的中间词,与真实值的one-hot向量 做比较,根据误差更新权重矩阵。

损失函数

梯度下降更新W和,训练完毕后,W矩阵即为词向量矩阵,用一个词项的one-hot去乘W矩阵即得到这个词项的词向量

结构分析

参数数量:2*d*m个,d为词向量长度,m为词项个数,在语料库中m的值是很大的,对于一个样本(Context(x), x),只有一个是正确的结果,其余的m-1个全是错误的结果,每次都对大量的错误结果进行权重更新是很耗时的

改进

思路:减少网络的参数个数和每次要更新的参数个数

负采样策略

对于词 w 的上下文Context(w)来预测w,Context(x)与x构成了一个正样本,Context(x)与别的词项就构成负样本,每次训练仅选择一小部分的负样本,对他们连接的权重进行更新,减少了每次训练需要更新的权重数量,应该选择多少,如何进行选择呢?大体思路是让出现频率高的词项更大概率被选做负样本。

采样率公式:

len(w)表示w应该被保留作为负样本的概率,counter(w)代表w在语料库中出现的次数,指数3/4是经验值

Hierarchical softmax的CBOW

分层softmax的CBOW将输出层改为树形结构

建立哈夫曼树,使高频词项更靠近根节点,规定左孩子为负类,右孩子为正类,经过一个非叶子结点做了一次二分类,设隐藏层的输出为,经过每个非叶子结点被分到正类的概率为:

分到负类概率为:,每个非叶子结点上都有一个待定参数向量:,可以计算出到达值为1的结点x的概率:

目标函数: 最大化,通过梯度上升(或者求 的最小值,用梯度下降)更新 的值,表示矩阵是最终得到的词向量矩阵。

参考文献

Efficient Estimation of Word Representations in Vector Space

word2vec的数学原理

word2vec的负采样

最新文章

  1. 应用商店后台MIS的一些思考
  2. Gradle学习系列之二——创建Task的多种方法
  3. centos 输入密码正确进不去系统
  4. 【转】WMI使用的WIN32_类库名
  5. 由多次使用Statement实例引起的Result set already closed异常的解决方案
  6. thttpd的定时器
  7. ajaxfileUpload ajax 上传图片使用
  8. Python:列表
  9. 点菜系统 pickview的简单实用
  10. 实现TOLock过程中的一处多线程bug
  11. C# WinForm程序退出的方法比较
  12. bzoj1094[ZJOI2007]粒子运动 计算几何
  13. 网络编程-day3
  14. Https 单向验证 双向验证
  15. TCP端口检测工具
  16. useradd语法2
  17. SoapUI 利用SoapUI进行简单的接口并发测试
  18. [SDOI2009]Bill的挑战——全网唯一 一篇容斥题解
  19. logging模块配置笔记
  20. 在ubuntu中添加新硬盘

热门文章

  1. MCMC学习
  2. Monkey通过安装包获取包名
  3. ac_查看每个用户登陆服务器所使用的时间
  4. 二十一、NFS服务
  5. C#面向对象---对象成员、方法加载、引用类库
  6. C++ 类中使用dllimport和dllexport
  7. Oracle中的 timestamp 和 timestamp with time zone, timestamp with local time zone
  8. iOS 去掉导航栏最下面线的方法
  9. 105)PHP,递归删除目录
  10. 吴裕雄--天生自然 JAVASCRIPT开发学习:JavaScript 对象 实例