2021SC@SDUSC
在论文中,Encoder采用的是BiLSTM编码模型,故首先对BiLSTM进行学习。
一、BiLSTM
BiLSTM:Bi-directional Long Short-Term Memory的缩写,是由前向LSTM与后向LSTM组合而成。
在词的表示基础上组合成句子的表示,采用相加的方法或者取平均等方法。然而,这些方法存在很大缺陷。问题在于词语在句子中的前后顺序。LSTM通过训练过程可以学到记忆哪些信息和遗忘哪些信息,使用LSTM模型可以更好的捕捉到较长距离的依赖关系。而LSTM对句子进行建模存在的问题是无法编码从后到前的信息。而通过BiLSTM可以更好的捕捉双向的语义依赖。故在LSTM模型的基础上,又引入了BiLSTM模型。
下举一个学习BiLSTM模型时看见的例子,便于理解。
比如,对“我爱中国”这句话进行编码。
前向的LSTMl依次输入“我”,“爱”,“中国”得到三个向量{hL0,hL1,hL2}。后向的LSTMr依次输入“中国”,“爱”,“我”得到三个向量{hR0,hR1,hR2}。最后将前向和后向的隐向量进行拼接得到{[hL0,hR2],[hL1,hR1],[hL2,hR0]},即{h0,h1,h2}。
对于情感分类任务来说,采用的句子表示往往是[ hL2,hR2 ]。因为其包含了前向与后向的所有信息。
二、Encoder类
__ init __()函数
使用继承nn.Module类的方式,实现共享参数。
首先定义__init__函数,在其内定义层。
#以继承nn.Module类的方式实现网络结构的自定义
class Encoder(nn