NLP: Word Embedding 词嵌入(Part3: Glove)
1. Glove 是什么
Glove 全称是 Global Vectors for Word Representation。它是基于全局词频统计的Word Representation Tool
它可以捕捉 words之间的 similarity, analogy 等; 通过vectors之间的数学联系计算words之间的语义相似性
2. Glove 实现步骤
2.1 构建共现矩阵
假设我们有三句话: I like deep learning. I like NLP. I enjoy flying
我们可以获得一个词典: {"I like", "like deep", "deep learning", "like NLP", "I enjoy", "enjoy flying", "I like"}
共现矩阵中的数字代表row_word 和 column_word在词典中出现的次数
在共现矩阵中,word 与 word 在 Context之间的关系一定在自然数域中, 即 >=1
而 GloVe 计算 word 与 word 在 Context 之间的距离 distance, 并且用 decay = 1/d 来计算weight, 当 words之间的distance越大,weight(decay) 就会越小
2.2 Word Vector 和 共现矩阵的近似关系
用以下公式表示近似关系:
2.3 构造 Loss Function
根据近似关系,我们就可以创造出loss function:
weight function (权重函数的作用):
- 让经常一起出现的words weight 远大于 不常一起出现的words weight, 因此 weight function 需要 non-decreasing
- 不希望 weight function 出现 overweighted, 因此需要让weight function 达到边界时不再增加
- 如果两个word没有一起出现, 即 X_ij=0,那么这种情况不应该放入Loss Function, 简而言之 weight func满足 f(0) = 0
这里 weight function 使用下图的这种:
2.4 训练 Glove 模型
采用了AdaGrad的梯度下降算法,对矩阵 X 中的所有非零元素进行随机采样,学习曲率(learning rate)设为0.05,在vector size小于300的情况下迭代了50次,其他大小的vectors上迭代了100次,直至收敛。
最后得到2个vector, 分别是 w 和 w_bar; 最后为了提高鲁棒性,输出 w + w_bar, 得到效果如下图
3. Glove 与 LSA, Word2Vec之间的差别
LSA (Latent Semantic Analysis) 是一种比较早的词向量表征工具(Word Representation Tool)
LSA 是基于共现矩阵,使用SVD(奇异值分解)对大矩阵进行降维; 缺点是比Glove计算代价更大
Word2Vec 的缺点是没有充分使用语料; 一定程度上Glove会比Word2Vec更加精准
相关文章
- 在SVN中进行分支开发的最佳实践
- CentOS 7.0正式发布 新特性汇总
- 搭建rsync同步机制 解决测试和生产环境的文件同步问题
- 关于Memcached对key和value的限制
- 升级CentOS的OpenSSH 搭建SFTP Server
- SVN版本库迁移服务器方法
- 解决Cacti监控大内存时数据显示nan的问题
- 为CentOS升级OpenSSL 让Nginx支持TLS 1.2
- 在CentOS 5.x中部署LVS-DR模式
- MiniFramework新增了图片验证码输出和校验功能
- 采用http协议做IM拉取消息的流程设计
- 利用Swoole实现服务器通过WebSocket主动向浏览器推送数据
- 用 MiniFramework 快速构建 REST 风格的 API 接口
- 域名污染后使用ECDN全站加速是否有效?
- 用 MiniFramework 实现文件上传功能
- 详解用 MiniFramework 框架实现对 GET 或 POST 请求参数进行签名校验的方法
- 采用 MiniFramework 框架开发的 MiniAdmin 完成了 1.0 版
- java大学校园饭卡管理系统饭卡查询系统饭卡挂失网站源码
- java网上花店源码花店商城网上花店商城购物商场项目花店系统鲜花商城
- java医院挂号系统挂号预约网站挂号网站预约网站源码