усреднение векторов слов предложения в Keras - Предварительно обученное вложение слов - PullRequest
0 голосов
/ 16 января 2019

Я новичок в Керасе.

Моя цель - создать мультиклассификацию нейронной сети для анализа настроений для твитов.

Я использовал 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

Поскольку мой вклад в модель нейронной сети составляет предложений (или твитов), и после ознакомления с некоторой теорией, я хочу, чтобы слой после слоя «Внедрение», после принятия каждого вектора слов в твите, усредняет векторы слов предложения .

В настоящее время я использую LSTM, я хочу заменить его на эту технику усреднения или p-means. Я не смог найти это в keras документации.

Я не уверен, что это правильное место, чтобы спросить об этом, но вся помощь будет оценена.

1 Ответ

0 голосов
/ 16 января 2019

Вы можете использовать функцию 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

Кроме того, вы можете использовать слой 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

Это может помочь реализовать больше пользовательских функций усреднения.

...