Deep Contextualized word representations前奏
Distributed Representations of Words and Phrases and their Compositionality
目标:通过新提出的模型结构从大数据集中提取出单词的连续向量表示。
特点:1.更低的计算消耗。2.从模型中得到的向量能得到非常好的单词句法和语义的相似度。
先前相关工作:
- Latent Semantic Analysis(LSA) 和Latent Dirichlet Allocation(LDA)
- neural network language model
(NNLM) - Language Modeling for Speech Recognition in Czech
- Neural network based language models for higly inflective languages
模型复杂度比较
定义复杂度为模型的参数量
对于模型的要求,最大化正确率,最小化计算复杂度。
而训练的复杂度定义为正比于:
其中E表示训练的epoch,T表示单词的数目,Q是模型的结构(参数量)
Feedforward Neural Net Language Model(NNLM)
Q=N×D+N×D×H+H×V
其中H是隐层大小,V是输出层的维度(词个数),投影层(P)的维度是N×DRecurrent Neural Net Language Model(RNNLM)
Q=H×H+H×V
其中H是隐层大小,V也是表示词总数
新模型
CBOW
CBOW类似于NNLM,它移除了NNLM的非线性隐层,并将投影层共享到所有词上,所有的单词都投影到相同位置(这些词还要被平均一下)。然后构建一个log-linear分类器。这就是CBOW.
其复杂度为:
其中N×D表示INPUT到PROJECTION的矩阵,D×log_2(V)为PROJECTION映射到OUTPUT的矩阵
Skip-gram
用当前词作为输入到log-linear分类器通过一个continuous projection layer,然后来预测该输入词的前后词(上下文).
复杂度为:
其中C是上下文的词数
结果
能通过简单的代数运算能得到词与词之间的关系(语义关系)。
可以在向量空间中找到与X在余弦距离上最接近的单词.
有这种语义关系的词向量可以用来提高现在的许多NLP应用,例如机器翻译,信息提取和问答系统,还有可能促使一些应用被发明。
Distributed Representation of Words and Phrases and their Compositionality
上文的缺陷:
- Word representation被限制于他不能表达符合语言习惯的短语
- 速度慢
- 表达还不够精确
本文改进了上文得到的向量质量和模型的训练速度。
目标:提高词向量质量和模型的训练速度.学习到文本中短语的意思.文中举例:”Canada”和”Air”不能通过简单的结合来表示短语”Air Canada”的意义。
Skip-gram model
其中c是训练上下文的大小。c越大往往更多训练例因此能导致更高的正确率,但是训练时间开销大.
Hierarchical Softmax
对完整的softmax的计算效率估计的方法有Hierarchical Softmax(分层Softmax).
该方法不用为了获得概率分布而评估神经网络中的W个输出结点,而只需要评估大约log2(W)个结点。层次Softmax使用一种二叉树结构来表示词典里的所有词,V个词都是二叉树的叶子结点,而这棵树一共有V−1个非叶子结点。
基本原理
- 根据标签和频率建立霍夫曼树(label出现的频率越高,Huffman树的路径越短)
- Huffman中的每个叶子节点代表一个label
- 层次之间的映射
将输入层中的词和词组构成特征向量,再将特征向量通过线性变换映射到隐藏层,隐藏层通过求解最大似然函数,然后根据每个类别的权重和模型参数构建Huffman树,将Huffman树作为输出。
- 模型的训练
Huffman树中每一叶子结点代表一个label,在每一个非叶子节点处都需要作一次二分类,走左边的概率和走右边的概率,这里用逻辑回归的公式表示
然后作用一个极大似然估计。
Negative Sampling
一种替代分层Softmax的方法是Noise Contrastive Estimation(NCE).
然而NCE能展现Softmax估计最大log概率,Skip-gram只关注学习高质量的向量表示.所以作者就简化NCE使其只要维持其质量就好.作者定义Negative sampling(NEG) 通过目标函数:
样本生成:
- 例句: I want a glass of orange juice to go along with my cereal 构造一个新的监督学习问题,给定一对单词 orange 和 juice ,预测这是否是一对 上下文词-目标词 (context-target) ,在这个样本中,orange 和 juice 就是一个正样本。 然而对于 orange 和 king 就是一个负样本。
- 正样本 的生成是采样得到一个上下文词和一个目标词。其中先在句中随机均匀的选取一个单词作为上下文词。然后在其左右两边一定词距内随机选择一个单词作为目标词。 并且将 标签 设置为1.
- 负样本 的生成是使用和正样本一样的上下文词,然后从字典中随机选取一个单词构成一个组合。并且将 标签 设置为0. 其中同一 上下文词 生成 K个 负样本
注意:正负样本 的区别仅取决于单词对的来源,即是 of 也在 orange 的设定词距之内,但是作为随机从字典中选取的单词, of - orange 单词对仍然被标记为负样本。
在本次提出的算法中 输入数据x 将被设定为 context-word 的单词对,预测结果y 将被设置为 target 算法的目的即是区分 样本采样的来源
神经网络算法流程
- 如果输入词是 orange ,即词典中的第6257个词,将其使用one-hot向量表示 $o_{6257}$
- 再传递给E(词嵌入向量矩阵),通过两者相乘得到 orange 的嵌入向量 $e_{6357}$
- $e_{6357}$是一个1W维(字典中总单词数量)的向量,可以看成是1W个可能的logistic回归分类问题,其中一个是用来判断目标词是否是 juice 的分类器,当然也有用来判断 king,book,the… 等词汇是否是目标词的分类器。但是每次迭代不都是训练所有的样本, 每次迭代只会训练一个正样本和随机选取的 K 个负样本
- 此算法将需要计算10000个维度的softmax问题转化为10000个二分类问题,每一个都易于计算,每次迭代要做的只是训练其中的 K+1 个样本,其中一个正样本和随机选取的同一个Context的 K 个负样本
- 此算法被称为 负采样 , 因为在挑选一个 正样本 的同时,随机生成 K个负样本
负样本采样方法
- 仅考虑单词在 语料库 中出现的频率,会导致负样本中 the, of, and … 等介词出现的频率过高
- 仅考虑单词在 词汇表 中出现的频率,即在 词汇表 中随机采样,分母是词汇表中的总词数,这样采样十分没有代表性。
- 论文提出采样公式为:其中$f(w_i)$表示单词在语料库中的词频
Learning Phrases
采用一种简答的数据驱动的方法,其中短语形成基于unigram和bigrams数目,通过使用
其中delta被用作为低估系数并且用来阻止许多短语包含很不频繁的形成单词(通俗讲就是阻止很低频的词汇也赋予较高的score).用上述score的bigram当超过了给定的阈值,可以视为可以作为短语.
在处理的时候会多次处理训练集,并将score的阈值不断调小,这样可以使得模型能够将多词组成的phrase通过多次的扫描数据集不断拼接出来。
Additive Compositionality
在模型中训练的词向量存在着如下的关系:vec(Russian)+vec(river) = vec(Volga River).这种可能可以理解成词向量其实是包含了它的分布特性在向量表示中,因为词向量就是通过用目标词的词向量预测它的上下文中的词来训练词向量的。所以它会在向量中包含它的上下文信息。Volga River很频繁的与Russian以及River出现在相同的语境中。而向量加法操作可以看成是两个词语的上下文分布的并操作,因为只有两个向量都很大的维度,才会在结果向量中比较突出,代表这个语义更明显。所以在Russian与river的并操作上下文中,Volga River的上下文也与其类似,所以它们的词向量也很接近。
Distributed Representations of Sentences and Documents
Bag-of-words有两个缺点:
- 丢了单词的顺序
- 忽视了单词的语义
本文提出了一个Paragraph Vector(非监督模型)从变化长度的文本中学习到固定长度的特征
目标:克服了Bagofwords模型的两个缺点.在文本分类和情感分析任务中实现了state-of-the-art result.
特点:
- 能为不同长度的段落训练出相同长度的向量
- 不同段落的词向量不共享,说白了就是,每出现一个新段落,就要训练一个新的向量与之对应。其实也很好理解,不同段落的主题不同,其段向量自然不一样
- 词向量共享.根据训练集训练出来的词向量在任何地方都是通用的,不同段落的同一词语的意思应该是一致的,所以词向量不变.
算法
学习单词表示向量
即前面文章提到的word2vec
Paragraph Vector: A distriuted memory model
这里与上图的唯一改变是增加了一个额外的paragraph标志,通过一个矩阵D映射到向量.
注意点:
1、测试时,会出现不同的段落。例如,我们要测试the dog sat 的下一个单词,这个句子出现在段落P中,但段落P在之前并未出现过,也就是我们尚不知道段落P的向量(”the”、“dog”,“ sat”的词向量都是知道的,已经训练出来了)。此时的做法是固定词向量,只将段向量当作变量来进行BP算法,直到收敛,得到最终的段向量。再根据这个新训练的段向量去进行预测。
2、论文中提到,将CBOW和Skip_gram模型结合起来一起来训练段向量效果更佳。
3、主要的算法流程如上,具体实施时会进行很多优化,例如霍夫曼树的使用。
Paragraph Vector without word ordering: Distributed bag of words
输入一个paragraph vector迫使模型在输出端预测该段落经随机采样的单词.
总结
论文中提到的段向量的算法只是众多段向量算法的一种。而这个算法又是由word2vec演化而来的,所以理解了word2vec之后,再来了解这个算法就会很容易。但是至今为止,词向量乃至神经网络都缺少现实的理论基础(现实意义?),例如我们得到的词向量或者段向量的每一维到底代表什么,都无从得知。所以,词向量还有很长的路要走!!再说点题外话,BP算法类似于现实中的负反馈调节,根据结果不断调整参数,让参数去适应结果。词向量的训练亦是如此。但是,我们是否可以从另一个角度出发:我们能否为语言设计一个数据结构(类似向量这种),使得这种数据结构在数学上的意义和在现实中的意义一致,然后我们用这种数据去预测或者翻译就简单多了(因为计算机能够理解其数学意义,而数学意义又对应着现实意义)。当然这是一种猜测(用word2vec训练出的词向量在数学意义上确实达到了某种一致,例如同义的词语其欧式距离会很接近)。
Deep Contextualized word representations
本文直接受启发于2017年的同一作者在序列标注的半监督模型上的发现(Semi-supervised sequence tagging with bidirectional language models.),通过增加一个预训练模型来增加模型的效果.
目标:挖掘一种更好的词表示:它们能更好地表达复杂的语义和语法的特征.能准确的对不同上下文进行反应.
改进:与Semi-supervised sequence tagging with bidirectional language models.一样,这里也是通过LM预训练一个词向量。不同的是,ELMO的表示更深,并且它是用双向LM的所有中间层的函数来表示.(结合了内部状态来表达)
特点:
- 理论上:原先的词向量是固定的,不同句子里的词向量是相同的.但本模型会考虑对不同句子中的相同词赋予不同的词向量(通过BiLM预训练).
- 结构上:发现BiLM的较低层次的隐藏单元的向量能很好的抓住词汇的语法信息,可以在POS的任务上发挥其作用。而BiLM的较高层次的隐藏单元的向量很好地抓住词汇地意义表示(上下文相关的表示),即使不经过微调词向量也能得到一个很好的结果
结果:将ELMo与已有的模型结合后会发现在效果上会有改进
模型
双向language model
给定一个长度为N的token序列,$(t_1,t_2,…,t_N)$
BiLM基本公式如下:
这里利用了两个LSTM,分别向左向右
由于ELMo更深了,又要充分利用每一层的信息,所以考虑将每一层的输出作为词的表示(这里每一层表示一个biLSTM)
其中$x_k^{LM}$是输入的embedding表示,$h_{k,j}^{LM}$是第j层第k个单词的BiLSTM的两个方向的拼接结果.
得到上述表示后,还不能直接将其作为对应各种NLP任务的词向量,还要因地制宜地对其进行一些微调,公式如下:
其中$\lambda$ 和s分别起着控制缩放和权重地作用,它们地取值需要根据具体任务来进行调整.
(注意: biLM 不同层的激活值可能会有不同的分布, 可采用 Layer Normlaition.)
如何应用到后续任务中?
直接在 biLM 的基础之上连接自己的神经网络,并且将 biLM 的参数固定 (根据实际情况, 如果只是轻微的 fine-tune 应该也没问题),将biLM的输出当作自己网络的输入,根据任务的不同,可以调整为$[x_k;ELMo_k^{task}]$或$[h_k;ELMo_k^{task}]$
总结
ELMo相当惊艳,其能相当大程度地提高训练效率: 在其中一项实验中, 不使用 ELMo 的模型在 486 个 epochs 后取得达到最大 F1 值; 使用 ELMo 只用了 10 个 epochs。
由于 ELMo 的词向量是不同层状态向量的函数, 对 attention-based model, 相当于后续层可以接触到 biLM 的内部表示; 综合了不同层的表示, ELMo 的词向量还具有消除歧义的作用。
疑问
- ELMo动机:
- ELMo相对于word2vec、glove的优点:word embedding往往是在与当前上下文无关,之前预训练后得到的词向量往往是固定的。而ELMo能更好挖掘词在当前语境下的意义.ELMo是与当前语境相关的词表示.比如“风头”,在不同语境下褒贬不同,”他这人太爱出风头”和”这次比赛他出尽了风头”。ELMo能帮助我们明确当前语境下的词含义。
- ELMo采用的模型:BiLMs,或者说是用多层的BiLSTM来作为LM.
- ELMo属于Feature-Based.
- ELMo如何进行拼接?通过将多层LSTM的中间层的输出$h_{k,j}^{LM}$通过函数$\lambda^{task}\sum_{j=0}^Ls_j^{task}h_{k,j}^{LM}$拼接起来。
- ELMo解决了什么问题:解决了原来词向量一成不变的问题,赋予词向量动态性能.并且能更好地表达复杂的语义和语法.
- 用一句话介绍ELMo:动态词向量
- ELMo怎么应用到下游模型:根据任务的不同,可以调整为$[x_k;ELMo_k^{task}]$或$[h_k;ELMo_k^{task}]$,然后将这个作为自己网络的输入.
- ELMo存在问题?1. 空间和时间复杂度高. 2. BiLSTM中的双向只是简单的两个单向的拼接,并不算真正的双向.(欢迎补充)
- 如何评价ELMo?不敢评价大佬的贡献,可能是预训练模型的开端吧,为后续Bert的提出有很大帮助.
讨论中的问题
首先遇到的就是概念不清的问题:
迁移学习与增量学习概念不清:增量学习与迁移学习
- 迁移学习是指用已存有的知识对不同但相关领域问题进行求解的一种机器学习方法。这里迁移学习放宽了上面的两个基本假设,我们可以迁移已有的知识来解决目标领域中仅有少量有标签样本数据甚至没有学习样本的问题。(当然了,目标领域样本量肯定是越多越好的)。当不同元素共享的因素越多,迁移学习就越容易,就好像你学会了骑自行车,可能就很容易学会骑摩托车,但是学会骑自行车再去骑三轮车,可能就会很不适应。
fine-tune是迁移学习中的一种常见的方法。 - 增量学习是指一个学习系统能不断地从新样本中学习新的知识,并能保存大部分已经学习到的知识。其非常类似于人类自身的学习模式。所以增量学习主要关注的是灾难性遗忘(Catastrophic forgetting),平衡新知识与旧知识之间的关系,即如何在学习新知识的情况下不忘记旧知识。
一个增量学习算法应同时具有以下特点:
1) 可以从新数据中学习新知识
2) 以前已经处理过的数据不需要重复处理
3) 每次只有一个训练观测样本被看到和学习
4) 学习新知识的同时能保持以前学习到的大部分知识
5) 一旦学习完成后训练观测样本被丢弃
6) 学习系统没有关于整个训练样本的先验知识
在概念上,增量学习与迁移学习最大的区别就是对待旧知识的处理,增量学习在学习新知识的同时需要尽可能保持旧知识,不管它们类别相关还是不相关的,而迁移学习则只是借助旧知识来学习新知识,学习完成后只关注在新知识上的性能,不再考虑在旧知识上的性能。
这里ELMo更像是训练得到的一种Word Embedding用于下游任务。可以像之前的word embedding
一样固定,也可以进行类似增量学习的方式。
从后期的论文看ELMo的不足
首先就是BiLSTM的设置,ELMo想要通过双向的拼接来达到当前词利用上下文信息的作用。但这样的表达充分么?通过Bert我们知道,这种方式可能融合上下文的能力可能比较弱。
此外,LSTM的抽取特征的能力不如Transformer这也是大家所公认的。