有些时没有更新blog,最近被工做弄的很闹心,拖了又拖,仍是把最近的一些nlp模型研究学一下。函数
虽然如今没有这这一块工做,可是总的来讲,新出来的这些个模型,仍是没有让人眼前一亮的东西出来。Bert的出现多是暂时统一了江湖,可是底层结构不改,仍是在提高那1%。学习
Elmo(Embeddings from Language Models),是allen NLP 在18年6月NAACL上发的一个词向量训练模型。3d
就是说,Elmo的做用就是训练一个模型,用来表示某个词,换句话说,和word2vec和GloVe功能是同样的,这个新的训练方法有两点进步:orm
具体是什么意思呢,由于不少词它表达的意思是随着语境而变化的,好比说“今年的苹果很贵,13块一斤”和“今年的苹果很贵,高配要1万块”。这两个句子里的苹果显然不是一个东西,可是咱们以前用的词向量word2vec和GloVe,都不能表达出这两个词之间的差异。
因此Elmo要解决这个问题。blog
Elmo为何能有这个能力来联系上下文表达出词义。其实能够想一想,什么模型能够联系上下文,无疑CRF和RNN对不对。而CRF是经过几率图的形式,将每一步的几率向下传递,这就没办法给出每个词的输出。可是咱们在LSTM中,每个cell是又两个输出的,一个是c(x)(细胞状态),一个是h(x)(隐藏层状态),这两种状态中都包含以前的信息。
这里咱们想到,从前到后是一种信息,从后到前又是一种信息,因此用双向模型所拥有的信息会更多。若是把双向每个cell的隐藏层信息的向量组合起来,最后再接一个softmax(也有取最上一层的输出),最后训练出的向量即为咱们想要的词向量。get
你们其实看张图已经能够很清楚的看到ELMO的结构了,也没有那么复杂,对比和word2vec训练出的词向量:it
上elmo的效果:io
由于bert统治性的地位,bert我要单独用一篇文章讲。这里来介绍GPT。
GPT是openAI早于BERT的一个模型,可是因为宣传缘由,致使GPT1.0并无出个大新闻,可是GPT的单项语言模型在GPT2.0为本身正名,虽然尚未在GLUE上大展拳脚,可是我相信,按照目前的趋势,GPT3.0必定会大展拳脚,打掉bert。这篇文章写的很不错GPT和BERT的现状和前景。form
说GPT以前,我想说结合Bert和GPT来看,LSTM颇有可能淘汰,而被Transformer全方位的取代,缘由有两点:class
GPT采用了单项的Transformer完成预训练任务,而且将12个Trm叠加起来,而训练的过程其实很是的简单,就是将句子n个词的词向量(第一个为<SOS>)加上Positional Encoding后输入到前面提到的Transfromer中,n个输出分别预测该位置的下一个词(<SOS>预测句子中的第一个词,最后一个词的预测结果不用于语言模型的训练)。
和Bert相同的是,GPT也是分两个阶段进行训练,第一阶段预训练后还有一个fine-tune。(由于GPT发布的比bert早,因此是否是bert抄GPT的呢?)
上一步中最后一个词的输出咱们没有用到,在这一步中就要使用这一个输出来做为下游监督学习的输入,这样就运用少许的带标签数据对模型参数进行微调。
而后接下来一步就是我以为这个模型很牛逼的地方了,为避免Fine-Tuning使得模型陷入过拟合,文中还提到了辅助训练目标的方法,相似于一个多任务模型或者半监督学习。具体方法就是在使用最后一个词的预测结果进行监督学习的同时,前面的词继续上一步的无监督训练,使得最终的损失函数成为:
针对不一样任务,须要修改输入数据的格式:
站着把监督和无监督都办了,真是牛逼。这篇文章写的很是好https://zhuanlan.zhihu.com/p/69290203。
以上是GPT1.0,而GPT2.0主要改进我以为除了对Transformer有细微的改动以外,还有就是增大了参数容量(变成了1.5亿参数。。),还有训练数据加大(800W高质量网页内容)。这些改变就让GPT2.0变得煊赫一时(好像是有钱就是牛逼,暴力提高法),不得不期待一下GPT3.0 能作到什么地步。
好的,上到这里就完了,下来好好讲一讲Transformer和Bert。