Как использовать собственное вложение слов с предварительно обученным встраиванием, например, word2vec в Keras - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть матрица совместного вхождения, сохраненная в CSV-файле, который содержит отношения между словами и смайликами следующим образом:

word emo1 emo2 emo3
w1   0.5   0.3  0.2
w2   0.8   0    0
w3   0.2   0.5  0.2

Эта матрица совместного вхождения огромна, имеет 1584755 строк и 621 столбцов. У меня есть Sequential() LSTM модель в Keras, где я использую предварительно обученное (word2vec) встраивание слов. Теперь я хотел бы использовать матрицу совместного использования в качестве еще одного слоя внедрения. Как я могу это сделать? Мой текущий код выглядит примерно так:

model = Sequential()
model.add(Embedding(max_features, embeddings_dim, input_length=max_sent_len, weights=[embedding_weights]))
model.add(Dropout(0.25))
model.add(Convolution1D(nb_filter=nb_filter, filter_length=filter_length, border_mode='valid', activation='relu', subsample_length=1))
model.add(MaxPooling1D(pool_length=pool_length))
model.add(LSTM(embeddings_dim))
model.add(Dense(reg_dimensions))
model.add(Activation('sigmoid'))
model.compile(loss='mean_absolute_error', optimizer='adam')
model.fit( train_sequences , train_labels , nb_epoch=30, batch_size=16) 

Кроме того, если матрица совместного вхождения является разреженной, то каков наилучший способ ее использования в слое внедрения?

1 Ответ

0 голосов
/ 03 сентября 2018

Вы можете использовать слой Embedding и установить свою собственную матрицу веса следующим образом:

Embedding(n_in, n_out, trainable=False, weights=[weights])

Если я вас правильно понял, weights будет вашей матрицей совпадений, n_in количество строк и n_out количество столбцов.

Дополнительную информацию и примеры можно найти в этом сообщении в блоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...