常用NLP模型的简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用NLP模型的简介相关的知识,希望对你有一定的参考价值。

参考技术A 符号统一:X即样本矩阵

LSI:即SVD(奇异值)分解,X≈UΣVT(VT代表V的转置),设X为n×m矩阵,共m个文档,每个文档由n个词构成,而Σ为s×s矩阵,代表s个主题,V为m×s,每行代表每个文档分别和每个主题的相似度。通常文本分类用到V矩阵。U矩阵即n×s,每行代表每个词和每个主题的相似度。U和V分别成为左、右奇异矩阵。PS:我们知道PCA是对XTX求特征值和特征向量,设X=UΣVT,由于U和V都是正交阵,则XTX=VΣ²VT,即右奇异矩阵就是PCA分解后的特征矩阵,XXT→左奇异矩阵也是同理。

Word2Vec: 最常用的自然语言的数字化表达,简而言之就是若共100篇文章,vocabulary_size=10000,那么每个词都可以用10000维的one-hot向量表达,而经过word2vec的embedding后,每个词都可以用例如300维向量表示,不仅降了维度,而且相似词义的词将拥有更接近的向量表示。word2vec分为两种模型,CBOW - 根据上下文预测词语,SkipGram - 根据词语预测上下文。
CBOW:对C个上下文的词语每个词用C组不同的权重W全连接映射到一个N维的隐层上,得到C个N维隐层值,取平均,再对这个平均的N维隐层用权重W'的全连接+softmax对V个词语赋予概率值,V即vocabulary_sizee。W和W'分别是V×N和N×V的矩阵(全连接↔左乘权重矩阵的转置),假设某词word是Vocabulary的第j个词,那么W的第j行称为word的输入词向量,W'的第j列向量为word的输出词向量。 点此 查看原论文,不过我没看懂所谓的word embedding最终输出的到底是哪个向量,输入、输出、还是隐层。
SkipGram: CBOW的反向操作。
两者都是用BP算法更新。

LSTM:假设输入一句话长度10,每个词用32维向量展示,则LSTM将这个[10, 32]的向量转化为[k]的输出(hidden state),k可以是小于32的任意整数。也可输出每个time_step的输出([10,32]),和最后的cell state。并可对输出的k维向量加一个全连接降维或再加一个softmax实现分类。LSTM和RNN的区别在于有门控制,主要是通过忘记门来保留长期记忆,避免梯度消失。

Seq2Seq:Seq2Seq本来有着非常广阔的定义,但通常是指一个基于神经网络与 LSTM 的 经典seq2seq模型 ,后续流行的Transformer、BERT、GPT3等都是基于此。大致功能是实现机器翻译,通过encoder将原文转换为一个理解的矩阵后,用decoder一词一词地根据这个理解输出目标语言对应的句子。结构大致是先将原文每个词embedding后输入一个名为encoder的LSTM,并将其输出(即LSTM的最后一个cell的h和c)作为对原文的理解。然后一个名为decoder的LSTM会将这个理解转化为答案,decoder用BOS代表句子开始,EOS代表结束。训练时,例如将“我爱你”翻译为“I love you”,第一个输入是BOS,embedding后经过cell(用之前得到的h和c初始化)后用softmax激活得到第一个输出“I”,“I”作为第二个输入再次embedding经过cell后softmax激活得到第二个输出“love”,同理得到第三个输出“you”,最后得到EOS。通过BP梯度下降训练完成后,以同样的方式完成机器翻译的预测任务。

Attention:最早用于Seq2Seq模型。例如要将“我爱你”翻译为“I love you”时,首先根据encoder获得对原文每个词的理解,即encoder_output。decoder每次输出时,对当前输入找一个合适的attention分布,即权重(所谓更注意的地方,即权重更高的地方),该权重点乘encoder_output后求和即经过注意力机制后当前的输入。简而言之,在decoder每次输出时,会根据输入对encoder_output给予一个不同的attention分布。( 此段话尚未验证,需读过论文后修正 )

Self-Attention: 第一次出现在Transformer,由于Transformer没有使用传统s2s所用的RNN或LSTM,所以自称Attention is all you need (You don't need RNN or LSTM)。Self-Attention和Attention的区别有很多,首先对它而言可以不需要decoder直接在encoder内完成自注意力,其次它没有关注序列信息,因此需要额外先进行Positional Encoding,添加序列信息。它的重点在于在关注一个词时,可以将它和上下文的其他词联系到一起计算,对关联较大的词赋予更多的关注(权重)。计算方法是通过三个不同的权重矩阵来乘输入X,获得Q K V三个矩阵,即将原文X拆分为了3部分:问题、目录、内容,通过QKT除以一个常数(原论文是根号dk,这个数越大则概率分布越平均,越小则越极端,也会导致梯度消失)后softmax,来找到和Q对应的K,再通过这个K找到相应的V,即代表此时的关注的内容。

Transformer( 论文 及 较好的一篇介绍 ): 虽然也有encoder和decoder,但后续的发展改进通常只用encoder,而encoder的主要部分是self-attention。整体结构是6个encoder层接6个decoder层。每个encoder层大致结构是输入X经Positional Encoding后,经self-attention加工和自身残差连接后相加并norm(所谓残差连接相当于给了X两个通道,一个是直接输入,一个是经过attention输入),随后再通过前向网络分别对每个输出全连接处理后(一方面避免直接concat维度太大,一方面可以并行计算)与自身残差相加并norm。decoder大致相同,就在中间多了一个Mask的Self Attention来接受encoder的输入,mask是因为decoder按顺序输出,需要把后面的mask掉。

以上是关于常用NLP模型的简介的主要内容,如果未能解决你的问题,请参考以下文章

NLP常用术语解析

Pytorch系列:自然语言处理NLP

序列标注常用模型CRFHMMMEMM简介及比对

espnet中的transformer和LSTM语言模型对比实验

常用GWAS统计方法和模型简介

自然语言处理开源书籍