NLP获取词向量的方法(Glove、n-gram、word2vec、fastText、ELMo 对比分析)
1 Glove - 基于统计方法
1.1 实现步骤
- 统计所有语料当中任意两个单词出现在同一个窗口中的频率,结果表现为共现矩阵 X
- 直接统计得到的共现矩阵 X,大小为 |V| x |V|(V=词库容量)
- 实践当中通常对原始统计矩阵施加 SVD(Singular Value Decomposition)来降低矩阵维度,同时降低矩阵的稀疏性
1.2 优点
- 训练速度快
- 充分利用了全局的统计信息
1.3 存在的问题
- 对于单一词语,只有少部分词与其同时出现,导致矩阵极其稀疏,因此需要对词频做额外处理来达到好的矩阵分解效果
- 矩阵非常大,维度太高
- 需要手动去掉停用词(如although, a,...),不然这些频繁出现的词也会影响矩阵分解的效果
2 基于语言模型的方法
2.1 基于 n-gram 的语言模型
- 参数空间过大,概率
的参数有 O(n)O(n)O(n) 个。
- 数据稀疏严重,有些词同时出现的情况可能没有,组合阶数高时尤其明显。

- 简单来说,n阶马尔可夫假设的意思就是:符合马尔科夫过程的随机变量,当前状态只和前n-1个状态有关,即N阶马尔可夫假设认为,当前词出现的概率只依赖于前 n-1 个词
- 1阶马尔科夫假设当前状态只和当前状态有关,1阶马尔科夫假设不会考虑上下和当前次的关系,因此 n 一般大于1
这里插一嘴,笔者认为 虽然 n-gram 只用到了前 n-1 个数据,但是这前 n-1 个数据也是由前边数据得出的,因此 n-gram 也间接用到了前边的数据
2.2 基于神经网络的语言模型
2.2.1 word2vec
2.2.2 fastText
- 输入增加了n-gram特征
- 使用 层次softmax做多分类
- 通过文本分类的方式来训练模型
2.2.3 ELMO
- 用通用语言模型(如word2vec、fastText、glove等)去训练一个静态词向量,ELMO内部使用 CNN-BIG-LSTM 语言模型得到的词向量,得到词向量的维度为 512
- 使用得到的静态词向量去训练ELMO网络
- 下游任务中使用词向量时,加载预训练的ELMO网络参数,根据当前上下文去动态调整词向量,从而得到一个动态的词向量。
上图展示的就是ELMO的网络结构,ELMO由两层网络组成,每层网络用于提取不同层级的特征;其中每层由两个方向相反的RNN网络构成(双向LSTM,简称BiLSTM),分别记录上文信息和下文信息
- $h(i,0)$:将两个输入的静态词(复制一份)向量拼接在一起,维度是512+512=1024,拼接的目的是为了和后边两个词向量的维度统一。
- $h(i,1)$:将ELMO第1层两个反向LSTM的输出拼接,维度是512+512=1024。
- $h(i,2)$:将ELMO第2层两个反向LSTM的输出拼接,维度是512+512=1024。
- 是直接使用最后一层 biLSTM 的输出作为词向量,即 $h(i,2)$ 。
- 更加通用的做法,将 $h(i,0)$ 、$h(i,1)$ 、$h(i,2)$ 三个输出加权融合在一起,公式如下。其中γ 是一个与任务相关的系数,允许不同的 NLP 任务缩放 ELMO 的向量,可以增加模型的灵活性。 $s_{j}^{task}$是使用 softmax 归一化的权重系数;此方法得到的elmo词向量可以看成是各层向量与初始静态词向量的ensemble

