今天学习超级火热的Bert模型来进行词向量的学习。
BERT(Bidirectional Encoder Representations from Transformers)是基于Transfomer机制的,大有替换Word2Vec的趋势。

原始词向量,诸如Word2Vec和GloVe的表示方法是无法解决多义词问题,基ELMO(基于RNN)可以解决多义词问题,但是无法并行化,深度也不会很深(无法提取更深层特征)。

一:Bert结构
Bert是利用Transformer模型的Encoder部分进行词向量训练的,至于有什么优点,那就是都继承于Transformer了。这也是我上一篇博文学习Transformer的原因,因为如果了解了Transformer的结构和计算过程,Bert也就自然不再话下了。

因此我就不多余画它的结构了,要是不熟悉的可以去看看Transformer模型的Encoder部分的结构。

1:可以并行化,放到GPU加速。

2:有attention机制在关注全局信息的同事,也能关注到有用关键部分信息

3:没有RNN结构的梯度消失,因此可以做到长期依赖。

4:可以设计更高层结构抽取深层特征,RNN顶多就几层。

5:跟ELMO一样,词向量也是包含有上下文信息的,能解决多义词问题。

NLP《词汇表示方法(七)BERT》_Bert

我们知道Transformer模型的Encoder部分是由多个小的encoder组成的,一般设计会有几十层。

二:Bert的训练

它的训练很多方法,这里列举两个常用的方法。

方法一:句子中有15%的词汇被随机mask掉(你可以当做不存在,或者设置关注度为0)。交给如下模型去预测被mask掉的词汇是什么。对于中文来说,一般是字,英文是是词。

NLP《词汇表示方法(七)BERT》_词向量_02

方法二:预测两个句子是否是上下逻辑通顺的,能被接在一起的。这里需要增加两个新的词汇< CLS>和< SEP>,分别表示分类符号,和连接符号。如下图所示:

比如是

NLP《词汇表示方法(七)BERT》_情感分析_03

或者是

NLP《词汇表示方法(七)BERT》_Bert_04

如上训练方法后,模型就能理解这个上下文了。

三:Bert用于QA系统
如何使用Bert,我们一般都倾向于end-2-end的做法,训练词向量和下游任务是结合在一起的,一起训练。不分开。

这里我们还多学习点Bert用于问答系统的设计的内容,也可以叫做阅读理解题,输入是文章内容和问题句子,输出则是答案在文章的位置,这里有个限制就是答案的词汇必须是存在于文章,且连续的,模型如下。
文章D={d1,d2,d3,…,dn}
问题Q={q1,q2,q3,…,qm}
答案A={a_s, a_e},分别表示在D中单词的起始下标和结束下标。

比如:

文章D:I Love China, Because She is my homeland.

问题Q:Where are you from?

答案A:China

NLP《词汇表示方法(七)BERT》_情感分析_05

具体的QA Model如下所示:为了画图方便,我分开画图,真正计算的时候是一起计算的哈。

求起始位置

NLP《词汇表示方法(七)BERT》_词向量_06

求结束位置

NLP《词汇表示方法(七)BERT》_词向量_07


四:其他使用

1:情感分析和文章分类

输入单个句子,输出是其分类,做情感分析【星级,打分……】或者是文本分类【新闻,体育,金融……】,

NLP《词汇表示方法(七)BERT》_Bert_08

2:词性分类

输入是单个句子,输出是每个单词的类别比如词性标注,单词类别,命名实体识别。

比如:

NLP《词汇表示方法(七)BERT》_词向量_09

3:期望假设判断

输入两个句子,判断两个句子是不是逻辑通顺的。这个在训练的时候介绍过。给一个预期和一个假设,看看是否假设成立。

NLP《词汇表示方法(七)BERT》_词向量_10