第一节——词向量与ELmo(转)
最近在家听贪心学院的NLP直播课。都是比较基础的内容。放到博客上作为NLP 课程的简单的梳理。
本节课程主要讲解的是词向量和Elmo。核心是Elmo,词向量是基础知识点。
Elmo 是2018年提出的论文 《Deep contextualized word representtations》,在这篇论文中提出了很重要的思想Elmo,Elmo 是一种基于特征的语言模型,用预训练的语言模型,生成更好的特征。
Elmo是一种新型深度语境化词表征,可对词进行复杂特征(如句法和语义)和词在语言语境中的变化进行建模(即对多义词进行建模)。我们的词向量是深度双向语言模型biLM内部状态的函数,在一个大型文本语料库中预训练而成。
Elmo的主要做法是先训练一个完整的语言模型,再用这个语言模型去处理需要训练的文本,生成相应的词向量,所以在文中一直强调Elmo的模型对同一个字的不同句子中能生成不同的词向量。
在讲ELmo之前 我们先回顾一下词向量和语言模型,因为ELmo的提出 就是因为就语言模型的词向量 有一些缺点(主要是无法解决一词多意的问题),所以提出双向-深度-LSTM 的Elmo模型。这里的‘双向’是一个拼接而已,不是真正意义上的双向,所以XLNET 有permutation的改进实现真正的根据上下文内容的双向, 这里的‘深度’ 是横向和纵向的深度,因为深度 每层可以学习到不同的点,并且越深的层学的东西越具体。
1.词向量与语言模型
NLU 文本的量化表示方式
独热编码:能否表示单词之间的相似度? — 不能。因为通过任何一种方式(余弦相似度等)无法计算两两向量的相似度。
所以我们有了 词向量 (分布式表示的词向量)
独热编码: 稀疏向量,并且都是正交的。
词向量:稠密向量,分布式词向量。
类似的单词 都是聚集在一起的。当我们提取出某些词向量时,我们可以通过可视化来呈现出他们的关系。 可视化 T-SNE (sklearn里面有)这是一种降维的算法(针对词向量一般用TSNE),其他降维算法有PCA 等。
语言模型的目标是最大的话 一句话的 概率的。
基于前面几个单词预测下一个单词 这就是语言模型。
语言模型的基础:链式法则,马尔科夫,N元组,平滑方式,困惑度。
Global 方法:全局方法
Local 方法: 局部方法
基于LM的训练:基于语言模型的训练
基于非LM的训练:基于非语言模型的训练
1 Global vs Local
Global: 优势:全局. 缺点:计算量大,有新的文本的时候 需要更新。
Local: Skip Gram
- 基于LM vs 非基于LM
对于Elmo: 语言模型-NNLM-层次表示-HMM-RNN-LSTM-BiLSTM-DeepBiLSTM-ELMO
2.学习不同语境下的语义表示
基于Distributional Hypothesis
– Skip-Gram
句子: 词向量 训练 方法 有 两种
单词: W1 W2 W3 W4 W5
windows = 1
假设已知 w2, 预测出 w1 和 w3
目标函数:Maximize P(w2|w1)P(w1|w2)P(w3|w2)P(w2…)– CBOW:
通过 w1 和 w3 预测 w2
目标函数: Maximize P(w2| w1,w3) P(w3| w2,w4)…Language Model + HMM
– NNLM:
目标函数: Maximize P(w2|w1)P(w3|w2)
上面句子里面的Back 是不同的意思。
理解词向量 在不同语境下的含义 就是我们的目标。所以有了Elmo,Bert 等模型。
正确答案是 ABCD。
A是一种比较直观的 可行方案,每个单词多意,那么可以对应多个词向量。当然方法可行,不过具体执行问题有可能也很懂。
B和C是相关的。example: I back my car, I heart my back. 首先对back计算一个基准向量 H_back 一对一的,如何计算2个back这个句子里面的含义分别是什么? H_back + ▲(基于上下文的偏移)3.基于LSTM 的词向量学习
- 基于LSTM 作为基石
- 深度,层次
LSTM 来源于RNN, 因为RNN有些梯度爆咋的问题,所以提出了LSTM。
目标函数 是一个 语言模型,输出层 通过softmax 获取 期望输出向量,然后 期望输出 和实际值(热独编码) 计算交叉熵,反向传播。
下面是两个独立的 LSTM。不是一个真正的双向LSTM。
为什么不是真正的双向 是因为只是把前向和反向 拼接起来的结果,不是完整意义上的双向。 所以后面Permutation(XLNET) 可以认为是真正的双向
4.深度学习中的层次表示以及Deep BI-LSTM
深度 : 可以从纵向和横向上深度。
层次表示 可以看出 每层学出来的结果是不一样的。
这个就是Deep-bi-LSTM基于LM方式来训练。
5.ELMO模型
Elmo 使用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。
语言模型的双向体现在对句子的建模:给定一个N个token的句子, t1,t2,t3...tN t_1,t_2,t_3...t_N" role="presentation">t1,t2,t3...tNt1,t2,t3...tN t_1,t_2,t_3...t_Nt1,t2,t3...tN。前向语言模型:从历史信息预测下一个词,即从给定的历史信息$(t_1,…,t_{k-1}) $ 建模下一个token 预测 tk t_k" role="presentation">tktk t_ktk的概率 (这是前向LSTM)
对于一个L层的LSTM, 设其输入是xkLM x^{LM}_k" role="presentation">xLMkxkLM x^{LM}kxkLM(token embedding)每一层都会输出一个context-dependent representation (h⃗k,jLM \vec{h}^{LM}_{k,j}" role="presentation">h⃗ LMk,jh⃗k,jLM \vec{h}^{LM}{k,j}hk,jLM), LSTM的最后一层输出为(h⃗k,LLM \vec{h}^{LM}_{k,L}" role="presentation">h⃗ LMk,Lh⃗k,LLM \vec{h}^{LM}{k,L}hk,LLM),该输出会在Softmax layer被用来预测下一个token tk+1 t_{k+1}" role="presentation">tk+1tk+1 t_{k+1}tk+1后向语言模型:从未来信息预测上一个词,即从给定的未来(tk+1,...tN t_{k+1},...t_N" role="presentation">tk+1,...tNtk+1,...tN t_{k+1},...t_Ntk+1,...tN)建模上一个token tk t_k" role="presentation">tktk t_ktk的概率(反向LSTM)
对于一个L层的LSTM, 设其输入是xkLM x^{LM}_k" role="presentation">xLMkxkLM x^{LM}kxkLM(token embedding)每一层都会输出一个context-dependent representation 反向的(h⃗k,jLM \vec{h}^{LM}_{k,j}" role="presentation">h⃗ LMk,jh⃗k,jLM \vec{h}^{LM}{k,j}hk,jLM), LSTM的最后一层输出为反向的(h⃗k,LLM \vec{h}^{LM}_{k,L}" role="presentation">h⃗ LMk,Lh⃗k,LLM \vec{h}^{LM}{k,L}hk,LLM),该输出会在Softmax layer被用来预测下一个token tk−1 t_{k-1}" role="presentation">tk−1tk−1 t_{k-1}tk−1
双向语言模型是前向、后向的一个综合,通过两个方向的对数极大似然估计来完成:
其中:- Θx \Theta_{x}" role="presentation">ΘxΘx \Theta_{x}Θx是token embedding
- Θs \Theta_{s}" role="presentation">ΘsΘs \Theta_{s}Θs代表softmax layer的参数
biLM利用了biLSTM,biLSTM在前向和后向两个方向上共享了部分权重
对于一个token,ELMo会计算2L+1 个representation(输入的一个token embedding和前向、后向的2L个representation):
其中:
在下游任务中,ELMo将R的所有层压缩成一个向量ELMok=E(Rk;Θe) ELMo_k=E(R_k;Θe)" role="presentation">ELMok=E(Rk;Θe)ELMok=E(Rk;Θe) ELMo_k=E(R_k;Θe)ELMok=E(Rk;Θe) ,在最简单的情况下,也可以只使用最后一层E(Rk)=hk,LLM E(R_k)=h^{LM}_{k,L}" role="presentation">E(Rk)=hLMk,LE(Rk)=hk,LLM E(R_k)=h^{LM}{k,L}E(Rk)=hk,LLM
其中
可以看出,ELMo是biLM多层输出的线性组合。
在监督NLP任务中使用Elmo
在supervised NLP tasks中使用ELMo, 给定N个token的句子,supervised NLP处理的标准过程的输入是context-independent token词向量xk x_k" role="presentation">xkxk x_kxk,加入ElMo有两种方式:
- 直接将ELMo词向量ELMok ELMo_k" role="presentation">ELMokELMok ELMo_kELMok和普通词向量xk x_k" role="presentation">xkxk x_kxk 拼接得到[xk;ELMoktask] [x_k; ELMo_k^{task}]" role="presentation">[xk;ELMotaskk][xk;ELMoktask] [x_k; ELMo_k^{task}][xk;ELMoktask],作为模型的输入。
- 将ELMo词向量ELMok ELMo_k" role="presentation">ELMokELMok ELMo_kELMok 和隐藏层输出hk h_k" role="presentation">hkhk h_khk 进行拼接得到[hk;ELMoktask] [h_k; ELMo_k^{task}]" role="presentation">[hk;ELMotaskk][hk;ELMoktask] [h_k; ELMo_k^{task}][hk;ELMoktask]
(一个单词在语境下的表示 就是所有层的加权平均。
在预训练好这个语言模型之后,ELMo就是根据公式来用作词表示,其实就是把这个双向语言模型的每一中间层进行一个求和。最简单的也可以使用最高层的表示来作为ELMo。然后在进行有监督的NLP任务时,可以将ELMo直接当做特征拼接到具体任务模型的词向量输入或者是模型的最高层表示上。)6.总结
- ELMo的假设前提一个词的词向量不应该是固定的,所以在一词多意方面ELMo的效果一定比word2vec要好。
- word2vec的学习词向量的过程是通过中心词的上下窗口去学习,学习的范围太小了,而ELMo在学习语言模型的时候是从整个语料库去学习的,而后再通过语言模型生成的词向量就相当于基于整个语料库学习的词向量,更加准确代表一个词的意思。
- ELMo还有一个优势,就是它建立语言模型的时候,可以运用非任务的超大语料库去学习,一旦学习好了,可以平行的运用到相似问题。
Bert 是 AutoEncoder 通过上下文来预测中间mask单词,损失函数是ADE的损失函数,不是交叉熵损失。Bert 模型不是基于语言模型的,只是基于ADE。
Elmo 是基于语言模型的。
第一节——词向量与ELmo(转)的更多相关文章
- NLP直播-1 词向量与ELMo模型
翻车2次,试水2次,今天在B站终于成功直播了. 人气11万. 主要讲了语言模型.词向量的训练.ELMo模型(深度.双向的LSTM模型) 预训练与词向量 词向量的常见训练方法 深度学习与层次表示 LST ...
- NLP获取词向量的方法(Glove、n-gram、word2vec、fastText、ELMo 对比分析)
自然语言处理的第一步就是获取词向量,获取词向量的方法总体可以分为两种两种,一个是基于统计方法的,一种是基于语言模型的. 1 Glove - 基于统计方法 Glove是一个典型的基于统计的获取词向量的方 ...
- NLP之词向量
1.对词用独热编码进行表示的缺点 向量的维度会随着句子中词的类型的增大而增大,最后可能会造成维度灾难2.任意两个词之间都是孤立的,仅仅将词符号化,不包含任何语义信息,根本无法表示出在语义层面上词与词之 ...
- 词向量---ELMO
1.ELMo(Embeddings from Language Models ) RNN-based language models(trained from lots of sentences) E ...
- Deep Learning In NLP 神经网络与词向量
0. 词向量是什么 自然语言理解的问题要转化为机器学习的问题,第一步肯定是要找一种方法把这些符号数学化. NLP 中最直观,也是到目前为止最常用的词表示方法是 One-hot Representati ...
- 【paddle学习】词向量
http://spaces.ac.cn/archives/4122/ 关于词向量讲的很好 上边的形式表明,这是一个以2x6的one hot矩阵的为输入.中间层节点数为3的全连接神经网络层,但你看右 ...
- 词向量(one-hot/SVD/NNLM/Word2Vec/GloVe)
目录 词向量简介 1. 基于one-hot编码的词向量方法 2. 统计语言模型 3. 从分布式表征到SVD分解 3.1 分布式表征(Distribution) 3.2 奇异值分解(SVD) 3.3 基 ...
- 词向量模型word2vector详解
目录 前言 1.背景知识 1.1.词向量 1.2.one-hot模型 1.3.word2vec模型 1.3.1.单个单词到单个单词的例子 1.3.2.单个单词到单个单词的推导 2.CBOW模型 3.s ...
- 斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...
随机推荐
- js判断各种类型
js的六种基本类型:Object,Boolean,Number,String,Undefined,Null; Object中又有:Function,Array,Date... 如何判断数据类型? Ob ...
- JVM系列五(javac 编译器).
一.概述 我们都知道 *.java 文件要首先被编译成 *.class 文件才能被 JVM 认识,这部分的工作主要由 Javac 来完成,类似于 Javac 这样的我们称之为前端编译器: 但是 *.c ...
- c语言一道题
C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别 main(){inta=1,b=2,c=3;printf("%d,%d,%d,%d\n",a=b ...
- SCU 4438 Censor|KMP变形题
传送门 Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text P. He ...
- 一条SQL注入引出的惊天大案2:无限战争
前情回顾: 经过黑衣人和老周的合作,终于清除了入侵Linux帝国的网页病毒,并修复了漏洞.不曾想激怒了幕后的黑手,一场新的风雨即将来临. 详情参见:一条SQL注入引出的惊天大案 风云再起 小Q是L ...
- echarts圆饼图设置默认选中项并在中间显示文字
效果: 代码: var myChart = echarts.init(document.getElementById('quanshi-echarts-two')); option = { grid: ...
- floj 2264
2.公路建设(highway.c/cpp/pas) 在滨海市一共有n 个城市,编号依次为1到n,它们之间计划修建m条双向道路,其中修建第i条道路的费用为ci. 海霸王作为滨海市公路建设项目的总工程师, ...
- FJUT-1370 记录一次解题过程
题目在福工院的1370 首先看题目,好家伙,全英文 那么大致的题意就是.有几个城市同在一条线上(相当于在x轴上),max i是第i个城市到其他所有城市的距离中的最大值,min i也就是所有中最小的. ...
- python判断是否是质数
质数:只能被1和它自身整除 # 获取用户输入的数,判断是否是质数 num = int(input('输入一个任意的大于1的整数:')) i=2 # 创建一个变量,记录是否是质数,默认num是质数 fl ...
- Babel+vscode实现APICloud开发中兼容ES6及以上代码
本文出自APICloud官方论坛, 感谢论坛版主 penghuoyan 的分享. 使用APICloud开发时,考虑到兼容问题一直使用ES5开发,时间越久感觉越落后,整理了一个兼容ES6的开发环境, ...