用于将句子转换为文档上下文向量的 Keras LSTM

Keras LSTM for converting sentences to document context vector

我阅读了以下博客 post 并尝试通过 Keras 实现它: https://andriymulyar.com/blog/bert-document-classification

现在,我对 Keras 还很陌生,我不明白如何使用 "seq2seq neural networks" 将一系列子块(句子)压缩到全局上下文向量(文档向量)中。 - 通过 LSTM..

例如:我有 10 个文档,每个文档由 100 个句子组成,每个句子由一个 1x500 向量表示。 所以数组看起来像这样:

X = np.array(Matrix).reshape(10, 100, 500) # reshape to 10 documents with 100 sequence of 500 features

所以我知道我想训练我的网络并采用最后一个隐藏层,因为这个隐藏层代表我的文档 vector/global 上下文向量。

然而,对我来说最难的部分是想象输出向量..我只是枚举我的文档吗

y = [1,2,3,4,5,6,7,8,9,10]
y = np.array(y)

还是我必须使用单热编码输出向量:

yy = to_categorical(y)

或什至其他..?

据我了解,最终模型应该是这样的:

model = Sequential()
model.add(LSTM(50, input_shape=(100,500)))
model.add(Dense(1))
model.compile(loss='categorical_crossentropy',optimizer='rmsprop')
model.fit(X, yy, epochs=100, validation_split=0.2, verbose=1)

这仅取决于您使用的数据:

对于单热编码,使用分类交叉熵损失

model.compile(loss='categorical_crossentropy',optimizer='rmsprop')

对于标签编码,使用稀疏分类交叉熵损失

model.compile(loss='sparse_categorical_crossentropy',optimizer='rmsprop')

两个版本的基本方法相同。 所以如果你有一个 目标数据 作为 y 像:

Class1 Class2 Class3
0      0      1
1      0      0
1      0      0
0      1      0

你应该像这样编译你的模型:

model.compile(loss='categorical_crossentropy',optimizer='rmsprop')

相反,如果你有一个 目标数据 作为 y 像:

labels
2
0
0
1

你应该像这样编译你的模型:

model.compile(loss='sparse_categorical_crossentropy',optimizer='rmsprop')

您的模型的结果和性能将是相同的,只是内存使用会受到影响。