Glove全称Global Vectors for Word Representation,是目前应用范围最广的词向量,但是它基于通用语料训练,所以适合通用语言的自然处理任务,如果你的词库是领域特定词库,使用word2vec或者fasttext自己训练会比较好。

Glove模型可以简单概括为:基于通用语料,获得词频统计,学习词语表征

从语料中通过统计方式提取一个共现矩阵 X X X, X i j X_{ij} Xij​表示的是单词i和单词j出现在同一个窗口中的频率(单词i和j出现在同一个上下文中的频率)。

模型公式

J = ∑ i , j N f ( X i , j ) ( v i T v j + b i + b j − l o g ( X i , j ) ) J=\sum_{i,j}^{N}f(X_{i,j})(v_i^Tv_j+b_i+b_j-log(X_{i,j})) J=i,j∑N​f(Xi,j​)(viT​vj​+bi​+bj​−log(Xi,j​))
v i v_i vi​和 v j v_j vj​即为单词i和j的词向量, b i b_i bi​和 b j b_j bj​是两个标量(偏差项,不能省略,会破坏对称性,在推导过程中你会明白为什么不能省略)。 f ( x ) f(x) f(x)是一个权重函数, N N N表示词汇表大小(共现矩阵维度为 N ∗ N N*N N∗N)。Glove没有使用神经网络,从这一点来讲,是无监督的学习方式,但是在公式推导过程中,你会发现它也能被看作是监督学习的方式。

推导过程如下

定义 X i X_i Xi​为如下,你可以理解为出现单词i的频率之和。
X i = ∑ j = 1 N X i , j X_i=\sum_{j=1}^{N}X_{i,j} Xi​=j=1∑N​Xi,j​
即矩阵单词i那一行的和。

条件概率 P i , k P_{i,k} Pi,k​:
P i , k = X i , k X i P_{i,k} = \frac{X_{i,k}}{X_i} Pi,k​=Xi​Xi,k​​
表示单词k出现在单词i语境中的条件概率。

两个条件概率的比率:
r a t i o i , j , k = P i , k P j , k ratio_{i,j,k}=\frac{P_{i, k}}{P_{j,k}} ratioi,j,k​=Pj,k​Pi,k​​
作者认为这个比率蕴含语义信息:

r a t i o i , j , k ratio_{i,j,k} ratioi,j,k​ 单词j,k相关 单词j,k不相关
单词i,k相关 → 1 \rightarrow1 →1 → ∞ \rightarrow \infty →∞
单词i,k不相关 → 0 \rightarrow0 →0 → 1 \rightarrow1 →1

如果训练得到的词向量能通过某种函数记为 g ( v i , v j , v k ) g(v_i,v_j,v_k) g(vi​,vj​,vk​)计算出的 r a t i o i , j , k ratio_{i,j,k} ratioi,j,k​能有同样的规律,那么可以认为词向量已经编码了共现矩阵所蕴含的语义信息。

也就是说我们希望
r a t i o i , j , k = P i , k P j , k = g ( v i , v j , v k ) ratio_{i,j,k}=\frac{P_{i, k}}{P_{j,k}}=g(v_i,v_j,v_k) ratioi,j,k​=Pj,k​Pi,k​​=g(vi​,vj​,vk​)尽可能接近。

使用MSE作为代价函数
J = ∑ i , j , k N ( P i , k P j , k − g ( v i , v j , v k ) ) 2 J=\sum_{i,j,k}^{N}(\frac{P_{i,k}}{P_{j,k}}-g(v_i,v_j,v_k))^2 J=i,j,k∑N​(Pj,k​Pi,k​​−g(vi​,vj​,vk​))2

g ( v i , v j , v k ) g(v_i,v_j,v_k) g(vi​,vj​,vk​)有如下三方面的考虑:

  1. 考虑 v i v_i vi​和 v j v_j vj​之间的关系,应该有 v i − v j v_i-v_j vi​−vj​
  2. r a t i o i , j , k ratio_{i,j,k} ratioi,j,k​是标量,为了得到标量,可以使用内积 ( v i − v j ) T v k (v_i-v_j)^Tv_k (vi​−vj​)Tvk​
  3. 不能为负值,使用exp函数,得 g ( v i , v j , v k ) = e x p ( ( v i − v j ) T ) v k g(v_i,v_j,v_k)=exp((v_i-v_j)^T)v_k g(vi​,vj​,vk​)=exp((vi​−vj​)T)vk​

