【问题标题】:averaging a sentence’s word vectors in Keras- Pre-trained Word Embedding在 Keras 中平均一个句子的词向量 - 预训练词嵌入
【发布时间】:2019-01-16 12:53:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python tensorflow keras glove


    【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 2019-12-30
      • 1970-01-01
      • 2021-03-29
      • 2021-09-14
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多