4. ELMO优点
- ELMO的各层参数实际上就是为各种有监督的下游任务准备的,因此ELMO可以被认为是一种迁移学习(transfer learning)。
- 通过这样的迁移策略,那些对词义消歧有需求的任务就更容易通过训练给第二隐层一个很大的权重,而对词性、句法有明显需求的任务则可能对第一隐层的参数学习到比较大的值(实验结论)。总之,这样便得到了一份”可以被下游任务定制“的特征更为丰富的词向量。
5. ELMO缺点
- lstm是串行机制,训练时间长,从这一点来看ELMO注定成为不了大哥,
- 相比于Transformer,lstm提取特征的能力还是不够的,我觉得未来lstm可能会被淘汰,毕竟屁股决定脑袋,时间为上!
- ELMO 的两个RNN网络是分别计算的,导致计算时上下文的信息不会相互通信,进而导致ELMO得到的词向量有一定的局限性
- 输出的结果只是讲两个RNN网络得到的结果拼接在一起,上下文信息并不会相互影响
转载于:https://blog.csdn.net/lch551218/article/details/114836207
NLP获取词向量的方法(Glove、n-gram、word2vec、fastText、ELMo 对比分析)的更多相关文章
- 深度学习之NLP获取词向量
1.代码 def clean_text(text, remove_stopwords=False): """ 数据清洗 """ text = ...
- NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、R&python实现、相关应用)
有很多改进版的word2vec,但是目前还是word2vec最流行,但是Glove也有很多在提及,笔者在自己实验的时候,发现Glove也还是有很多优点以及可以深入研究对比的地方的,所以对其进行了一定的 ...
- NLP︱高级词向量表达(三)——WordRank(简述)
如果说FastText的词向量在表达句子时候很在行的话,GloVe在多义词方面表现出色,那么wordRank在相似词寻找方面表现地不错. 其是通过Robust Ranking来进行词向量定义. 相关p ...
- NLP︱高级词向量表达(二)——FastText(简述、学习笔记)
FastText是Facebook开发的一款快速文本分类器,提供简单而高效的文本分类和表征学习的方法,不过这个项目其实是有两部分组成的,一部分是这篇文章介绍的 fastText 文本分类(paper: ...
- NLP之词向量
1.对词用独热编码进行表示的缺点 向量的维度会随着句子中词的类型的增大而增大,最后可能会造成维度灾难2.任意两个词之间都是孤立的,仅仅将词符号化,不包含任何语义信息,根本无法表示出在语义层面上词与词之 ...
- pytroch 权重初始化和加载词向量的方法
1.几种不同的初始化方法 import torch.nn as nn embedding = torch.Tensor(3, 5) #如下6种初始化方法 #正态分布 nn.init.normal_(e ...
- 【paddle学习】词向量
http://spaces.ac.cn/archives/4122/ 关于词向量讲的很好 上边的形式表明,这是一个以2x6的one hot矩阵的为输入.中间层节点数为3的全连接神经网络层,但你看右 ...
- NLP教程(2) | GloVe及词向量的训练与评估
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- NLP学习(1)---Glove模型---词向量模型
一.简介: 1.概念:glove是一种无监督的Word representation方法. Count-based模型,如GloVe,本质上是对共现矩阵进行降维.首先,构建一个词汇的共现矩阵,每一行是 ...
随机推荐
- 步行(walk.cpp) noip模拟
步行(walk.cpp) [题目描述] 小C喜欢步行,只有缓慢的步行,小C才能沉浸于其中,享受旅途中那些美好的瞬间. 小C来到了一座新的城市生活,这座城市可以看成 \(n\) 个点, \(n−1\) ...
- Pytorch 实现简单线性回归
Pytorch 实现简单线性回归 问题描述: 使用 pytorch 实现一个简单的线性回归. 受教育年薪与收入数据集 单变量线性回归 单变量线性回归算法(比如,$x$ 代表学历,$f(x)$ 代表收入 ...
- c语言中for循环 和嵌套for循环
for循环:for( ; ; )里面是bai3个语句,两个分号.第一个语句是开始前执行,第二个语句是判断真假,如果真,就执行后面(大括号内)的代码.第三个语句是每次执行完毕后执行的东西,通常第三个语句 ...
- oo第三单元学习总结
OO第三单元小结 一.JML语言理论基础及工具链梳理 在本单元我们学习了JML语言的一些基础知识,能够让我们看懂简单的JML规格并写出对应代码, 主要用到的知识点有: 1.requires 该子句 ...
- poi实现生成下拉选联动
在我们实际的程序开发中,经常需要用到从excel导入数据中系统中,而为了防止用户在excel中乱输入文字,有些需要用到下拉选的地方,就需要从程序中动态生成模板.本例子简单的讲解一下,如何生成级联下拉选 ...
- RabbitMQ处理未被路由的消息
我们经常使用消息队列进行系统之间的解耦,日志记录等等.但是有时候我们在使用 RabbitMQ时,由于exchange.bindKey.routingKey没有设置正确,导致我们发送给交换器(excha ...
- 微信小程序实现tabs选项卡
选项卡在我们的日常开发中,使用的还是蛮多的,但是微信小程序中却没有直接提供选项卡组件,不过我们可以变通通过 scroll-view 和 swiper 组件来实现一个选项卡的功能. 需求: 实现一个选项 ...
- 『学了就忘』Linux基础 — 3、CentOS镜像下载
下载CentOS镜像可以从官网下载:https://www.centos.org/download/. 也可以从国内的镜像网站下载. 阿里云:https://mirrors.aliyun.com/ce ...
- Noip模拟77 2021.10.15
T1 最大或 $T1$因为没有开$1ll$右移给炸掉了,调了一年不知道为啥,最后实在不懂了 换成$pow$就过掉了,但是考场上这题耽误了太多时间,后面的题也就没办法好好打了.... 以后一定要注意右移 ...
- STM32定时器学习---基本定时器
STM32F1系列的产品,除了互联网产品外,工作8个,3种定时器,其中一种就是基本定时器.那么STM32单片机的基本定时器如何操作以及编程呢? 下面我们就来详细的了解一下 STM32F1系列的产品,除 ...