综上:
P i , k P j , k = e x p ( ( v i − v j ) T ) v k ) = e x p ( v i T v k − v j T v k ) \frac{P_{i, k}}{P_{j,k}}=exp((v_i-v_j)^T)v_k)=exp(v_i^Tv_k-v_j^Tv_k) Pj,k​Pi,k​​=exp((vi​−vj​)T)vk​)=exp(viT​vk​−vjT​vk​)

P i , k P j , k = e x p ( v i T v k ) e x p ( v j T v k ) \frac{P_{i,k}}{P_{j,k}}=\frac{exp(v_i^Tv_k)}{exp(v_j^Tv_k)} Pj,k​Pi,k​​=exp(vjT​vk​)exp(viT​vk​)​

实现这个优化目标,只需要拟合分子分母即可,而分子分母同型,我们可以简化为这一目标
P i , j = e x p ( v i T v j ) P_{i,j}=exp(v_i^Tv_j) Pi,j​=exp(viT​vj​)

两边取对数

l o g ( P i , j ) = v i T v j log(P_{i,j})=v_i^Tv_j log(Pi,j​)=viT​vj​
即 l o g ( X i , j ) − l o g ( x i ) = v i T v j log(X_i,j)-log(x_i)=v_i^Tv_j log(Xi​,j)−log(xi​)=viT​vj​,其中 l o g X i logX_i logXi​简化为 b i b_i bi​
代价函数简化为:
J = ∑ i , j N ( v i T v j − l o g ( P i , j ) ) 2 J=\sum_{i,j}^{N}(v_i^Tv_j-log(P_{i,j}))^2 J=i,j∑N​(viT​vj​−log(Pi,j​))2

这里存在一个问题, l o g ( P i , j ) = v i T v j log(P_{i,j})=v_i^Tv_j log(Pi,j​)=viT​vj​, l o g ( P j , i ) = v j T v i log(P_{j,i})=v_j^Tv_i log(Pj,i​)=vjT​vi​, l o g ( P i , j ) log(P_{i,j}) log(Pi,j​)等于 l o g ( P j , i ) log(P_{j,i}) log(Pj,i​)但是 v i T v j v_i^Tv_j viT​vj​不等于 v j T v i v_j^Tv_i vjT​vi​。这就是为什么要加上偏差项 v j v_j vj​。

J = ∑ i , j N ( v i T v j + b i + b j − l o g ( P i , j ) ) 2 J=\sum_{i,j}^{N}(v_i^Tv_j+b_i+b_j-log(P_{i,j}))^2 J=i,j∑N​(viT​vj​+bi​+bj​−log(Pi,j​))2

最后,每一个单词组合的权重应该不一样,所以引入权重函数
J = ∑ i , j N f ( X i , j ) ( v i T v j + b i + b j − l o g ( X i , j ) ) 2 J=\sum_{i,j}^{N}f(X_{i,j})(v_i^Tv_j+b_i+b_j-log(X_{i,j}))^2 J=i,j∑N​f(Xi,j​)(viT​vj​+bi​+bj​−log(Xi,j​))2

