我正在尝试使用 keras 通过 LSTM 从句子向量创建文档上下文向量(因此每个文档都由一系列句子向量组成)。
我的目标是使用 keras 复制以下博客文章:https ://andriymulyar.com/blog/bert-document-classification
我有一个(玩具)张量,看起来像这样:X = np.array(features).reshape(5, 200, 768)
所以 5 个文档,每个文档有 200 个句子向量序列 - 每个句子向量有 768 个特征。
因此,为了从我的句子向量中获得嵌入,我将我的文档编码为 one-hot-vectors 来学习 LSTM:
y = [1,2,3,4,5] # 5 documents in toy-tensor
y = np.array(y)
yy = to_categorical(y)
yy = yy[0:5,1:6]
到目前为止,我的代码看起来像这样
inputs1=Input(shape=(200,768))
lstm1, states_h, states_c =LSTM(5,dropout=0.3,recurrent_dropout=0.2, return_state=True)(inputs1)
model1=Model(inputs1,lstm1)
model1.compile(loss='categorical_crossentropy',optimizer='rmsprop',metrics=['acc'])
model1.summary()
model1.fit(x=X,y=yy,batch_size=100,epochs=10,verbose=1,shuffle=True,validation_split=0.2)
当我打印时,states_h
我得到一个 shape=(?,5) 的张量,我真的不知道如何访问张量内的向量,它应该代表我的文档。
print(states_h)
Tensor("lstm_51/while/Exit_3:0", shape=(?, 5), dtype=float32)
还是我做错了什么?据我了解,应该有 5 个文档向量,例如doc1=[...] ; ...; doc5=[...]
,以便我可以将文档向量重用于分类任务。