Glove 细节介绍
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∑Nf(Xi,j)(viTvj+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∑NXi,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=XiXi,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,kPi,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,kPi,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,kPi,k−g(vi,vj,vk))2
g ( v i , v j , v k ) g(v_i,v_j,v_k) g(vi,vj,vk)有如下三方面的考虑:
- 考虑 v i v_i vi和 v j v_j vj之间的关系,应该有 v i − v j v_i-v_j vi−vj
- 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
- 不能为负值,使用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,kPi,k=exp((vi−vj)T)vk)=exp(viTvk−vjTvk)
即
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,kPi,k=exp(vjTvk)exp(viTvk)
实现这个优化目标,只需要拟合分子分母即可,而分子分母同型,我们可以简化为这一目标
P i , j = e x p ( v i T v j ) P_{i,j}=exp(v_i^Tv_j) Pi,j=exp(viTvj)
两边取对数
l o g ( P i , j ) = v i T v j log(P_{i,j})=v_i^Tv_j log(Pi,j)=viTvj
即 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)=viTvj,其中 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(viTvj−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)=viTvj, l o g ( P j , i ) = v j T v i log(P_{j,i})=v_j^Tv_i log(Pj,i)=vjTvi, 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 viTvj不等于 v j T v i v_j^Tv_i vjTvi。这就是为什么要加上偏差项 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(viTvj+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∑Nf(Xi,j)(viTvj+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)={xmaxx0.75,1,if x<xmaxif x>=xmax
即频率越高权重越大,但是也不能过分增大。
参考 (如果你觉得这里不详细的话,可以看下面这篇)
理解GloVe模型(+总结)
Glove 细节介绍相关推荐
- 类似Cryptonom的区块链游戏开发细节介绍
区块链游戏作为游戏行业的新起之秀有着非常快的发展速度,有人说它将给传统游戏行业带来很大冲击.在大家准备入场进行区块链游戏开发的同时,大家也要了解一些已经开发的区块链游戏,区块链游戏开发既要有创新也要合 ...
- UI5 Source code map机制的细节介绍
在我的博客A debugging issue caused by source code mapping里我介绍了在我做SAP C4C开发时遇到的一个曾经困扰我很久的问题,最后结论是这个问题由于Jav ...
- Cordova插件中JavaScript代码与Java的交互细节介绍
在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...
- 贷后催收评分模型中的数据清洗与数据治理细节介绍
数据清洗是一个非常修炼身心的过程,途中你除了需要把所有的数据整业务合到一张宽表里.而这种宽表中所有的字段,是你理解完业务后,细心整理出来的所有适合建模的数据. 今天我们给大家介绍一下,在风控贷后评分模 ...
- WaveNet相关原理及细节介绍
Neural vocoder层出不穷, 但是WaveNet仍然是重中之重.作为后续变种的基础和参考对比目标,还是需要先对WaveNet进行比较深入的了解,才能为后续演变后的vocoder的学习打下基础 ...
- 魔兽争霸war3:模型相关细节介绍
warcraft是非常经典的游戏,而由warcraft衍生出来的各种玩法(dota.3C以及各种剧情版的war3游戏),同样是经久不衰.这些得益于warcraft的牛逼编辑器. 不管是策划还是玩家都梦 ...
- 工业相机使用方法细节介绍 工业相机的使用注意事项
我们在日常拍照的时候都有非常多的讲究.角度.距离.以及高度等都能够决定一张照片拍的是否看好.而在使用工业相机拍照的时候需要注意的东西就更加地多.下面,深圳工业相机厂家--迪奥科技就带大家来了解一下工业 ...
- ActionScript 3 作用域内部细节介绍
ActionScript 3 的作用域使用对象链表来记录在作用域中的定义(变量.函数.类.接口和命名空间). ● Class scope: the class's Class object (and ...
- 最新的漆包线生产工艺流程,9000余字细节介绍。让你读懂漆包线流程
漆包线工艺流程 漆包线工艺流程:放线-退火- -涂漆- -烘焙-一冷却→收线 1.放线在一台正常运行的漆包机上,操作人员的精力和体力大部分消耗在放线部分,调换放线盘使操作者付出很大的劳动力,换线时接头 ...
最新文章
- Django视图之介绍、项目准备、URL、路由命名、reverse反解析和Postman测试
- SQL Server2008(二)各版本的功能和主要应用范围
- 根据根据图片的url怎么取得图片ImageView对象
- visualSVN仓库创建及操作
- data transformation python_Python 编码为什么那么蛋疼?
- git rebase用法_Git:Clone别人的代码之后push到自己码云上失败的解决办法
- 聊聊基准测试的MVP方案
- 控制Arduino的利器-Windows Remote Arduino
- VB6-Mini_20160110(VB6精简版下载)
- 5000的台式计算机,预算5000的台式组装机配置清单_预算5000的台式组装机配置
- 科普一下SM系列国密算法(从零开始学区块链)
- [PR] 关于Adobe Premiere Pro CS6 中文乱码的问题(怎么选中文字体?)
- Linux系统轻量级监控工具Linux dash的安装方法
- R2DBC Unable to create a ConnectionFactory for ‘ConnectionFactoryOptions
- 【雷达干扰】基于matlab速度聚类欺骗式干扰仿真【含Matlab源码 2221期】
- 小程序和APP谁将主导未来?
- Unity制作简单拦截近防炮——如何预测打击目标
- Mongo DB Codex Debug 代码-Python语言版-立哥开发
- DNS与CDN——前端重点
- 如何生成lib文件 采用VS2017生成lib文件(静态库文件)以C++语言为例 静态库的生成和使用
热门文章
- JZOJ5454. 【NOIP2017提高A组冲刺11.5】仔细的检查
- 对数组名取地址 a[ ],a
- Windows Vista 官方中文正式版(MSDN)(转载)
- java基础知识面试题(2020年最新版)
- 学习java可以做什么?学习java有什么用?
- 在linux上用cifs挂载nas盘
- Android 内存溢出、垃圾回收、四种引用
- 3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图
- 如何更好的做计划-SMART原则
- [最小生成树] 篱笆