2019斯坦福CS224N笔记(13)Contextual Word Representations and Pretraining

【2019斯坦福CS224N笔记】(13)Contextual Word Representations and Pretraining

csdn:https://blog.csdn.net/abcgkj

github:https://github.com/aimi-cn/AILearners


[toc]

词向量的表示

目前为止,我们已经学过了one-hot编码、word2vec、glove等词向量的表示。但是这三个方法都普遍存在在一些问题,就是无法解决一词多义的问题。即对于同一个词无论上下文的单词是否相同,训练出来的词向量都是一样的。

当我们手中的语料不足时训练出来的词向量效果不会很理想,这时我们可以使用他人已经训练好的词向量,并且以预训练的词向量来作为初始值,在训练过程中进行微调。下图是2011年Collobert, Weston等人使用预训练的词向量进行NLP任务的精度和F1值,模型使用了预训练词向量之后,得分得到了提升:

但是,我们训练好的词向量是不可能涵盖所有词的(这里主要有两个原因,一是训练语料中本来就不存在这些词,二是这些词在训练语料中出现次数过少),这就会存在一个未登录词(unknown words)的问题,遇到这个问题的时候我们怎么处理呢?常见的解决方案是:

  • 首先,最简单和最普遍的解决方法就是将所有未登录的词映射为,并且为它训练一个词向量。但是这种方法存在缺点,它把这些未登录词都视为相同,不能区分它们的区别。
  • 训练字符级的词向量
  • 此外,你可以将其视为新的单词,并为其分配一个随机向量,将它们添加到你的词汇表。

不过,对于这样的解决方案存在着一定的问题,即:我们没有办法区分不同的unknown words。此外,到目前为止,对于每一个单词,我们都只拥有一个词向量,因此很难解决一词多义的问题。接下来,我们介绍一些经典模型。

经典模型

1.Peters et al. (2017): TagLM – “Pre-ELMo”

核心思想:通过上下文中获取单词的含义,但只在task-labeled的任务(例如,NER)上使用RNN来进行训练。算法的核心步骤如下:

  • 在未标记的数据上预训练词向量和语言模型
  • 在输入序列中准备好单词嵌入和语言模型嵌入。
  • 在序列标记模型中同时使用单词嵌入和语言模型嵌入。

模型结构图如下:

论文得出的结论如下:

  • 通过对语言模型观察我们得出:使用有监督数据集来训练的语言模型效果甚微,使用双向语言模型仅对向前有利,网络结构越复杂效果越好。
  • 通过对任务特定BILSTM观察可知:仅使用lm嵌入来预测并不好

2.Peters et al. (2018): ELMo: Embeddings from Language Models

在下一年,Peters等人提出的ELMo模型在非常多的NLP task上都提高了state-of-the-art 方法的performance, 被一些人称为新的word2vec. 这文章同时被ICLR 2018 和NAACL 2018 接收, 后来获得了NAACL best paper award。

ELMO是第一个使用双向语言模型来获得词向量的方法。这里使用长上下文而不是上下文窗口学习单词标记向量,使用双向的深层NLM进行训练并使用其所有层进行预测。

我们来简要介绍下这个模型:首先,它训练了一个双向的语言模型,其次,其性能很好并且模型不大:使用2个bilstm层,使用字符级的CNN建立初始单词表示(2048 char n-gram过滤器和2个HighWay层,512 dim投影),使用4096 dim hidden/cell lstm状态,512dim投影到下一个输入,使用残差网络连接token输入和输出(SoftMax)的参数,并将这些参数连接在正向和反向语言模型之间。

ELMO用于学习特定任务的双向语言模型表示的组合,这是首次仅使用LSTM堆栈顶层的模型,ELMO的任务可以简单表示为:

在使用双向语言模型获得词向量后,我们在下游任务中使用词向量时,冻结有监督模型中的ELMO部分,并且将EMLO的权重根据不同的任务来连接不同的模型中。模型中的两个bilstm nlm层具有不同的用途/含义:较低层学习的是较低级别的语法等,比如词性标注,句法依赖,NER等任务;高层次学习的是语义,可用于情感,语义角色标注,问题回答等任务。

3.ULMfit

Howard and Ruder (2018)提出了 Universal Language Model Fine-tuning for Text Classification。ULMfit主要是使用迁移学习来进行文本分类。迁移学习示意图如下:

该模型的核心思想是:

  • 在大的通用域语料库上训练神经语言模型
  • 在目标任务数据上微调语言模型
  • 采用该模型,将其从语言模型转化
  • 为分类器

模型结构图如下:

该模型在训练时有一些细节:

  • 每层使用不同的学习率,即Slanted triangular learning rate (STLR) schedule,开始学习率逐渐增大,后面逐渐变小
  • 在学习分类器时逐步解冻并且采用STLR策略
  • 分类时使用下图拼接的方法:

4.Transformer

transformer的出现主要是为了利用纯attention来解决RNN系列网络无法并行计算的问题。模型结构图如下所示:

我们从图中可以看到:和大多数seq2seq模型一样,transformer的结构也是由encoder和decoder组成。最初应用于使用并行语料库进行机器翻译并预测每个单词的翻译。

1.Encoder

