python - 如何在keras中加载预训练的词嵌入并输出不同的类

标签 python keras lstm word-embedding

我想比较两个 LSTM,一个是根据维基百科数据训练的,另一个是我自己训练的。我在设计第一个模型时遇到问题。我定义了两种词嵌入词汇,一种仅基于维基百科数据构建,另一种也在我的语料库上进行训练。我想定义第一个具有嵌入层的 LSTM(从维基百科加载预先训练的权重),但输出应该与其词汇量大小(10000)不同,事实上我想输出尽可能多的类包含在其他词汇表中的内容(50000)。这就是我现在拥有的:

model = Sequential()
model.add(Embedding(vocab_size_wikipedia, embedding_size, input_length=55, weights=[pretrained_weights_wikipedia])) 
model.add(Bidirectional(LSTM(units=embedding_size)))
model.add(Dense(vocab_size, activation='softmax'))
model.compile(loss='categorical_crossentropy',
          optimizer = RMSprop(lr=0.0005),
          metrics=['accuracy'])

model.fit(np.array(X_train), np.array(y_train), epochs=10, validation_data=(np.array(X_val), np.array(y_val)))

这是我的变量和形状:

shape of pretrained_weights_wikipedia = (10000, 100)
vocab_size = 50000
embedding_size = 100
vocab_size_wikipedia = 10000

X_train.shape() = (1600,55)
y_train.shape() = (1600,50000)
X_train.shape() = (400,55)
X_train.shape() = (400,50000)
X_train.shape() = (200,55)
X_train.shape() = (200,50000) #the labels are padded 

感谢您的帮助!

最佳答案

您想要构建一个模型,其中需要具有不同词汇量(此处为 10000)的预训练权重,并针对您自己的具有不同词汇量(此处为 50000)的语料库对其进行微调。

因为问题是对称的,所以应该重用对第一个句子进行编码的机制(权重和全部)来对第二个句子进行编码。这里我们使用共享层对输入进行编码。

点击here有关共享层的更多信息。

input = Input(shape=55)

emb1 = Embedding(vocab_size_wikipedia, embedding_size, weights=pretrained_weights_wikipedia, trainable=False)(input)
emb2 = Embedding(50000, embedding_size)(input)

bi = Bidirectional(LSTM(embedding_size))

x1 = bi(emb1)
x2 = bi(emb2)

dense = Dense(vocab_size, activation='softmax')

op1 = dense(x1)
op2 = dense(x2)

model = Model(inputs=[input1, input2], outputs=[op1, op2])
model.compile(loss='categorical_crossentropy',
          optimizer = RMSprop(lr=0.0005),
          metrics=['accuracy'])
model.summary()

关于python - 如何在keras中加载预训练的词嵌入并输出不同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53266771/

相关文章:

python - Odoo 11 - Action 服务器

python - 使用 python/biopython 对整个 genbank 文件的不完整解析

python - 我无法从浏览器访问scrapyd端口6800

python - 在推送到 S3 之前,是否有更干净的方法来旋转通过 Flask 上传的智能手机图像?

tensorflow - TensorBoard:如何编写图像以获得步长 slider ?

python - LSTM 自编码器问题

python - 检查目标 : expected dense_2 to have 2 dimensions, 但获得形状为 (1, 1226, 2) 的数组时出错

python - conv net 节省重量和新的测试集

tensorflow - 在 Keras 中使用 binary_crossentropy 损失(Tensorflow 后端)

python - Tensorflow 将 LSTM 的最终状态保存在 dynamic_rnn 中用于预测