深度之眼Paper带读笔记NLP.29:深度语境化词表征

前言

Deep contextualized word representations
一种新型深度语境化词表征
作者:Matthew E.Peters et al.
单位:Allenai & University of Washington
发表会议及时间:NAACL2018(best paper)
在线LaTeX公式编辑器
别人的讲解
a. 词表征的概念
词表征也是词表示,就是将词表示成向量,用于输入到神经网络。
b. 常用的词表征方法
1) 统计方法:统计词和词之间的共现次数,一个词与词表内所有词的共现次数作为这个词的词表征。
2) 词向量方法:使用监督学习训练词向量,如Word2vec。
3) 基于上下文的词向量训练方法,训练得到使用上下文信息的词向量。
c. 了解语言模型
语言模型就是能够给出句子概率的模型,句子概率等于句子中词的概率相乘,语言模型的评价指标是困惑度。

第一课 论文导读

词表征简介

词表征:为了将词输入到神经网络,需要将词表示成向量,这个向量就是词表征。
意义:基于深度学习的自然语言处理的基础。
下例中:语法或语义相近的词都在一个区域
在这里插入图片描述

词表征相关方法

统计方法

统计方法:统计每一个词和其他词共同出现的次数作为这个词的表征。
缺点是词表向量很大,在使用的时候需要降维。
在这里插入图片描述

词向量

词向量:将每个词随机映射成一个词向量,然后使用监督学习的方法训练每个词向量。
缺点是对于多义词表达不是很好,虽然有将一个词做个映射来解决,但是还是效果不好。
在这里插入图片描述

基于上下文的词向量

基于内容的词向量:得到和上下文相关的词向量的表征。
在这里插入图片描述

前期知识储备

·了解语言模型LM
·本文的词表征训练是基于语言模型的训练方法,所以需要大家了解语言模型如何训练词向量。

第二课 论文精读

论文结构

摘要
在这里插入图片描述
downstream models下游模型
polysemy多义词
1.介绍
2.相关工作
3.模型
4.实验
5&6.分析&总结

传统/经典算法模型详解

常用的词表征方法

基于语言模型的词向量训练

语言模型:语言模型可以给出每个句子是句子的概率:
P ( s ) = ∏ i = 1 T P ( w i ) P(s)=\prod_{i=1}^TP(w_i) P(s)=i=1TP(wi)
而每个词的概率定义成n-gram形式,即每个词出现只与前n-1个词有关:
P ( w t ) = P ( w t ∣ w t − n + 1 t − 1 ) P(w_t)=P(w_t|w_{t-n+1}^{t-1}) P(wt)=P(wtwtn+1t1)
评价语言模型好坏的指标困惑度(perplexity):
P P ( s ) = 1 / P ( s ) T PP(s)=\sqrt[T]{1/P(s)} PP(s)=T1/P(s)
上式中T是句子的长度(词的个数),句子越长,概率P(s)越小(可以想象,一个3万个词库的词向量表示,每个词分到概率很小,然后连乘。。。),句子越短,出现的困惑度就越高,因此需要一个和句子长度有关的指标来均衡这个事情。所以就开根号T。下面是上式的变换。e的指数部分就是softmax的损失函数。
P P ( s ) = e − 1 T ∑ i = 1 T l o g P ( w i ) PP(s)=e^{-\frac{1}{T}\sum_{i=1}^TlogP(w_i)} PP(s)=eT1i=1TlogP(wi)
在这里插入图片描述

词向量

在这里插入图片描述

基于上下文的词向量

