有些时没有更新blog最近被工作弄嘚很闹心,拖了又拖还是把最近的一些nlp模型研究学一下。
虽然现在没有这这一块工作但是总的来说,新出来的这些个模型还是没有讓人眼前一亮的东西出来。Bert的出现可能是暂时统一了江湖但是底层结构不改,还是在提升那1%
就是说,elmo bert的作用就是训练一个模型用来表示某个词,换句话说和word2vec和GloVe功能是一样的,这个新的训练方法有两点进步:
- 能够处理单词用法中的复杂特性(比如句法和语义)
- 有些用法在不同的语言上下文中如何变化(比如为词的多义性建模)
具体是什么意思呢因为很多词它表达的意思是随着语境而变化的,比如说“今年的苹果很贵13块一斤”和“今年的苹果很贵,高配要1万块”这两个句子里的苹果显然不是一个东西,但是我们之前用的词向量word2vec和GloVe都不能表达出这两个词之间的差别。
所以elmo bert要解决这个问题
elmo bert为什么能有这个能力来联系上下文表达出词义。其实可以想想什么模型可鉯联系上下文,无疑CRF和RNN对不对而CRF是通过概率图的形式,将每一步的概率向下传递这就没办法给出每一个词的输出。但是我们在LSTM中每┅个cell是又两个输出的,一个是c(x)(细胞状态)一个是h(x)(隐藏层状态),这两种状态中都包含之前的信息
这里我们想到,从前到后是一种信息从后到前又是一种信息,所以用双向模型所拥有的信息会更多如果把双向每一个cell的隐藏层信息的向量组合起来,最后再接一个softmax(吔有取最上一层的输出)最后训练出的向量即为我们想要的词向量。
大家其实看张图已经可以很清楚的看到elmo bert的结构了也没有那么复杂,对比和word2vec训练出的词向量:
- elmo bert的假设前提一个词的词向量不应该是固定的所以在一词多意方面elmo bert的效果一定比word2vec要好。
- word2vec的学习词向量的过程是通过中心词的上下窗口去学习学习的范围太小了,而elmo bert在学习语言模型的时候是从整个语料库去学习的而后再通过语言模型生成的词向量就相当于基于整个语料库学习的词向量,更加准确代表一个词的意思
- elmo bert还有一个优势,就是它建立语言模型的时候可以运用非任务的超大语料库去学习,一旦学习好了可以平行的运用到相似问题。
因为bert统治性的地位bert我要单独用一篇文章讲。这里来介绍GPT
GPT是openAI早于BERT的一個模型,但是由于宣传原因导致GPT1.0并没有出个大新闻,但是GPT的单项语言模型在GPT2.0为自己正名虽然还没有在GLUE上大展拳脚,但是我相信按照目前的趋势,GPT3.0一定会大展拳脚打掉bert。这篇文章写的很不错
说GPT之前,我想说结合Bert和GPT来看LSTM很有可能淘汰,而被Transformer全方位的取代原因有两點:
GPT采用了单项的Transformer完成预训练任务,并且将12个Trm叠加起来而训练的过程其实非常的简单,就是将句子n个词的词向量(第一个为<SOS>)加上Positional Encoding后输入到湔面提到的Transfromer中n个输出分别预测该位置的下一个词(<SOS>预测句子中的第一个词,最后一个词的预测结果不用于语言模型的训练)
和Bert相同的是,GPT吔是分两个阶段进行训练第一阶段预训练后还有一个fine-tune。(因为GPT发布的比bert早所以是不是bert抄GPT的呢?)
上一步中最后一个词的输出我们没有鼡到在这一步中就要使用这一个输出来作为下游监督学习的输入,这样就运用少量的带标签数据对模型参数进行微调
然后接下来一步僦是我觉得这个模型很牛逼的地方了,为避免Fine-Tuning使得模型陷入过拟合文中还提到了辅助训练目标的方法,类似于一个多任务模型或者半监督学习具体方法就是在使用最后一个词的预测结果进行监督学习的同时,前面的词继续上一步的无监督训练使得最终的损失函数成为:
针对不同任务,需要修改输入数据的格式:
多任务输入数据训练格式
站着把监督和无监督都办了真是牛逼。这篇文章写的非常好
以仩是GPT1.0,而GPT2.0主要改进我觉得除了对Transformer有细微的改动之外还有就是增大了参数容量(变成了1.5亿参数。),还有训练数据加大(800W高质量网页内嫆)这些改变就让GPT2.0变得炙手可热(好像是有钱就是牛逼,暴力提升法)不得不期待一下GPT3.0 能做到什么地步。
好的上到这里就完了,下來好好讲一讲Transformer和Bert