Tôi có tập dữ liệu với 2 cột - Mỗi cột chứa một tập hợp các tài liệu. Tôi phải kết hợp tài liệu trong Col A với các tài liệu được cung cấp trong Col B. Đây là vấn đề phân loại được giám sát. Vì vậy, dữ liệu đào tạo của tôi chứa cột nhãn cho biết liệu tài liệu có khớp hay không.Mô hình LSTM trong Keras với Đầu vào Phụ trợ
Để giải quyết vấn đề, tôi đã tạo một bộ tính năng, giả sử f1-f25 (bằng cách so sánh 2 tài liệu) và sau đó đào tạo một trình phân loại nhị phân trên các tính năng này. Cách tiếp cận này hoạt động khá tốt, nhưng bây giờ tôi muốn đánh giá các mô hình Deep Learning về vấn đề này (đặc biệt là các mô hình LSTM).
Tôi đang sử dụng thư viện keras
bằng Python. Sau khi đi qua các tài liệu keras và hướng dẫn khác có sẵn trên mạng, tôi đã cố gắng làm như sau:
from keras.layers import Input, Embedding, LSTM, Dense
from keras.models import Model
# Each document contains a series of 200 words
# The necessary text pre-processing steps have been completed to transform
each doc to a fixed length seq
main_input1 = Input(shape=(200,), dtype='int32', name='main_input1')
main_input2 = Input(shape=(200,), dtype='int32', name='main_input2')
# Next I add a word embedding layer (embed_matrix is separately created
for each word in my vocabulary by reading from a pre-trained embedding model)
x = Embedding(output_dim=300, input_dim=20000,
input_length=200, weights = [embed_matrix])(main_input1)
y = Embedding(output_dim=300, input_dim=20000,
input_length=200, weights = [embed_matrix])(main_input2)
# Next separately pass each layer thru a lstm layer to transform seq of
vectors into a single sequence
lstm_out_x1 = LSTM(32)(x)
lstm_out_x2 = LSTM(32)(y)
# concatenate the 2 layers and stack a dense layer on top
x = keras.layers.concatenate([lstm_out_x1, lstm_out_x2])
x = Dense(64, activation='relu')(x)
# generate intermediate output
auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(x)
# add auxiliary input - auxiliary inputs contains 25 features for each document pair
auxiliary_input = Input(shape=(25,), name='aux_input')
# merge aux output with aux input and stack dense layer on top
main_input = keras.layers.concatenate([auxiliary_output, auxiliary_input])
x = Dense(64, activation='relu')(main_input)
x = Dense(64, activation='relu')(x)
# finally add the main output layer
main_output = Dense(1, activation='sigmoid', name='main_output')(x)
model = Model(inputs=[main_input1, main_input2, auxiliary_input], outputs= main_output)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit([x1, x2,aux_input], y,
epochs=3, batch_size=32)
Tuy nhiên, khi tôi điểm này trên các dữ liệu huấn luyện, tôi nhận được prob cùng. điểm cho tất cả các trường hợp. Vấn đề có vẻ là với cách đầu vào phụ trợ được nạp vào (vì nó tạo ra đầu ra có ý nghĩa khi tôi loại bỏ đầu vào aux.). Tôi cũng đã thử chèn đầu vào phụ ở các vị trí khác nhau trong mạng. Nhưng bằng cách nào đó tôi không thể làm được điều này.
Mọi con trỏ?
Không chắc chắn nếu đó là dự định, nhưng auxiliary_output chỉ là (1,). Nó thực sự là những gì bạn mong đợi? Hợp nhất 25 đầu vào phụ chỉ với một kết quả? - Mô hình trước khi đầu ra phụ trợ có ý định "không thể đào tạo" trong khi bạn chỉ đào tạo phần cuối cùng? –
Vâng vâng. Đây là một mô hình phân loại nhị phân để đầu ra cuối cùng là (1,). Liệu đầu ra phụ có khác nhau không? Tôi chỉ đơn giản là cho ăn trong bộ cộng hưởng của 25 tính năng như đầu vào phụ trợ và do đó hình dạng (25,) – Dataminer
Bạn đã thử nhiều kỷ nguyên hơn chưa? –