从RNN到UniLM:NLP & DeepLearning技术发展历程。

最近在研究NLG,看了很多资料顺便整理一下收获。

使用DeepLearning技术在NLP领域,最初是从词向量和RNN开始的。

词向量(Embedding/Word2Vec)

词向量早在2003年就被提出了,当时机器学习都不火,所以没引起注意。但是随着深度学习大行其道,词向量重新火了起来。

词向量的原理也很简单,通过比对两个字或词的上下文来判断两个字或词的相似程度,比如 “我” 和 “咱” 这两个词经常出现在类似的上下文中,所以它们计算得到的向量距离接近。

RNN

RNN的R是recurrent,中文全称循环神经网络。

这种神经网络比传统的神经网络的优势是有记忆力。

在计算的过程中,除了有输入外,还会把上一次的计算产生的隐藏层也一并输入进来。

“一并输入进来”这个过程叫concat,具体做法其实很简单,就是把输入的向量和隐藏层的向量接起来。

比如输入向量长度是5, 隐藏层长度是128, 那么RNN的输入层长度就是128+5=133.

LSTM

LSTM 即 long short term memory。它其实本质也是一种RNN,但是内部模型结构不是简单的向量乘算。而是好几个矩阵,向量和计算,有点模仿电路设计,有各种门(遗忘门、输出门。。)

LSTM还有一种简化计算复杂度的变种叫GRU。

Seq2Seq(Encoder2Decoder)

单纯使用RNN或者LSTM模型存在的一个问题是,输入一个字,输出一个字。输入输出的数量是一致的。但在实际的应用过程,比如翻译,输入语句的字数和翻译结果的字数可能不一样。

面对这中情况,就出现了Seq2Seq结构。

先对输入逐字进行编码(编码RNN),最后把整句输入语句变成一个向量(Context Vector)。再把整个向量作为解码RNN的输入,进行预测,逐字得到输出。当解码器预测到EOS(end of sentence)状态的时候,即解码完成。

而且这种结构能让解码器从整个语句的角度去做判断,为后续更多的改进提供了空间。

Transform

Seq2Seq中的Context Vector,一旦编码以后就是固定的,整个decoder循环解码期间,隐藏层可能一致在变,但是Context Vector不变。

Transform,以及背后的attention机制,主要的改变就在于随着一次次的解码,context vector会变。以翻译为例,翻译每个词语的时候,通过改变context vector,把注意力集中在这个词上,然后翻译。有效缓解了歧义的发生。

具体参考链接:

https://www.zhihu.com/question/427629601/answer/1558216827

https://www.zhihu.com/question/298810062

BERT

UniLM

posted @ 2021-08-04 18:22  爱知菜  阅读(43)  评论(0编辑  收藏  举报