NLP学习-Task 4: Contextual Word Embeddings
更新流程↓
Task 1: 简介和词向量Word Vectors
Task 2: 词向量和词义Word Senses
Task 3: 子词模型Subword Models
Task 4: Contextual Word Embeddings
Task 5: 大作业
日本人综艺感从昭和时代开始就这么强了吗?
今日份的舒适
常见餐桌礼仪
文章目录
1. ELMo
Allen实验室认为好的词表征应该同时兼顾两个问题:一是单词在语义和语法上的复杂特点;二是随着语言环境的改变,这些用法也应该随之变化。
为此,Allen实验室提出了deep contextualized word representation(深度情景化词表征)。这种算法的特点是每个词的表征都是整个输入语句的函数。
具体做法:
- 现在大语料上以 language model为目标训练处 Bi-LSTM模型,利用它产生词语的表征 (pre-trained biLM模型)。ELMo因此得名embedding from language model。
- 为了应用在下游NLP任务中,一般先利用下游任务的语料库(此时,忽略掉label)进行 language model的微调(fine tuning),这种微调相当于一种domain transfer。
- 然后才是利用label的信息进行supervised learning。
ELMo表征是“深”的,就是说它们是biLM的所有层的内部表征的函数。这样做的好处是能够产生丰富的词语表征。高层的LSTM的状态可以捕捉词语意义中和语境相关的那方面的特征(比如可以用来做语义的消歧),而低层的LSTM可以找到语法方面的特征(比如可以做词性标注)。如果把它们结合在一起,在下游的NLP任务中会体现优势。
1.1. Bidirectional language models
ELMo顾名思义是从Language Models得来的embeddings,确切的说是来自于Bidirectional language models。具体可以表示为:
这里的是一系列的tokens,作为语言模型可能有不同的表达方法,最经典的方法是利用多层的LSTM,ELMo的语言模型也采取了这种方式。所以这个Bidirectional LM由stacked bidirectional LSTM来表示。
假设输入是的表示。在每一个位置,每一层LSTM上都输出相应的context-dependent的表征,,代表LSTM的某层layer。例如顶层的LSTM的输出可以表示为:,通过Softmax层来预测下一个token 。
最开始两个概率的对数极大似然估计Loglikehood表达如下:
这里的代表token embedding, 代表softmax layer的参数。
1.2. ELMo
对于每一个token,一个层的biLM要计算出共个表征:
这里是简写,当时,代表token层。时,同时包括两个方向的表征。
在下游的任务中, ELMo把所有层的R压缩在一起形成一个单独的vector。(在最简单的情况下,可以只保留最后一层的。)
具体来讲如何使用ElMo产生的表征呢?对于一个supervised NLP任务,可以分以下三步:
- 产生pre-trained biLM模型。模型由两层bi-LSTM组成,之间用residual connection连接起来。
- 在任务语料上(注意是语料,忽略label)fine tuning上一步得到的biLM模型。可以把这一步看为biLM的domain transfer。
- 利用ELMo的word embedding来对任务进行训练。通常的做法是把它们作为输入加到已有的模型中,一般能够明显的提高原模型的表现。
2.GPT
GPT的核心思想是先通过无标签的文本去训练生成语言模型,再根据具体的NLP任务(如文本蕴涵、QA、文本分类等),来通过有标签的数据对模型进行fine-tuning。
具体来说,在这篇论文中提出了半监督的方法,即结合了无监督的预训练和有监督的fine-tuning。论文采用两阶段训练。首先,在未标记数据集上训练语言模型来学习神经网络模型的初始参数。随后,使用相应NLP任务中的有标签的数据地将这些参数微调,来适应当前任务。
模型的结构是使用了多层的单向Transformer结构(《Attention is All you need》提出)。下图是GPT语言模型的结构:
2.1. 无监督的预训练
对于无标签的文本,最大化语言模型的极大似然函数: 这里的是文本上下文窗口的大小。
论文中使用的是多层Transformer的decoder的语言模型,input为词嵌入以及单词token的位置信息;再对transformer_block的输出向量做softmax,output为词的概念分布。具体公式如下:
这里表示的上下文,是词向量矩阵,是位置向量矩阵。
2.2. 有监督的fine-tuning
在对模型预训练之后,采用有监督的目标任务对模型参数微调。假设一个有标签的数据集,假设每一条数据为一个单词序列以及相应的标签,通过之前预训练的模型获得输出向量,再送入线性输出层,来预测标签
Loss函数为: 最后,将两阶段的目标函数通过超参相加训练整个模型:
2.3. 具体任务的模型微调
对于文本分类,只需要在预训练模型上微调。对于QA任务或者文本蕴含,因为预训练模型是在连续序列上训练,需要做一些调整,修改输入结构,将输入转化为有序序列输入
-
文本蕴含 :将前提和假设序列拼接,中间用($)符号来分隔两个序列。
-
文本相似度:分别将两个序列输入,通过模型输出两个序列的特征向量,再逐元素相加输入线性层。
-
问答和常识推理:给定上下文文本,问题,一组可能的候选答案 ,将上下文文本、问题以及每个候选答案拼接起来,得到这样一个序列 $ ,再将该序列输入预训练模型,经softmax层得到候选答案的概率分布。
3. BERT
Bert(原文)是谷歌的大动作,公司AI团队新发布的BERT模型,在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩,包括将GLUE基准推至80.4%(绝对改进7.6%),MultiNLI准确度达到86.7% (绝对改进率5.6%)等。可以预见的是,BERT将为NLP带来里程碑式的改变,也是NLP领域近期最重要的进展。
BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder。模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
BERT采用了Transformer Encoder的模型来作为语言模型,Transformer模型来自于经典论文《Attention is all you need》, 完全抛弃了RNN/CNN等结构,而完全采用Attention机制来进行input-output之间关系的计算,如下图中左半边部分所示:
Bert模型结构如下:
BERT模型与OpenAI GPT的区别就在于采用了Transformer Encoder,也就是每个时刻的Attention计算都能够得到全部时刻的输入,而OpenAI GPT采用了Transformer Decoder,每个时刻的Attention计算只能依赖于该时刻前的所有时刻的输入,因为OpenAI GPT是采用了单向语言模型。