代码之家  ›  专栏  ›  技术社区  ›  HelpASisterOut

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

  •  1
  • HelpASisterOut  · 技术社区  · 6 年前

    我刚到喀拉斯。

    我的目标是创建一个 情绪分析的神经网络多分类 鸣叫。

    我用过 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

    因为我对神经网络模型的输入是 句子 (或者tweets),在参考了一些理论之后,我想在嵌入层之后,在获取tweet中的每一个单词向量之后,将 平均句子的词向量 .

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

    我不确定这是不是该问这个问题的地方,但所有的帮助都会得到感激。

    1 回复  |  直到 6 年前
        1
  •  1
  •   sdcbr    6 年前

    你可以使用 mean 来自keras后端的函数,并将其包装在 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
    

    此外,您可以使用 兰姆达 层将对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
    

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