基于内容的词向量:得到和上下文相关的词向量的表征。上下文信息就是下图中黄色部分
在这里插入图片描述
下面是具体结构
在这里插入图片描述
上图中,左边下面是输入了一句话,然后每个词都经过了char embedding(表示为C)和Token embedding(词向量,表示为W),然后把两个embedding结果concat到一起作为这个输入词的向量表示。
然后送入双向的RNN(也可以是GRU)得到的 h 1 → 和 h 1 ← \overrightarrow{h_1}和\overleftarrow{h_1} h1 h1 concat到一起得到 h 1 , 1 h_{1,1} h1,1,第一个1表示时间步,第二个1表示第几层。
再看右边上下两部分分别是正向和反向两个预训练模型,两个模型是完全独立的,参数什么都是分开的(但是两个模型的参数是不变的,预训练过的),把语句丢进去,下面部分就是获取到上文信息,上面部分获取到下文信息。然后上下文concat得到 h 1 L M , h 2 L M . . . . h_1^{LM},h_2^{LM}.... h1LM,h2LM....
然后将上下文向量再和之前的 h 1 , 1 . . . h_{1,1}... h1,1...进行concat,丢入到双向的RNN中。
下面是具体数学表示:
h → k , 1 = R → 1 ( x k , h → k − 1 , 1 ; θ R → 1 ) \overrightarrow{h}_{k,1}=\overrightarrow{R}_1(x_k,\overrightarrow{h}_{k-1,1};\theta_{\overrightarrow{R}_1}) h k,1=R 1(xk,h k1,1;θR 1)
h ← k , 1 = R ← 1 ( x k , h ← k − 1 , 1 ; θ R ← 1 ) \overleftarrow{h}_{k,1}=\overleftarrow{R}_1(x_k,\overleftarrow{h}_{k-1,1};\theta_{\overleftarrow{R}_1}) h k,1=R 1(xk,h k1,1;θR 1)
h k , 1 = [ h → k , 1 ; h ← k , 1 ] {h}_{k,1}=[\overrightarrow{h}_{k,1};\overleftarrow{h}_{k,1}] hk,1=[h k,1;h k,1]
这里只讨论第一层的,第二层是一样的,k是时间步,前面有讲。 R → 1 \overrightarrow{R}_1 R 1表示正向的RNN, x k x_k xk是第k个时间步的输入。 θ R → 1 \theta_{\overrightarrow{R}_1} θR 1是参数。
然后反向是同样的,最后把正向和反向concat到一起: h k , 1 {h}_{k,1} hk,1
从语言模型上看(就是上面图片中的右边预训练RNN那里):
正向:
p ( t 1 , t 2 , . . . , t N ) = ∏ k = 1 N p ( t k ∣ t 1 , t 2 , . . . , t k − 1 ) p(t_1,t_2,...,t_N)=\prod_{k=1}^Np(t_k|t_1,t_2,...,t_{k-1}) p(t1,t2,...,tN)=k=1Np(tkt1,t2,...,tk1)
反向:
p ( t 1 , t 2 , . . . , t N ) = ∏ k = 1 N p ( t k ∣ t k + 1 , t k + 2 , . . . , t N ) p(t_1,t_2,...,t_N)=\prod_{k=1}^Np(t_k|t_{k+1},t_{k+2},...,t_{N}) p(t1,t2,...,tN)=k=1Np(tktk+1,tk+2,...,tN)
最后的结果就变成: h k , 1 = [ h → k , 1 ; h ← k , 1 ; h k L M ] {h}_{k,1}=[\overrightarrow{h}_{k,1};\overleftarrow{h}_{k,1};h_k^{LM}] hk,1=[h k,1;h k,1;hkLM]

本文提出的模型

Embedding from Language Models:ELMo
在这里插入图片描述
左右分别是双层正向和双层反向LSTM,公式和之前工作是一样样的。
正向:
p ( t 1 , t 2 , . . . , t N ) = ∏ k = 1 N p ( t k ∣ t 1 , t 2 , . . . , t k − 1 ) p(t_1,t_2,...,t_N)=\prod_{k=1}^Np(t_k|t_1,t_2,...,t_{k-1}) p(t1,t2,...,tN)=k=1Np(tkt1,t2,...,tk1)
反向:
p ( t 1 , t 2 , . . . , t N ) = ∏ k = 1 N p ( t k ∣ t k + 1 , t k + 2 , . . . , t N ) p(t_1,t_2,...,t_N)=\prod_{k=1}^Np(t_k|t_{k+1},t_{k+2},...,t_{N}) p(t1,t2,...,tN)=k=1Np(tktk+1,tk+2,...,tN)

