赞
踩
第一部分:深度学习的嫩枝
这一部分是深度学习刚刚被应用于自然语言处理的时期。在此之前,NLP大多仍是传统机器学习和概率统计的天下,直到几个关键问题的解决。
A neural probabilistic language model,2003,Bengio
Tips:语言模型
统计语言模型是一个单词序列上的概率分布,对于一个给定长度为m的序列,它可以为整个序列产生一个概率 P(w_1,w_2,…,w_m) 。其实就是想办法找到一个概率分布,它可以表示任意一个句子或序列出现的概率。
语言模型在自然语言处理相关应用非常广泛,如语音识别(speech recognition) , 机器翻译(machine translation), 词性标注(part-of-speech tagging), 句法分析(parsing)等。传统方法主要是基于统计学模型,最近几年基于神经网络的语言模型也越来越成熟。
而上文提到的n-gram便是一种语言模型。
2.多任务学习(MultiTask Learning)
A unified architecture for natural language processing: deep neural networks with multitask learning,2008,Collobert,Weston.
文章亮点:这个时期的人们大多在为如何把单词高效的转化为向量发愁。因此RNN等知名网络此时并没有在NLP中广泛应用,直到接下来词向量(Word2Vector)的真正出现,人们才把研究中心重新放在RNN和它的变种上,当然对于语言模型的探索也没有停止,因为人们已经认识到它的重要性了。
第二部分:词向量时代
自从Mikolov在他2013年的论文“Efficient Estimation of Word Representation in Vector Space”提出词向量的概念后,NLP领域仿佛一下子进入了embedding的世界,Sentence2Vec、Doc2Vec、Everything2Vec。词向量基于语言模型的假设——“一个词的含义可以由它的上下文推断得出“,提出了词的Distributed Representation表示方法。
什么是word2vec?
对于计算机来说,理解自然语言的关键就是理解单词。每一种我们常说的语言(如英文、中文),其基本组成单位都是一个个的单词或词组,因此想让计算机理解我们的语言,我们必须寻找一种既高效又能体现出单词之间的相似程度(逻辑距离)的表示方法。简单的将单词用One-Hot向量编码,一旦单词数量达到一定程度,便会造成维度灾难。并且用OneHot编码的向量其中大部分都是0(称为稀疏矩阵),对计算机来说,这既不高效也不能体现单词间的联系。因此便诞生出了Word2Vec。它的关键可以概括为将单词转化为低维的、稠密的并且语义关系更强的向量,我们在NLP网络结构中常常看到的Embedding层便是在干这件事。
相关论文
Efficient Estimation of Word Representations in Vector Space
NLP中的神经网络
随着词向量的提出,RNN(循环神经网络)等网络神经网络模型开始在NLP中广泛被采用。RNN由于其在长序列训练过程中存在梯度消失和爆炸的问题,一直不被业界看好。因此,在1990年RNN首次被提出后,很快被LSTM(长短时记忆网络)所取代,而在2013年双向LSTM的出现更是把类RNN网络推上了NLP的主舞台。
RNN由于其能保存上一时间序列的输入信息,并输入到下一层的特性,具有了能记住上下文的功能(如上图)。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好地解决这类问题。
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
相比RNN只有一个传递状态 ,LSTM有两个传输状态,一个 c-t(cell state),和一个h-t(hidden state),其中c-t便代表了长时记忆。并且LSTM拥有着比传统RNN更为复杂的重复结构(例如门结构)。具体细节及LSTM的其他变种(如GRU)等可以看这篇论文。
Seq2Seq(Sequence to Sequence)
seq2seq模型非常容易理解,顾名思义,它的输入是一段序列,输出也是一段序列。虽然这样的问题情形在很早就有应用,机器翻译就是一个很好的例子。但第一个真正被称作seq2seq的模型是在2014年由Sutskever提出的Encoder-Decoder模型,原论文(Sequence to Sequence Learning with Neural Networks)。这是一种序列生成的思路,由两个RNN网络组成。
在每个时刻, Encoder中输入一个字/词,隐藏层就会根据这个公式而改变,到最后一个字/词 XT 时 ,隐藏层输出 c 。由于RNN的特性,c 相当于包含了整个句子的信息,可以看成整个句子的一个语义表示。之后再把c向量输入到Decoder中,同样在每个时刻得到输出,直到出现代表结尾的特殊字符(由训练中使用的决定)。
第三部分:前沿进展
Attention(注意力机制)
Attention的出现是为了模仿人思考问题时的注意力机制,就像人在看一张图片或是一句话时,他首先会观察到的是让他眼前一亮的信息,而不会像计算机一样去顺序遍历。同样,Attention是一种能让模型对重要信息重点关注并充分学习吸收的技术,它不算是一个完整的模型,应当是一种技术,能够作用于任何序列模型中。
Attention首先是在NLP中的Seq2Seq得到应用的,正如前文所说的一样,它被放在Encoder和Decoder之间,以便能更好的让Decoder吸收Encoder得到的信息。
在具体的网络中,Attention是一组可以学习的权重向量,在Encoder编码完后与之加权线性组合,之后再输入到Decoder。
具体构成如下:
我们的最终目标是要能够帮助decoder在生成词语时,有一个不同词语的权重的参考。在训练时,对于decoder我们是有训练目标的,此时将decoder中的信息定义为一个Query。而encoder中包含了所有可能出现的词语,我们将其作为一个字典,该字典的key为所有encoder的序列信息。n个单词相当于当前字典中有n条记录,而字典的value通常也是所有encoder的序列信息。
上面对应于第一步,然后是第二部计算注意力权重,由于我们要让模型自己去学习该对哪些语素重点关注,因此要用我们的学习目标Query来参与这个过程,因此对于Query的每个向量,通过一个函数
,计算预测i时刻词时,需要学习的注意力权重,由于包含n个单词,因此,
应当是一个n维的向量,为了后续计算方便,需要将该向量进行softmax归一化,让向量的每一维元素都是一个概率值。最后对Value vectors进行加权线性组合,得到带权重参考的“字典”输出:
Transformer
基于传统的Encoder-Decoder With Attention优化而来,彻底舍弃RNN,仅仅使用注意力机制,Attention Is All You Need.
建议去看李沐大神的讲解,清晰明了:点我跳转
Bert
Bert是一个通用的预训练模型,可以先在海量的未标注数据上,训练Bert模型,得到Bert的参数。在下游任务中,利用标注的数据,对Bert模型进行微调(fine-tuning),有很好的结果。
Bert使用的是Transformer的Encoder。准确的说,Bert模型就是一个12(24)层的Transformer Encoder。
总之也是火的一塌糊涂。
直接上论文:BERT: Pre-training of Deep Bidirectional Transformers for
知乎大佬的解释:什么是BERT?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。