1. 早期NLP预训练模型
1.1 神经网络语言模型(NNLM)
- NNLM由Begio在2003年提出发表在JMLR上。神经网络语言模型的训练目标是给定 的上文个词,预测 出现的概率 ;每个词输入到模型中首先经过One-hot编码,然后查询Look up Table(C),得到每个词的Word embedding:(n-1个词向量进行拼接得到);经过隐藏层,之后再经过softmax层得到词生成的条件概率;其中,假设词表大小为;的维度为,其中表示词向量维度。表示隐层的维度;
- 上式中,为偏置,为输入层到输出层参数,加入输入到输出层的连接能够使得模型快速收敛。为输入层到隐藏层的参数,为隐藏层到输出层的参数。各个参数的维度如下:,,,
- 可以看出NNLM主要的计算集中在隐藏层、输出层之间的矩阵向量运算,以及输出层上的softmax归一化操作。 因此后续的相关研究工作中,很多是针对这一部分进行优化的,其中就包括了word2vec的工作。
- 对神经网络语言模型而言,词向量word embedding只是副产物;Look up table(C)存储着每个词的词向量,它是一个矩阵,矩阵的每一行代表一个单词的词向量,行数等于词汇表大小;矩阵的列数等于词向量维数。
1.2 Word2vec模型
1.2.1 CBow和Skip-Gram模型
-
Wor2vec模型 :跟NNLM模型结构类似,去除了中间的隐藏层减少了计算量,并且其目标主要是用来训练词向量。word2vec模型包含两种结构CBow和Skip-Gram,CBow模型利用单词的上下文预测当前词生成的条件概率,Skip-Gram模型利用当前词预测上下文词生成的条件概率。最后在输出层为了减小softmax的计算,使用层次Softmax和负采样(Negative Sampling)方法减小输出层计算量。层次softmax实现采用的是哈夫曼树,将计算复杂度从 减小到 。
-
对于CBow模型其目标函数为如下对数似然函数:其中表示上下文中的词;代表整个语料库;
-
对于Skip-Gram模型其优化目标函数如下:
1.2.2 层次softmax
- 对于层次softmax实现的CBow模型而言,包括三层:输入层、投影层、输出层;假设由前后各个词组成;与NNLM模型相比:(1)在投影层NNLM是通过词向量拼接的方式得到,然而CBow模型是通过向量相加的方式;(2)NNLM有隐藏层,然而CBow模型去除了隐藏层;(3)NNLM输出层是线性结构,CBow模型的输出是树形结构;
层次softmax实现CBow模型.png
- 输入层:包含中个词的词向量;假设每个词向量维度为;
- 投影层:将输入的个词的向量做求和累加,即;
- 输出层:输出层对应一棵二叉树,它是以语料中出现过的词当叶子结点,以各词在语料中出现的次数当权值构造出来的Huffman树;在这棵Huffman树中,叶子结点共个,分别对应词典D中的词;非叶子结点个;
- 符号定义如下:
(1)表示从根结点出发到达对应叶子结点路径;
(2)表示路径中包含结点的个数;
(3)表示路径中的个结点;其中表示根结点,表示词对应的结点;
(4),表示词的Huffman编码,它由位编码构成;
(5),路径中非叶子结点对应的向量;
- 条件概率的定义,更具体的说就是如何利用向量以及Huffman树来定义函数;由上图可以看出,从根结点出发到达“足球”这个叶子结点,中间共经历了4次分支,而每一次分支都可视为进行了一次二分类; 每一次分类的概率如下所示:
第1次:;
第2次:;
第3次:;
第4次:;
-
最终条件概率的计算公式如下:
-
层次softmax基本思想: 对于词典D中的任意词,Huffman树中比存在一条从根结点到词对应结点的路径(并且这条路径是唯一的)。路径上存在个分支,将每个分支看做做一次二分类,每一次二分类就产生一个概率,将这些概率乘起来就是所需的。将原来softmax回归问题,转换成了Huffman树上求解多个二分类的问题,时间复杂度由O(|V|)下降至O(log|V|)。
1.2.3 负采样方法
- 与层次softmax相比,NEG不使用复杂的Huffman树,而是利用相对简单的随机负采样,能大幅度提高性能;在CBow模型中已知词的需要预测,因此对于给定的词就是一个正样本,其他词就是负样本了。 假设 表示正负样本的集合,其中只有一个正样本;则条件概率的计算公式如下:
- 最终的优化目标如下:从下面的公式可以看出,为了最大化目标函数我们需要最大化正样本的概率,并且最小化所有负样本概率;
- 负采样算法: 对于一个给定的词,如何生成NEG(w)呢?通常的要求是对于那些高频词,被选为负样本的概率应该比较大,反之对于哪些低频词被选中负样本的概率应该比较小。本质上就是一个带权采样的过程。
负采样算法实现.png(1)假设词典中的每一个词对应一个线段,长度为:,表示在语料中出现的次数;现在将语料中所有词的长度进行拼接得到长度为1的单位线段;
(2)随机采样的策略就是每次生成一个之间的随机数,当随机数命中某个线段的范围,将这个线段对应的单词作为负样本;
1.3 Glove模型
- Glove模型:基于全局信息统计词与词之间的共现,构建共现矩阵。构建词向量() 与共现矩阵之间的近似关系,由此构建目标函数 。优化目标函数得到词向量。具体原理参考:GloVe详解
一词多意问题.png
- 早期的预训练模型,训练出的词向量是 静态固定不变 的。即相同的单词,在不同的上下文情况下,其词向量是一样的。
- 对于一词多意的问题很难解决。比如下面的例子,bank在不同的上下文下对应不同的意思:银行,河堤;
- 因此考虑如何解决,在不同的上下文情况下,单词得到不同的词向量?即获取 动态词向量;
2. 动态词向量模型
2.1 ELMo模型
- ELMo模型发表在2018 NAACL会议上,并获得最佳论文奖。ELMo模型使用双层双向LSTM网络,对句子进行建模。其训练目标还是给定单词上下文词,预测当前词出现的条件概率,模型结构如下。左边是一个前向双层LSTM网络,用于编码单词的上文信息;右边是一个后向双层LSTM网络,用于编码单词的下文信息。
- 上式中,表示单词向量,表示softmax层的参数;
- ELMo词向量的应用:对于每一个token而言,假设LSTM网络层数为,则token可由个向量表示;通过对token的每个向量 进行加权输出,将加权后的向量利用到下游任务中。其中三种向量的权值,根据具体任务训练得到。
2.2 BERT模型
- BERT模型2018年由谷歌提出,使用Transformer的Encoder作为BERT基础结构。BERT与ELMo模型不同,它的训练使用了两个任务:Masked LM 和 Next Sentence Prediction (NSP)。
2.2.1 Masked LM任务
- Masked LM任务与Word2vec中的CBow模型有点类似,通过Mask一些输入的词,利用上下文的信息预测这个词。
-
具体的Mask策略: 对于输入的句子,随机的masked句子中15%的词;为了防止fine-tuning的时候
[MASK]
标记没有出现的问题,预训练阶段并不是将词都替换成[MASK]
,具体策略如下:
(1)80%的概率,将词替换成特殊标记[MASK]
;
(2)10%的概率,随机将词替换成词表中任意一个词;
(3)10%的概率,维持当前词不变;
2.2.2 NSP任务
- NSP任务是一个二分类任务;NSP任务,对于fine-tuning阶段QA和NLI效果提升起着重要作用。
2.2.3 BERT模型输入
- 首先输入的句子会使用WordPiece模型得到子词解决unk问题,然后每一个token会有一个对应的embedding(Token embedding);其次对于输入的两个句子都有其对应的embedding(Segment embedding),最后每一个位置都有对应的Position embedding;
BERT模型的输入.png
2.2.4 如何使用BERT?
1) 单文档分类任务
- 例如常见的情感分析,就是单文档分类任务;将学习到的
[CLS]
向量输入到一个线性分类器中,预测得到每个类别的概率。
2) 序列标注任务
- 输入一个句子,输出每个词的label。比如对话系统领域的槽位填充任务就是一个序列标注问题。
3) 多文档分类任务
- 输入两个句子,输出一个label。比如自然语言推理(Natural Language Inference )任务。
4) 问答系统
- Extraction-based Question Answering这种类型的问答,其答案出现在文档中,只需要确定start(s),end(e)的位置。
- 如何计算得到start, end?start和end分别学习两个向量,计算最终的softmax输出概率。
2.3 GPT模型
- GPT模型使用的是Transformer的Decoder,所以其没有考虑下文信息。BERT模型认为这是它主要的缺点。如下图所示,在计算
就
生成的条件概率时,其只考虑了<BOS>, 潮水, 退了
;
- 模型参数数量对比
参考论文
- NNLM论文:A Neural Probabilistic Language Model http://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf
- Word2vec论文:
(1)Efficient Estimation of Word Representations in Vector Space https://arxiv.org/pdf/1301.3781.pdf
(2)Distributed Representations of Words and Phrases
and their Compositionality https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf - Glove论文:GloVe: Global Vectors for Word Representation https://nlp.stanford.edu/pubs/glove.pdf
- ELMo论文:Deep contextualized word representations https://arxiv.org/abs/1802.05365
- BERT论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding https://arxiv.org/abs/1810.04805
- GPT论文:Improving Language Understanding by Generative Pre-Training https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf
- GPT2论文:Language Models are Unsupervised Multitask Learners https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
参考资料
- word2vec 中的数学原理详解
- GloVe详解
- ELMo, BERT, GPT - 台湾大学,李宏毅
https://www.youtube.com/watch?v=UYPa347-DdE&list=PLJV_el3uVTsOK_ZK5L0Iv_EQoL1JefRL4&index=61 - 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 【张俊林】
https://zhuanlan.zhihu.com/p/49271699 - 搞懂 NLP 中的词向量,看这一篇就足够 (https://www.infoq.cn/article/PFvZxgGDm27453BbS24W)
- 【Bert 官方代码】https://github.com/google-research/bert
- 【GLUE数据集下载】https://gist.github.com/W4ngatang/60c2bdb54d156a41194446737ce03e2e
网友评论