glove 学习笔记
来源:互联网 发布:学设计软件机构 编辑:程序博客网 时间:2024/05/29 11:08
话不多说,入正题。
动机:
现有的词向量模型,
1 局部上下文建模的方法 例如word2vector
用通俗的话来讲就是,如果两个词在训练语料中出现的上下文比较类似,比如“食堂”和“餐厅”,都在“我”,“去”,“吃饭”这种上下文上出现了许多次,那么他俩的词向量就比较相似。
2 矩阵分解的方法,例如LSA
将文档和单词的共现矩阵,也就是行是文档,列是单词,第i行第j列,表示文档i中是否包含单词j(具体是词频还是是否出现记不清楚了,不过不影响)。然后通过SVD矩阵分解的方式就能够得到两组向量,分别表示文档的向量(可以用来做文本距离)和单词的向量。(这种方法相对于word2vector的优势就是利用了词共现的信息,也就是不仅仅只关注word2vector窗口大小的上下文,而是用到了全局信息)
所以作者就想把两者都优点给结合起来。
那么想把这两个东西都利用起来,应该怎么学习词向量呢?
首先,作者计算了两个东西。记录词典维度为V
1
2
举例:“苹果”一个词,在语料中出现了10词,窗口大小为20,那么
有了这两个东西,我们能干啥。
令
我们就能通过一个比值的方案。我们可以看大
solid(固体)ice(冰块)gas(气体)steam(蒸汽)
这个图中最后一行中8.9和0.08.5说明,solid在ice的上下文中出现的次数远远比在steam的上下文中出现的次数多,而在gas上则相反。
作者总结出,对于词i,j,k,如果k在i和j的上下文中出现的次数比率太大或太小,这说明其中有相关性存在,而如果这个 比值接近1,那么就没啥意义。
因为我们要学习词向量,所以的用数学公式表达,然后设计成loss function。
比率的意义与wi,wj , wk相关,所以有下面的公式。我们希望有一个函数F来拟合共现矩阵的比率关系
接下来,我们知道词向量具有线性关系,也就是国王-女王 = 男人-女人,所以我们显示的把词向量的差加入公式(感觉这么说有点牵强,引用别人的解释@飞奔的石头456:同时因为向量空间是内在线性结构,最自然、能达到这个目的就是做差。)
为什么有公式(3),作者论文中说的是,因为公式左边是向量,但右边是标量,而且如果以公式(2)的形式,使得输入是向量,那么F的参数可能让我们学不到我们想要学习的线性关系,所以这么搞。但给我的感觉是word2vector中的优化目标就是两个向量的点乘。可能这么做更有道理。
公式(4)是怎么来的。我也是看了一会才明白。我们这里把词i,j叫做上下文词,把k叫待预测词,但这种关系是可以对称的,也就是k也可以作为上下文词,然后去看i,j和他的相关度,也就是我们把X转置,也可以算出差不多的结果。
那么我们就需要我们的f满足可加性和可乘性。
所以由公式三。我们可以得到公式(5),把5带入就能得到公式(4)
从而推出
到这里,大概的思路就差不多了。
贴一个word2vector的损失函数的形式
作者再通过加偏置和加权就能够得到如下的损失函数,也就是优化目标。(如果需要详细了解公式(16)的可以去看原文,但我认为如果只需要了解glove这些细节不需要去深究)
可以看到。损失函数中有
虽然glove在有些地方有他的有点,貌似现在好多任务中,word2vector还是最常用的。
感谢@飞奔的石头456
http://blog.csdn.net/weixin_36711901/article/details/71241590
原文链接
https://nlp.stanford.edu/pubs/glove.pdf
欢迎大家批评指正
- GloVe学习笔记
- glove 学习笔记
- 深度学习-gloVe模型
- CS224n笔记三之词向量模型与GloVe
- GloVe学习之Python中简单的词向量SVD分解
- glove入门实战
- glove入门实战
- GloVe使用心得
- word2vec 与 Glove 对比
- GloVe 词向量模型
- Hand in glove 密切配合
- deeplearning4j之GloVe实现实现
- 读glove文件的代码
- work hand in glove 密切合作
- 词向量之加载word2vec和glove
- NLP:language model(n-gram/Word2Vec/Glove)
- 词向量源码解析:(3.5)GloVe源码解析之glove
- glove背后的计算原理(进一步理解glove实现细节)
- 大小端详解
- 深入浅出lock
- ACM算法:并查集
- vagrant打造跨平台开发环境
- linux 是什么
- glove 学习笔记
- 智能管家(一)
- C++ String类的实现
- 面试之jsp、Servlet相关知识——生命周期, 区别等
- StringBuffer对象的初始化
- [Javascript 高级程序设计]学习心得记录2 Javascript的垃圾回收机制
- 【超分辨率】Deeply-Recursive Convolutional Network for Image Super-Resolution
- android添加menudrawer
- Date与String的互换以及日期的获取显示