首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >注意体重的LSTM??基于句子嵌入的文档分类

注意体重的LSTM??基于句子嵌入的文档分类
EN

Stack Overflow用户
提问于 2020-01-11 21:51:23
回答 1查看 435关注 0票数 0

我真的很难用keras构建一个神经网络,使用lstm进行文本分类,并在顶部添加一个attention_layer。我确信我离得很近,但我很困惑:

  • Do我必须在LSTM?
  • And,之后添加一个 TimeDistributed 稠密层,如何从我的网络中检索注意力权重(为了可视化目的)?--这样我就知道哪个句子对文档被归类为好的或坏的

负有“责任”。

比如说,我有10个文档,由100个句子组成,每个句子都表示为一个500元素向量。因此,包含句子序列的文档矩阵如下所示:X = np.array(Matrix).reshape(10, 100, 500)

这些文件应按情意1=good;0=bad - so分类。

代码语言:javascript
复制
y= [1,0,0,1,1]
yy= np.array(y)

我不需要嵌入层,因为每个文档的每个句子都是稀疏向量。

注意层来自:https://github.com/richliao/textClassifier/blob/master/textClassifierHATT.py

代码语言:javascript
复制
MAX_SENTS = 100
MAX_SENT_LENGTH = 500

review_input = Input(shape=(MAX_SENTS, MAX_SENT_LENGTH))
l_lstm_sent = LSTM(100, activation='tanh', return_sequences=True)(review_input)
l_att_sent = AttLayer(100)(l_lstm_sent)
preds = Dense(1, activation='softmax')(l_att_sent)
model = Model(review_input, preds)

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['acc'])
model.fit(X, yy, nb_epoch=10, batch_size=50)

所以我认为我的模型应该是正确的,但我不太确定。但是,我怎样才能从中获得注意力-权重(例如,我知道是哪一句导致了1的分类)?非常感谢的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-13 10:21:28

1.时间分布

在这种情况下,您不需要将Dense封装到TimeDistributed中,尽管这样做可能要快一些,特别是如果您可以提供一个掩码来掩盖大部分TimeDistributed输出的话。

然而,无论最后一个维度之前的形状是什么,Dense都在最后一个维度中运行。

2.注意权重

是的,正如你在评论中所建议的那样。您需要修改AttLayer,它能够返回输出和注意力权重。

代码语言:javascript
复制
return output, ait

然后创建一个包含预测和注意力权重张量的模型,并得到它们的预测:

代码语言:javascript
复制
l_att_sent, l_att_sent = AttLayer(100)(l_lstm_sent)
...
predictions, att_weights = attmodel.predict(X)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59698951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档