第四课 RNN
RNN 递归神经网络,用于处理时间序列
每个数据会和上个数据的输出一起作为输入
LSTM:其存在一个控制参数C用于决定什么样的信息会被保留,什么样的信息将会被遗忘(门单元)
词向量(Word2Vec)
词向量模型的输入通过查表获得,网络架构类似于RNN网络,更新网络的同时也会更新Look up表
CBOW:输入是上下文,输出是当前词
Skip-Gram:输入是当前词,输出是上下文
而如果使用Sofmax来进行检索,词料库太大,计算量太大,所以主流使用直接预测下一个词的方式
负采样
例如
not thou 1
not shall 1
not taco 0 负样本
RNN模型所需输入格式
- 分词 or 分字
- 词、字的数量要保持一致(多:截断,少:padding)
- 词 or 字要转换成词(字)向量
(batch_size, max_len, features_num)
LSTM网络模块
if config.embedding_pretrained is not None:
self.embedding = nn.Embedding.from_pretrained(config.embedding_pretrained,freeze=False)
else:
self.embedding = nn.Embedding(config.n_vocab, config.embed, padding_idx=config.n_vocab - 1)
self.lstm = nn.LSTM(config.embed, #词向量维数
config.hidden_size, #隐层神经元数
config.num_layers, #隐层层数
bidirectional=True, #是否使用双向网络
batch_first=True,
dropout=config.dropout)
self.fc = nn.Linear(config.hidden_size * 2, config.num_classes)
def forward(self, x):
x, _ = x
out = self.embedding(x) # [batch_size, seq_len, embeding]=[128, 32, 300]
out, _ = self.lstm(out)
out = self.fc(out[:, -1, :]) # 句子最后时刻的 hidden state
return out
BiLSTM(双向LSTM)
- 有从前往后也有从后往前
- 前后的结果进行拼接(所以是
hidden_size * 2
)
Tesorboardx(可视化)
tensorboard --log-dir=${PATH_TO_LOG}