权重函数:
f ( x ) = { x x m a x 0.75 , i f x < x m a x 1 , i f x > = x m a x f(x)=\begin{cases} \frac{x}{x_{max}}^{0.75}, & if \ x < x_{max} \\ 1, & if \ x >= x_{max} \end{cases} f(x)={xmax​x​0.75,1,​if x<xmax​if x>=xmax​​
即频率越高权重越大,但是也不能过分增大。

参考 (如果你觉得这里不详细的话,可以看下面这篇)

理解GloVe模型(+总结)

Glove 细节介绍相关推荐

  1. 类似Cryptonom的区块链游戏开发细节介绍

    区块链游戏作为游戏行业的新起之秀有着非常快的发展速度,有人说它将给传统游戏行业带来很大冲击.在大家准备入场进行区块链游戏开发的同时,大家也要了解一些已经开发的区块链游戏,区块链游戏开发既要有创新也要合 ...

  2. UI5 Source code map机制的细节介绍

    在我的博客A debugging issue caused by source code mapping里我介绍了在我做SAP C4C开发时遇到的一个曾经困扰我很久的问题,最后结论是这个问题由于Jav ...

  3. Cordova插件中JavaScript代码与Java的交互细节介绍

    在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...

  4. 贷后催收评分模型中的数据清洗与数据治理细节介绍

    数据清洗是一个非常修炼身心的过程,途中你除了需要把所有的数据整业务合到一张宽表里.而这种宽表中所有的字段,是你理解完业务后,细心整理出来的所有适合建模的数据. 今天我们给大家介绍一下,在风控贷后评分模 ...

  5. WaveNet相关原理及细节介绍

    Neural vocoder层出不穷, 但是WaveNet仍然是重中之重.作为后续变种的基础和参考对比目标,还是需要先对WaveNet进行比较深入的了解,才能为后续演变后的vocoder的学习打下基础 ...

  6. 魔兽争霸war3:模型相关细节介绍

    warcraft是非常经典的游戏,而由warcraft衍生出来的各种玩法(dota.3C以及各种剧情版的war3游戏),同样是经久不衰.这些得益于warcraft的牛逼编辑器. 不管是策划还是玩家都梦 ...

  7. 工业相机使用方法细节介绍 工业相机的使用注意事项

    我们在日常拍照的时候都有非常多的讲究.角度.距离.以及高度等都能够决定一张照片拍的是否看好.而在使用工业相机拍照的时候需要注意的东西就更加地多.下面,深圳工业相机厂家--迪奥科技就带大家来了解一下工业 ...

  8. ActionScript 3 作用域内部细节介绍

    ActionScript 3 的作用域使用对象链表来记录在作用域中的定义(变量.函数.类.接口和命名空间). ● Class scope: the class's Class object (and ...

  9. 最新的漆包线生产工艺流程,9000余字细节介绍。让你读懂漆包线流程

    漆包线工艺流程 漆包线工艺流程:放线-退火- -涂漆- -烘焙-一冷却→收线 1.放线在一台正常运行的漆包机上,操作人员的精力和体力大部分消耗在放线部分,调换放线盘使操作者付出很大的劳动力,换线时接头 ...

最新文章

  1. Django视图之介绍、项目准备、URL、路由命名、reverse反解析和Postman测试
  2. SQL Server2008(二)各版本的功能和主要应用范围
  3. 根据根据图片的url怎么取得图片ImageView对象
  4. visualSVN仓库创建及操作
  5. data transformation python_Python 编码为什么那么蛋疼?
  6. git rebase用法_Git:Clone别人的代码之后push到自己码云上失败的解决办法
  7. 聊聊基准测试的MVP方案
  8. 控制Arduino的利器-Windows Remote Arduino
  9. VB6-Mini_20160110(VB6精简版下载)
  10. 5000的台式计算机,预算5000的台式组装机配置清单_预算5000的台式组装机配置
  11. 科普一下SM系列国密算法(从零开始学区块链)
  12. [PR] 关于Adobe Premiere Pro CS6 中文乱码的问题(怎么选中文字体?)
  13. Linux系统轻量级监控工具Linux dash的安装方法
  14. R2DBC Unable to create a ConnectionFactory for ‘ConnectionFactoryOptions
  15. 【雷达干扰】基于matlab速度聚类欺骗式干扰仿真【含Matlab源码 2221期】
  16. 小程序和APP谁将主导未来?
  17. Unity制作简单拦截近防炮——如何预测打击目标
  18. Mongo DB Codex Debug 代码-Python语言版-立哥开发
  19. DNS与CDN——前端重点
  20. 如何生成lib文件 采用VS2017生成lib文件(静态库文件)以C++语言为例 静态库的生成和使用

热门文章

  1. JZOJ5454. 【NOIP2017提高A组冲刺11.5】仔细的检查
  2. 对数组名取地址 a[ ],a
  3. Windows Vista 官方中文正式版(MSDN)(转载)
  4. java基础知识面试题(2020年最新版)
  5. 学习java可以做什么?学习java有什么用?
  6. 在linux上用cifs挂载nas盘
  7. Android 内存溢出、垃圾回收、四种引用
  8. 3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图
  9. 如何更好的做计划-SMART原则
  10. [最小生成树] 篱笆