60年技术简史,带你读懂AI的前世今生
这篇论文的想法其实非常非常简单,但取得了非常好的效果。它的思路是用深度的双向RNN(LSTM)在大量未标注数据上训练语言模型,如下图所示。然后在实际的任务中,对于输入的句子,我们使用这个语言模型来对它处理,得到输出的向量,因此这可以看成是一种特征提取。但是和普通的Word2Vec或者GloVe的pretraining不同,ELMo得到的Embedding是有上下文的。 比如我们使用Word2Vec也可以得到词”bank”的Embedding,我们可以认为这个Embedding包含了bank的语义。但是bank有很多意思,可以是银行也可以是水边,使用普通的Word2Vec作为Pretraining的Embedding,只能同时把这两种语义都编码进向量里,然后靠后面的模型比如RNN来根据上下文选择合适的语义——比如上下文有money,那么它更可能是银行;而如果上下文是river,那么更可能是水边的意思。但是RNN要学到这种上下文的关系,需要这个任务有大量相关的标注数据,这在很多时候是没有的。而ELMo的特征提取可以看成是上下文相关的,如果输入句子有money,那么它就(或者我们期望)应该能知道bank更可能的语义,从而帮我们选择更加合适的编码。 图:RNN语言模型 ELMo学到的语言模型参数是固定的,下游的任务把它的隐状态作为特征。而来自论文《Improving Language Understanding by Generative Pre-Training》的OpenAI GPT模型会根据特定的任务进行调整(通常是微调),这样得到的句子表示能更好的适配特定任务。它的思想其实也很简单,使用Transformer来学习一个语言模型,对句子进行无监督的Embedding,然后根据具体任务对Transformer的参数进行微调。因为训练的任务语言模型的输入是一个句子,但是下游的很多任务的输入是两个,因此OpenAI GPT通过在两个句子之前加入特殊的分隔符来处理两个输入,如下图所示。 图:OpenAI GPT处理下游任务的方法 OpenAI GPT取得了非常好的效果,在很多任务上远超之前的第一。 ELMo和GPT最大的问题就是传统的语言模型是单向的——我们是根据之前的历史来预测当前词。但是我们不能利用后面的信息。比如句子”The animal didn’t cross the street because it was too tired”。我们在编码it的语义的时候需要同时利用前后的信息,因为在这个句子中,it可能指代animal也可能指代street。根据tired,我们推断它指代的是animal,因为street是不能tired。但是如果把tired改成wide,那么it就是指代street了。 传统的语言模型,不管是RNN还是Transformer,它都只能利用单方向的信息。比如前向的RNN,在编码it的时候它看到了animal和street,但是它还没有看到tired,因此它不能确定it到底指代什么。如果是后向的RNN,在编码的时候它看到了tired,但是它还根本没看到animal,因此它也不能知道指代的是animal。Transformer的Self-Attention理论上是可以同时attend to到这两个词的,但是根据前面的介绍,由于我们需要用Transformer来学习语言模型,必须用Mask来让它看不到未来的信息,因此它也不能解决这个问题。 那它是怎么解决语言模型只能利用一个方向的信息的问题?答案是它的pretraining训练的不是普通的语言模型,而是Mask语言模型。这个思路是在Google的论文《Pre-training of Deep Bidirectional Transformers for Language Understanding》里提出了,也就是我们现在熟知的BERT模型。 BERT一出来就横扫了各种NLP的评测榜单,引起了极大的关注。就在媒体都在用”最强NLP模型”之类的词赞美BERT的时候,最近又出现了XLNet,又一次横扫了各大榜单。它认为BERT有两大问题:它假设被Mask的词之间在给定其它非Mask词的条件下是独立的,这个条件并不成立;Pretraining的时候引入了特殊的[MASK],但是fine-tuing又没有,这会造成不匹配。XLNet通过Permutation语言模型来解决普通语言模型单向信息流的问题,同时借鉴Transformer-XL的优点。通过Two-Stream Self-Attention解决target unaware的问题,最终训练的模型在很多任务上超过BERT创造了新的记录。 强化学习 强化学习和视觉、听觉和语言其实不是一个层面上的东西,它更多的是和监督学习、非监督学习并行的一类学习机制(算法),但是我认为强化学习是非常重要的一种学习机制。 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |