比之前多了一个圈
这个圈包含t时刻之前的数据特征,主要用在NLP自然语言处理中。
只用最后一个结果ht,前面的当做中间结果
会把之前看到的都记下来,但第n句话和第一句话之间联系不太大,没必要
考虑词的 前后顺序和相关性
构建词向量,不断向后滑动学习
加入一些负样本(负采样模型) 顺序的词太多了,需要加乱序的词,作为负样本
skipgram的正负样本模型
词嵌入:将词转化为向量
每个词用300维的向量表示,词大小为32
(batch,maxlen,featrue)
(同时处理多少标题或者文章,序列的最大长度,feature大小(300维))
基于字做的,在此数据集中有4000+个可能,而词更多,运算量大
self.lstm = nn.LSTM(config.embed(300维的输入特征), config.hidden_size(128个隐藏神经元), config.num_layers(两层的LSTM),
bidirectional=True(是单向的还是双向的,双向的效果好), batch_first=True, dropout=config.dropout)
特征最后会拼接起来,维度更多了
上图是3层LSTM(淡蓝色部分),一般用最后一层最后一个输出作为最终输出,因为它包含并计算了前面神经元的特征信息
例子中的模型
Model(
(embedding): Embedding(4762, 300)
(lstm): LSTM(300, 128, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)
(fc): Linear(in_features=256, out_features=10, bias=True)
)
NLP任务大部分是分类任务