今天是BERT

借鉴了水奈樾的随笔哦

自google在2018年10月底公布BERT在11项nlp任务中的卓越表现后,BERT(Bidirectional Encoder Representation from Transformers)就成为NLP领域大火、整个ML界略有耳闻的模型,网上相关介绍也很多,但很多技术内容太少,或是写的不全面半懂不懂,重复内容占绝大多数(来自百度的搜索)


词向量模型,

word2vec——>ELMo:

  结果:上下文无关的static向量变成上下文相关的dynamic向量,比如苹果在不同语境vector不同。

操作:encoder操作转移到预训练产生词向量过程实现。

ELMo——>BERT:

结果:训练出的word-level向量变成sentence-level的向量,下游具体NLP任务调用更方便,修正了ELMo模型的潜在问题,。

  操作:使用句子级负采样获得句子表示/句对关系,Transformer模型代替LSTM提升表达和时间上的效率,masked LM解决“自己看到自己”的问题

让我们来回顾一下Word2vector

word2vector可以把此映射到更高的空间上,这种映射是固定的,也就是语料库是怎么样的定义,vector就会是怎样的,,这种方法对于一些token来说,有着非常好的作用,比如说一些token对应的现实生活中的意义,电话--手机--座机

缺点也就暴露出来了,这种算法对于语料库的要求比较高,因为完整的预料才能训练出更准确地vector,一般中小公司是不会花时间和精力来搞这些的。

还要说的是,Word2vector

相当于一个奇数的N元语言模型,这样利用一层神经网络,计算softmax来获得预测词的概率,行程哥哥词映射到高维的向量表示。

ELMO

因为通常情况下,词语是结合前后相关的语境来定位意思的,ELMO使用BI-LSTM作为encoder模型,利用LSTM来记住词语前后文,联系相关token是一种相对于word2vector比较优化的方法,这样的话词语的向量就是dynamic的向量表示,

然而正向LSTM和逆向LSTM是分开训练的,l他们的结果从cat之后就是改词的向量表示,最后的loss function也是相加得到结果

另一个问题就是预测值很大程度上会预测出本身,一句话经过分词后为A,B,C,D,经过双层LSTM后可以出现要BCD,ACD,ABD,ABC,再经过训练后就会成为ACD,ABCD,ABCD,ABD,本身在第二个位置需要预测B结果B 已经出现了,所以很大程度上会出现自己预测自己的概率我曾经对于1000 条问答数据进行双向LSTM进行answer self conduct,可惜数据量比较小,存在同样的词接连出现很多次,这应该就是原因

BERT

类似完形填空,把需要预测的词用标记符号标记,这样就可以进行双向encoding了,

BERT利用了两个TRANSFORER

学习句子/句对关系表示,句子级负采样。首先给定的一个句子,下一句子正例(正确词),随机采样一句负例(随机采样词),句子级上来做二分类(即判断句子是当前句子的下一句还是噪声),类似word2vec的单词级负采样

这里主要介绍BERT的三个亮点Masked LM、transformer、sentence-level

 Masked Language Model

# 原本叫cloze test,是完形填空的意思。

随机mask语料中15%的token,然后将masked token 位置输出的最终隐层向量送入softmax,来预测masked token。

有80%的概率用“[mask]”标记来替换——my dog is [MASK]

有10%的概率用随机采样的一个单词来替换——my dog is apple

有10%的概率不做替换——my dog is hairy

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容