1. BERT的基本原理是什么?
BERT可以看成一个自编码的语言模型,主要用两个任务训练该模型。
- MLM(Masked LM)
- 输入一句话的时候,随机地选一些要预测的词,然后用一个特殊的符号**[MASK]来代替它们,之后让模型根据所给的标签去学习**这些地方该填的词
- NSP(Next Sentence Prediction)
- 在双向语言模型的基础上额外增加了一个句子级别的连续性预测任务,即预测输入BERT的两段文本是否为连续的文本
2. BERT是怎么用Transformer的?
BERT只使用了Transformer的Encoder模块,与Transformer本身的Encoder端相比,BERT的Transformer Encoder端输入的向量表示,多了Segment Embeddings。
3. 请简要介绍一下Masked LM
给定一句话,随机抹去这句话中的一个或几个词,要求根据剩余词汇预测被抹去的几个词,类似于完形填空
MLM可以看作是一种引入噪声的手段,增强模型的泛化能力
具体步骤:
如果某个Token在被选中的15%个Token里,则按照下面的方式随机的执行:
- 80%的概率替换成[MASK],比如my dog is hairy → my dog is [MASK]
- 10%的概率替换成随机的一个词,比如my dog is hairy → my dog is apple
- 10%的概率替换成它本身,比如my dog is hairy → my dog is hairy
这样做的好处是,BERT并不知道[MASK]替换的是这15%个Token中的哪一个词(注意:这里意思是输入的时候不知道[MASK]替换的是哪一个词,但是输出还是知道要预测哪个词的),而且任何一个词都有可能是被替换掉的,比如它看到的apple可能是被替换的词。这样强迫模型在编码当前时刻的时候不能太依赖于当前的词,而要考虑它的上下文,甚至对其上下文进行”纠错”。比如上面的例子模型在编码apple是根据上下文my dog is应该把apple(部分)编码成hairy的语义而不是apple的语义。
4. 请简要介绍一下NSP(Next Sentence Prediction)
判断第二句话在文本中是否紧跟在第一句话之后,类似于段落排序
将一篇文章的各段打乱,通过重新排序把原文还原出来,这其实需要对全文大意有充分、准确的理解。Next Sentence Prediction 任务实际上就是段落重排序的简化版:只考虑两句话,判断是否是一篇文章中的前后句。在实际预训练过程中,作者从文本语料库中随机选择 50% 正确语句对和 50% 错误语句对进行训练,与 Masked LM 任务相结合,让模型能够更准确地刻画语句乃至篇章层面的语义信息。
5. EMLo、GPT、BERT三者之间有什么区别?
- 特征提取器:
- EMLo采用LSTM进行提取,GPT和BERT则采用Transformer进行提取。很多任务表明Transformer特征提取能力强于LSTM
- EMLo采用1层静态向量+2层LSTM,多层提取能力有限,而GPT和BERT中的Transformer可采用多层,并行计算能力强。
- 单/双向语言模型:
- GPT采用单向语言模型,EMLo和BERT采用双向语言模型。但是EMLo实际上是两个单向语言模型(方向相反)的拼接,这种融合特征的能力比BERT一体化融合特征方式弱。
- GPT和BERT都采用Transformer,Transformer是encoder-decoder结构,GPT的单向语言模型采用decoder部分,decoder的部分见到的都是不完整的句子;bert的双向语言模型则采用encoder部分,采用了完整句子
6. BERT的输入和输出分别是什么?
-
输入:
- BERT模型通过查询字向量表将文本中的每个字转换为一维向量,也可以利用Word2Vector等算法进行预训练以作为初始值;
- Segment Embeddings:该向量的取值在模型训练过程中自动学习,用于刻画文本的全局语义信息,并与单字/词的语义信息相融合
- Position Embeddings:由于出现在文本不同位置的字/词所携带的语义信息存在差异,因此,BERT模型对不同位置的字/词分别附加一个不同的位置向量以作区分
-
输出
- 文本中各个字/词融合了全文语义信息后的向量表示,
7. Mask LM相对于CBOW有什么异同点?
-
相同点:
- 都是根据上下文预测中心词
-
不同点:
- CBOW中的输入数据只有待预测单词的上下文,而BERT的输入是带有**[MASK] token**的“完整”句子
- CBOW模型训练后,每个单词的word embedding是唯一的,因此并不能很好的处理一词多义的问题,而BERT模型得到的word embedding(token embedding)融合了上下文的信息,就算是同一个单词,在不同的上下文环境下,得到的word embedding是不一样的。
8. BERT的两个预训练任务对应的损失函数是什么
-
Mask-LM损失函数
-
NSP损失函数
-
两个任务联合学习的损失函数是:
其中 是 BERT 中 Encoder 部分的参数
是 Mask-LM 任务中在 Encoder 上所接的输出层中的参数
则是句子预测任务中在 Encoder 接上的分类器参数。
被 mask 的词集合为 M, 表示一个词典大小
9. 词袋模型到word2vec改进了什么?
-
词袋模型(Bag-of-words model)
将一段文本(比如一个句子或是一个文档)用一个“装着这些词的袋子”来表示,这种表示方式不考虑文法以及词的顺序。而在用词袋模型时,文档的向量表示直接将各词的词频向量表示加和。通过上述描述,可以得出词袋模型的两个缺点:
- 词向量化后,词与词之间是有权重大小关系的,不一定词出现的越多,权重越大。
- 词与词之间是没有顺序关系的。
-
word2vec
是一种考虑词语位置关系的一种模型。通过大量语料的训练,将每一个词语映射成一个低维稠密向量,通过求余弦的方式,可以判断两个词语之间的关系,word2vec其底层主要采用基于CBOW和Skip-Gram算法的神经网络模型。
10. BERT应用于单词拼写错误的数据是否还是有效?
如果有少量的单词拼写错误,那么造成的影响应该不会太大,因为BERT预训练的语料非常丰富,而且很多语料也不够干净,其中肯定也还是会含有不少单词拼写错误这样的情况。但是如果单词拼写错误的比例比较大,比如达到了30%、50%这种比例,那么需要通过人工特征工程的方式,以中文中的同义词替换为例,将不同的错字/别字都替换成同样的词语,这样减少错别字带来的影响。
11. BERT优缺点
-
优点:
- BERT相较于原来的RNN、LSTM可以做到并发执行,同时提取词在句子中的关系特征
- 在多个不同层次提取关系特征,进而更全面反映句子语义
- 相较于word2vec,其又能根据句子上下文获取词义,从而避免歧义出现
-
缺点:
- 模型参数太多,而且模型太大,少量数据训练时,容易过拟合。
参考文献
- https://www.nowcoder.com/discuss/351902
- BERT论文 https://arxiv.org/abs/1810.04805
- BERT模型详解 http://fancyerii.github.io/2019/03/09/bert-theory/
- 如何评价 BERT 模型?https://www.zhihu.com/question/298203515
- 【NLP】Google BERT详解 https://zhuanlan.zhihu.com/p/46652512