在 Keras 中对句子的词向量进行平均 - 预训练词嵌入
averaging a sentence’s word vectors in Keras- Pre-trained Word Embedding
我是 Keras 的新手。
我的目标是为推文创建用于情感分析的神经网络多分类。
我在 Keras
中使用了 Sequential
来构建我的模型。
我想在模型的第一层使用预训练词嵌入,具体来说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
的向量填充
由于我神经网络模型的输入是sentences(或tweets),参考了一些理论后,我想在Embedding层之后的层,取每一个词之后推文中的向量,平均句子的词向量。
我目前使用的是LSTM
,我想用这种平均技术或p-means
来代替它。我无法在 keras
文档中找到它。
我不确定在这里问这个问题是否合适,但我们将不胜感激。
您可以使用 Keras 后端的 mean
函数并将其包装在 Lambda
层中以对单词的嵌入进行平均。
import keras
from keras.layers import Embedding
from keras.models import Sequential
import numpy as np
# Set parameters
vocab_size=1000
max_length=10
# Generate random embedding matrix for sake of illustration
embedding_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 dimension
model.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,000
Trainable params: 0
Non-trainable params: 300,000
此外,您可以使用 Lambda
层将对张量进行操作的任意函数包装在 Keras 层中,并将它们添加到您的模型中。如果您使用的是 TensorFlow 后端,您也可以访问 tensorflow ops:
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
这有助于实现更多自定义平均函数。
我是 Keras 的新手。
我的目标是为推文创建用于情感分析的神经网络多分类。
我在 Keras
中使用了 Sequential
来构建我的模型。
我想在模型的第一层使用预训练词嵌入,具体来说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
由于我神经网络模型的输入是sentences(或tweets),参考了一些理论后,我想在Embedding层之后的层,取每一个词之后推文中的向量,平均句子的词向量。
我目前使用的是LSTM
,我想用这种平均技术或p-means
来代替它。我无法在 keras
文档中找到它。
我不确定在这里问这个问题是否合适,但我们将不胜感激。
您可以使用 Keras 后端的 mean
函数并将其包装在 Lambda
层中以对单词的嵌入进行平均。
import keras
from keras.layers import Embedding
from keras.models import Sequential
import numpy as np
# Set parameters
vocab_size=1000
max_length=10
# Generate random embedding matrix for sake of illustration
embedding_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 dimension
model.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,000
Trainable params: 0
Non-trainable params: 300,000
此外,您可以使用 Lambda
层将对张量进行操作的任意函数包装在 Keras 层中,并将它们添加到您的模型中。如果您使用的是 TensorFlow 后端,您也可以访问 tensorflow ops:
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
这有助于实现更多自定义平均函数。