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

Hel*_*Out 5 python keras tensorflow glove

我是 Keras 新手。

\n\n

我的目标是创建用于推文情感分析的神经网络多分类

\n\n

Sequential用来Keras构建我的模型。

\n\n

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

\n\n

这是我目前的模型:

\n\n
model = Sequential()\nmodel.add(Embedding(vocab_size, 300, weights=[embedding_matrix], input_length=max_length, trainable=False))\nmodel.add(LSTM(100, stateful=False))\nmodel.add(Dense(8, input_dim=4, activation='relu'))\nmodel.add(Dense(3, activation='softmax'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n

sdc*_*cbr 3

您可以使用meanKeras 后端的函数并将其包装在一个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()
Run Code Online (Sandbox Code Playgroud)

给出:

_________________________________________________________________
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
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用该Lambda层来包装对 Keras 层中的张量进行操作的任意函数,并将它们添加到您的模型中。如果您使用 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
Run Code Online (Sandbox Code Playgroud)

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