词表征 3:GloVe、fastText、评价词向量、重新训练词向量
原文地址:https://www.jianshu.com/p/ca2272addeb0
(四)GloVe
GloVe本质是加权最小二乘回归模型,引入了共现概率矩阵。
1、基本思想

GloVe模型的目标就是获取每个词的向量表示\(w\)。GloVe认为,\(w_i\)、\(w_j\)、\(w_k\)通过某种函数\(F\)的作用后呈现出来的规律和\(Ratio_{i,j,k}\)具有一致性,或者说相等,这样子也就可以认为词向量中包含了共现概率矩阵中的信息。
2、模型推导


3.word2vec vs GloVe
| 基于统计 | word2vec | GloVe | |
|---|---|---|---|
| 优 | 训练快;有效利用了统计信息。 | 更快;更易加词; 可以通过计算词向量间余弦相似度计算词间语义相似度; 可以和后续NN一起训练。 |
训练快;可以扩展; 因为考虑了很多统计资讯,即使在小数据库上、小向量上也能表现得很好。 |
| 缺 | 捕捉词间语义相似度太初级; 大count与大重要性之间不相称。 |
主要收益于大corpus,未有效利用统计信息。 |
(五)fastText
fastText为子词嵌入模型。假设子词长度为3个字符,例如,"where"的子词包括"<wh"、"whe"、"her"、"ere"、"re>"以及特殊子词即整词""。给定一个词\(w\),通常可以将子词长度在3到6之间的所有子词和特殊子词的并集\(G_w\)取出,使用\(\frac{1}{|G_w|}\sum_{g\in G_w}v_g\)代替Skip-Gram中的原始\(v_c\),直接用线性分类器得到分类结果。线性分类器即为只有一层隐藏层且使用的是线性激活函数的NN。词典之外的新词的词向量可以使用fastText中相应的子词向量之和的平均来进行表示。
对于低频词生成的词向量效果更好,因为它们的字符级n-gram可以和其他词共享。对于训练词库之外的单词,仍然可以通过叠加它们的字符级n-gram向量来构建它们的词向量。
fastText也可以用于文本分类。将文本中所有词通过lookup table后得到嵌入词向量,取平均后,直接用线性分类器得到分类结果。线性分类器为只有一层隐藏层且使用的是线性激活函数的神经网络。fastText论文中也指出了,对于一些比较简单的任务,没有必要使用太复杂的网络结构就可以取得差不多的结果。论文中实验选取的都是对词序不是很敏感的数据集,所以得到其实验结果完全不奇怪。对简单的任务来说,用简单的网络结构进行处理基本就够了,但是对于比较复杂的任务而言的话,还是需要更复杂的网络结构来学习文本表征的。
fastText里还提到了2个tricks,分别是:Hierarchical Softmax以及N-gram特征结合Hashing的使用。当输出类别数较多的时候,通过构建一个霍夫曼编码树来加速softmax layer的计算,和之前word2vec中的tricks相同。只用unigram的话会丢掉词序信息,所以通过加入N-gram特征进行补充,使用哈希来减少N-gram的存储。
三、评价词向量
(一)内部评价
1、类比问题
\(w_A:w_B=w_C:w_x\),则
\(x=argmax_x\frac{(V_{w_B}-V_{w_A}+V_{w_C})^TV_{w_x}}{||V_{w_B}-V_{w_A}+V_{w_C}||}\)。
要求内部评价与最终任务的表现有正相关关系。
优点是简单、计算速度快。
2、词相关性
将对应词向量的余弦相似度算出的词相关性与人类判别得分进行比较。
(二)外部评价
看词向量用于后续任务是否会带来好处。常复杂且慢。
四、重新训练词向量
我们用于外部评估的词向量是通过一个简单的内部评价来进行优化并初始化的。在许多情况下,这些预训练的词向量在外部评价中表现良好。但是,这些预训练的词向量在外部评价的表现仍然有提高的可能。然而,重新训练词向量存在着一定的风险,需要保证训练集足够大并能覆盖词汇表中大部分的单词。
通常使用词向量的方式:
- random
随机初始化词向量,随着网络一起训练; - static
使用预训练的词向量,训练中保持不变; - non-static
使用预训练的词向量,训练中一起调整; - multi-channel
将static和non-static拼接起来,形成2通道词向量,static部分保持不变,non-static部分随网络一起调整。
词表征 3:GloVe、fastText、评价词向量、重新训练词向量的更多相关文章
- NLP教程(2) | GloVe及词向量的训练与评估
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- 词表征 2:word2vec、CBoW、Skip-Gram、Negative Sampling、Hierarchical Softmax
原文地址:https://www.jianshu.com/p/5a896955abf0 2)基于迭代的方法直接学 相较于基于SVD的方法直接捕获所有共现值的做法,基于迭代的方法一次只捕获一个窗口内的词 ...
- L25词嵌入进阶GloVe模型
词嵌入进阶 在"Word2Vec的实现"一节中,我们在小规模数据集上训练了一个 Word2Vec 词嵌入模型,并通过词向量的余弦相似度搜索近义词.虽然 Word2Vec 已经能够成 ...
- 词嵌入之GloVe
什么是GloVe GloVe(Global Vectors for Word Representation)是一个基于全局词频统计(count-based & overall statisti ...
- PyTorch在NLP任务中使用预训练词向量
在使用pytorch或tensorflow等神经网络框架进行nlp任务的处理时,可以通过对应的Embedding层做词向量的处理,更多的时候,使用预训练好的词向量会带来更优的性能.下面分别介绍使用ge ...
- 文本分布式表示(二):用tensorflow和word2vec训练词向量
看了几天word2vec的理论,终于是懂了一些.理论部分我推荐以下几篇教程,有博客也有视频: 1.<word2vec中的数学原理>:http://www.cnblogs.com/pegho ...
- 文本分类实战(一)—— word2vec预训练词向量
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- tensorflow如何正确加载预训练词向量
使用预训练词向量和随机初始化词向量的差异还是挺大的,现在说一说我使用预训练词向量的流程. 一.构建本语料的词汇表,作为我的基础词汇 二.遍历该词汇表,从预训练词向量中提取出该词对应的词向量 三.初始化 ...
- 基于word2vec训练词向量(二)
转自:http://www.tensorflownews.com/2018/04/19/word2vec2/ 一.基于Hierarchical Softmax的word2vec模型的缺点 上篇说了Hi ...
随机推荐
- memcached 安装与简单实用使用
一.简介 1.memcache与memcached的区别与联系: memcache是php的拓展,memcached是客户端,复杂的说:Memcache模块提供了于memcached方便的面向过程及面 ...
- T1317:【例5.2】组合的输出
[题目描述] 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数. 现要求你用递归的方法输出所有组 ...
- C++异常处理try、catch 没有finally
程序的错误大致可以分为三种,分别是语法错误.逻辑错误和运行时错误: 1) 语法错误在编译和链接阶段就能发现,只有 100% 符合语法规则的代码才能生成可执行程序.语法错误是最容易发现.最容易定位.最容 ...
- 使用FTP服务
ftp 占用20 21两个端口 安装vsftpd程序 键入命令 yum install vsftpd -y 清空默认的防火墙默认规则: [root@linuxprobe ~]# iptabl ...
- Git比较分支差异的3个命令
查看本地分支 git branch 查看远端分支,无论是否checkout到本地 git branch -r 假如想比较dev和master 命令1:比较文件 git diff dev master ...
- 6.Jmeter 参数关联设置
Jmeter的参数关联其实就是参数变量的在不同的采样器(sampler)的存储与传递. 如下我们有一个请求例子. 1. 发起下订单(下订单成功后会返回一个订单Id) 2. 针对该订单进行支付(需要 ...
- Java方法覆盖教程
重新定义来自超类(父类)继承的类中的实例方法称为方法覆盖. 示例 现在来看看,类A和类B的以下声明,覆盖了 print() 方法 : 1 2 3 4 5 6 7 8 9 10 11 public cl ...
- h5唤醒手机拨打电话
jquery : $("#a").attr("href","tel:110");
- 转 MySQL乐观锁和悲观锁
悲观锁(Pessimistic Lock) 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据库 ...
- 16-python基础-字典
1.字典的定义 dictionary(字典)是除列表以外python之中最灵活的数据类型. 字典同样可以存储多个数据. 通常用于存储一个物体的相关信息. 和列表的区别 列表是有序的对象集合 字典是无序 ...