Encoder由N=6个相同的layer组成,layer指的就是上图左侧的单元,最左边有个“Nx”,这里是x6个。每个Layer由两个sub-layer组成,分别是multi-head self-attention mechanism和fully connected feed-forward network。其中每个sub-layer都加了residual connection和normalisation,因此可以将sub-layer的输出表示为:

首先我们先看一下Multi-head self-attention。对于普通的attention机制,可以用以下形式表示:

multi-head attention则是通过h个不同的线性变换对Q,K,V进行投影,最后将不同的attention结果拼接起来并通过线性层传输,,可以用以下公式表达:

与CNN和传统的Attention相比,Multi-head attention还是有很多特性的。下面以这句话为例子:The cat stuck out its tongue and licked its owner。当使用CNN处理这段话时,体现的是相对位置的不同线性变换。

当使用普通的Attention时,体现的是权重的平均,如下图所示:

当使用Multi-Attention时,在输入和输出上具有不同线性变换的并行行Attention层,如下图所示:

其次是Position-wise feed-forward networks。这层主要是提供非线性变换。

2.Decoder

Decoder和Encoder的结构差不多,但是多了一个attention的sub-layer,这里先明确一下decoder的输入输出和解码过程:

  • 输入:encoder的输出和对应i-1位置decoder的输出。所以中间的attention不是self-attention,它的K,V来自encoder,Q来自上一位置decoder的输出
  • 输出:对应i位置的输出词的概率分布
  • 解码:这里要特别注意一下,编码可以并行计算,一次性全部encoding出来,但解码不是一次把所有序列解出来的,而是像rnn一样一个一个解出来的,因为要用上一个位置的输入当作attention的query

明确了解码过程之后最上面的图就很好懂了,这里主要的不同就是新加的另外要说一下新加的attention多加了一个mask,因为训练时的output都是ground truth,这样可以确保预测第i个位置时不会接触到未来的信息。

3.Positional Encoding

截止目前为止,我们介绍的Transformer模型并没有捕捉顺序序列的能力,也就是说无论句子的结构怎么打乱,Transformer都会得到类似的结果。换句话说,Transformer只是一个功能更强大的词袋模型而已。

为了解决这个问题,论文中在编码词向量时引入了位置编码(Position Embedding)的特征。具体地说,位置编码会在词向量中加入了单词的位置信息,这样Transformer就能区分不同位置的单词了。那么怎么编码这个位置信息呢?常见的模式有:a. 根据数据学习;b. 自己设计编码规则。在这里作者采用了第二种方式。那么这个位置编码该是什么样子呢?通常位置编码是一个特征向量,这样便于和词向量进行单位加的操作。论文给出的编码公式如下:

在上式中,pos表示单词的位置,i表示单词的维度。关于位置编码的实现可在Google开源的算法中get_timing_signal_1d()函数找到对应的代码。

作者这么设计的原因是考虑到在NLP任务重,除了单词的绝对位置,单词的相对位置也非常重要。根据公式sin(α+β)=sinαcosβ+cosαsinβ以及cos(α+β)=cosαcosβ-sinαsinβ,这表明位置k+p的位置向量可以表示为位置k的特征向量的线性变化,这为模型捕捉单词之间的相对位置关系提供了非常大的便利。

Transformer是第一个用纯attention搭建的模型,算法的并行性非常好,并且在翻译任务上也获得了更好的结果,因此Transformer也可以用在NLP的其他任务上。但是,Transformer一味的去除掉了RNN,因此RNN和Transformer的结合也许会更好。

5.BERT

Bert模型是Google在2018年10月发布的语言表示模型,Bert在NLP领域横扫了11项任务的最优结果,可以说是最近NLP中最重要的突破。Bert模型的全称是Bidirectional Encoder Representations from Transformers,BERT模型的目标是利用大规模无标注语料训练、获得文本的包含丰富语义信息的Representation,即:文本的语义表示,然后将文本的语义表示在特定NLP任务中作微调,最终应用于该NLP任务。

BERT模型的主要输入是文本中各个字/词的原始词向量,该向量既可以随机初始化,也可以利用Word2Vector等算法进行预训练以作为初始值;输出是文本中各个字/词融合了全文语义信息后的向量表示。

BERT将多个transformer编码器堆叠在一起。BERT卓越的性能基于两点。首先创新预训练任务Masked Language Model (MLM)以及Next Sentence Prediction (NSP). 其次训练BERT使用了大量数据和算力。

MLM使得BERT能够从文本中进行双向学习,也就是说这种方式允许模型从单词的前后单词中学习其上下文关系。此前的模型这是做不到的。此前最优的算法称为Generative Pre-training (GPT) 该方法采用了从左到右的训练方式,另外ELMo 采用浅双向学习(shallow bidirectionality)。

而近日,百度提出知识增强的语义表示模型 ERNIE(Enhanced Representation from kNowledge IntEgration),并发布了基于 PaddlePaddle 的开源代码与模型,在语言推断、语义相似度、命名实体识别、情感分析、问答匹配等自然语言处理(NLP)各类中文任务上的验证显示,模型效果全面超越 BERT。由此可以看出,预训练模型已成为近来NLP领域的潮流。

本文使用 文章同步助手 同步

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容