Как использовать мое собственное вложение предложений в Keras? - PullRequest
0 голосов
/ 08 октября 2018

Я новичок в Keras и создал свои собственные вложения предложений tf_idf с формой (no_sentences, embedding_dim).Я пытаюсь добавить эту матрицу в качестве входных данных для слоя LSTM.Моя сеть выглядит примерно так:

q1_tfidf = Input(name='q1_tfidf', shape=(max_sent, 300))
q2_tfidf = Input(name='q2_tfidf', shape=(max_sent, 300))

q1_tfidf = LSTM(100)(q1_tfidf)
q2_tfidf = LSTM(100)(q2_tfidf)
distance2 = Lambda(preprocessing.exponent_neg_manhattan_distance, output_shape=preprocessing.get_shape)(
        [q1_tfidf, q2_tfidf])

Я борюсь с тем, как должна быть сформирована матрица.Я получаю эту ошибку:

ValueError: Error when checking input: expected q1_tfidf to have 3 dimensions, but got array with shape (384348, 300)

Я уже проверил этот пост: Предложение встраивает Keras , но все еще не может понять это.Кажется, я упускаю что-то очевидное.

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 08 октября 2018

Хорошо, насколько я понял, вы хотите предсказать разницу между двумя предложениями.Как насчет повторного использования слоя LSTM (языковая модель должна быть такой же) и просто выучить вложение одного предложения и использовать его дважды:

q1_tfidf = Input(name='q1_tfidf', shape=(max_sent, 300))
q2_tfidf = Input(name='q2_tfidf', shape=(max_sent, 300))

lstm = LSTM(100)

lstm_out_q1= lstm (q1_tfidf)
lstm_out_q2= lstm (q2_tfidf)
predict = concatenate([lstm_out_q1, lstm_out_q2])
model = Model(inputs=[q1_tfidf ,q1_tfidf ], outputs=predict)

predict = concatenate([q1_tfidf , q2_tfidf])

Вы также можете ввести свое пользовательское расстояние в дополнительном лямбда-слое, нопоэтому вам нужно использовать другое изменение формы в конкатенации.

...