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

时间:2019-01-16 12:53:38

标签: python tensorflow keras glove

我是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的向量填充

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

目前我使用的是LSTM,我想用这种平均技术或p-means代替它。我在keras文档中找不到此内容。

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

1 个答案:

答案 0 :(得分:1)

您可以使用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操作:

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

这可以帮助实现更多的自定义平均功能。