把上面弄在一起:
∑ k = 1 N ( l o g p ( t k ∣ t 1 , t 2 , . . . , t k − 1 ; θ x , θ → L S T M , θ s ) + l o g p ( t k ∣ t k + 1 , t k + 2 , . . . , t N ; θ x , θ ← L S T M , θ s ) ) \sum_{k=1}^N(logp(t_k|t_1,t_2,...,t_{k-1};\theta_x,\overrightarrow\theta_{LSTM},\theta_s)+logp(t_k|t_{k+1},t_{k+2},...,t_{N};\theta_x,\overleftarrow\theta_{LSTM},\theta_s)) k=1N(logp(tkt1,t2,...,tk1;θx,θ LSTM,θs)+logp(tktk+1,tk+2,...,tN;θx,θ LSTM,θs))
最后的词表示由三部分组成:
R k = { x k L M , h → k , j L M , h ← k , J L M ∣ j = 0 , . . . , L } = { h k , j L M ∣ j = 0 , . . . , L } R_k=\{x_k^{LM},\overrightarrow{h}_{k,j}^{LM},\overleftarrow{h}_{k,J}^{LM}|j=0,...,L\}=\{{h}_{k,j}^{LM}|j=0,...,L\} Rk={xkLM,h k,jLM,h k,JLMj=0,...,L}={hk,jLMj=0,...,L}
x是输入,后面两个分别是第j层正向和第j层反向的上下文。k表示第k个词,j表示第几层,就是上图蓝色部分,下面一行是第一层,第二行是第二层。然后经过等号就简写了,j从0开始表示黄色那部分是第0层。
上面提到的三部分不是用concat到一起的,因为三部分都很大,用的是类似attention的处理方式。如下:
E L M o k t a s k = E ( R k ; θ t a s k ) = γ t a s k ∑ j = 0 L s j t a s k h k , j L M ELMo_k^{task}=E(R_k;\theta^{task})=\gamma^{task}\sum_{j=0}^Ls_j^{task}{h}_{k,j}^{LM} ELMoktask=E(Rk;θtask)=γtaskj=0Lsjtaskhk,jLM
式中的 s j t a s k s_j^{task} sjtask就类似attention中的权重,每个 s j t a s k s_j^{task} sjtask都和 h k , J L M {h}_{k,J}^{LM} hk,JLM做相乘,然后求平均,就是加权平均。简单来说,这样弄了以后,就是看模型偏重于三个部分,例如:j=0.1.2,权重s为0.1,0.8,0.1,意思就是模型偏重于第1层。 γ t a s k \gamma^{task} γtask是缩放因子,是训练出来的。
注意,L可以很大。。。。
上图中的黄色部分使用的是char embedding,老师补充了这个知识点:

char embedding

char embedding可以解决word embedding中UNK的问题,有两种方法:
基于双向LSTM的:
将词按字母输入到双向LSTM,然后把正向和反向的结果concat到一起就是char embedding结果。
在这里插入图片描述
基于CNN的:
这个先要对cats这个单词进行pad,然后用大小为3的卷积核对其进行卷积,可以看到卷积了4次
pad,c,a
c,a,t
a,t,s
t,s,pad
得到的结果stack起来,有四个卷积核(filter),就有四层,每层分别进行maxpooling(注意看颜色!!!)得到char embedding结果,CNN的char embedding结果大小和卷积核有多少有关系。
在这里插入图片描述

Using ELMO for NLP tasks

在这里插入图片描述
在这里插入图片描述

实验和结果

数据集

SQuAD:斯坦福大学的问答数据集,包含100K+的问题答案对,其中答案是背景文档中的连续的一段话,给定问题和背景文档要求找到背景文档中的连续的一段话作为的答案。这个数据集有2.0了。
SNLl:斯坦福的文本推理数据集,包含550K的前提结论对,给定假设判断结论是否为真。
SRL:语义角色标注,用来标注谁对谁做了什么事,相当于一个序列标注问题。
Coref:共指消解,找到指向相同实体的名词或者代词。
NER:命名实体识别,对不同的词给定不同的标注,序列标注任务。
SST-5:斯坦福情感分类数据集。

结果

六个数据集都取得很好的结果。
在这里插入图片描述
这里取三个数据集进行进一步实验,对比了只对最顶层应用模型,以及加正则化的对比。实验表明,对所有层都用效果最好。
在这里插入图片描述
在输入输出层使用的区别
在这里插入图片描述
下面实验是针对WSD的,词义消岐,word sense disambiguation
在这里插入图片描述
针对词性标注的实验,结论是:考虑语义的任务上高层结果比较好,词性标注、语法第一层比较好

在这里插入图片描述
下面的实验表明很少的数据也可以取得很好的结果。
在这里插入图片描述
这个图是针对公式中的 s j t a s k s_j^{task} sjtask进行可视化的结果,看模型偏重哪一层。输入的时候LSTM1用得比较多,输出的时候都差不多。
在这里插入图片描述

总结

本篇论文的主要贡献?
提出了预训练的词表征模型,在多个任务上大大提高了下游模型的效果。
本文提出的模型有何缺点?
LSTM在提取特征方面偏弱,而且速度比较慢。
后来的改进模型?
使用transformer作为语言模型。

论文主要创新点

A.提出了一种新的词表征与训练模型。
B.在多个任务上提高了下游模型的效果。
C.使用了各个层次的词表征,并且分析了不同层次词表征的用处。

小结

对比模型:本文对比了传统的词向量模型和多种基于上下文的词表征模型。
模型:本文提出了一种新的词表征模型,并将他们很好地融入到下游任务。
实验:本文提出的模型训练得到的词表征能够在多个任务上提高下游模型的效果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值