首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras预训练词嵌入中句子词向量的平均化

Keras预训练词嵌入中句子词向量的平均化
EN

Stack Overflow用户
提问于 2019-01-16 12:53:37
回答 1查看 3.9K关注 0票数 5

我对凯拉斯很陌生。

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

我在Keras中使用了Keras来构建我的模型。

我想在我的模型的第一层(特别是)中使用经过预先训练的单词嵌入

以下是我目前的模型:

代码语言:javascript
复制
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的向量填充。

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

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

我不知道这是不是合适的地方,但所有的帮助都会受到感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-16 13:05:49

您可以从Keras的后端使用mean函数,并将其封装在Lambda层中,以使嵌入平均在单词上。

代码语言:javascript
复制
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()

给予:

代码语言:javascript
复制
_________________________________________________________________
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:

代码语言:javascript
复制
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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54217503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档