在 Keras 中平均一个句子的词向量 - 预训练词嵌入

我是 Keras 的新手。


我的目标是为推文的情感分析创建一个神经网络多分类。


我曾经Sequential在Keras建立我的模型。


我想在模型的第一层中使用预训练的词嵌入,特别是gloVe.


这是我目前的模型:


model = Sequential()

model.add(Embedding(vocab_size, 300, weights=[embedding_matrix], input_length=max_length, trainable=False))

model.add(LSTM(100, stateful=False))

model.add(Dense(8, input_dim=4, activation='relu'))

model.add(Dense(3, activation='softmax'))

embedding_matrix 由来自文件的向量填充 glove.840B.300d.txt


由于我对神经网络模型的输入是句子(或推文),并且在参考了一些理论之后,我希望在 Embedding 层之后的层,在取推文中的每个词向量后,对句子的词向量求平均值。


目前我使用的是LSTM,我想用这种平均技术或p-means. 我无法在keras文档中找到它。


我不确定这是否是问这个问题的正确地方,但所有帮助将不胜感激。


炎炎设计
浏览 222回答 1
1回答

慕森王

您可以使用meanKeras 后端的函数并将其包装在一个Lambda层中,以平均单词的嵌入。import kerasfrom keras.layers import Embeddingfrom keras.models import Sequentialimport numpy as np# Set parametersvocab_size=1000max_length=10# Generate random embedding matrix for sake of illustrationembedding_matrix = np.random.rand(vocab_size,300)model = Sequential()model.add(Embedding(vocab_size, 300, weights=[embedding_matrix], input_length=max_length, trainable=False))# Average the output of the Embedding layer over the word dimensionmodel.add(keras.layers.Lambda(lambda x: keras.backend.mean(x, axis=1)))model.summary()给出:_________________________________________________________________Layer (type)                 Output Shape              Param #   =================================================================embedding_6 (Embedding)      (None, 10, 300)           300000    _________________________________________________________________lambda_6 (Lambda)            (None, 300)               0         =================================================================Total params: 300,000Trainable params: 0Non-trainable params: 300,000此外,您可以使用该Lambda层将在 Keras 层中对张量进行操作的任意函数包装起来,并将它们添加到您的模型中。如果您使用的是 TensorFlow 后端,您也可以访问 tensorflow 操作:import tensorflow as tf    model = Sequential()model.add(Embedding(vocab_size, 300, weights=[embedding_matrix], input_length=max_length, trainable=False))model.add(keras.layers.Lambda(lambda x: tf.reduce_mean(x, axis=1)))# same model as before这有助于实现更多的自定义平均函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python