为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

炎炎设计 2021-10-12 15:48:35
我是 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文档中找到它。我不确定这是否是问这个问题的正确地方,但所有帮助将不胜感激。
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超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()

给出:


_________________________________________________________________

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

这有助于实现更多的自定义平均函数。


查看完整回答
反对 回复 2021-10-12
  • 1 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信