Я работаю с многоклассовым классификатором, чтобы выполнить тонкую настройку значений слов. По сути, я хочу получить, начиная с предложения, одно и то же предложение, помеченное с помощью смещения WordNet. Например:
#The starting sentence after preprocessing
long since reviewed objectives benefit service program
#the output sentence
long_wn:00106124a since review_wn:00092618v objective_wn:00002179n benefit_wn:00009904n service_wn:00070654n program_wn:00064646n
Как вы, наверное, понимаете, мне нужно обработать около 200000 меток, и, конечно, невозможно уместить в память, используя плотный слой и категорическую кроссентропию, даже с генераторами, поскольку после заполнения метки будут закодированы в горячем виде в массивы в форме [N, 60, 200000].
Модель:
Layer (type) Output Shape
===============================================
embedding (Embedding) (None, 60, 400)
_______________________________________________
bi_lstm_1 (Bidirectional) (None, 60, 256)
_______________________________________________
bi_lstm_2 (Bidirectional) (None, 60, 256)
_______________________________________________
output (Dense) (None, 60, 210633)
Полезные характеристики модели, которые могут помочь:
model_keras = Sequential()
#...
model_keras.add((Dense(len(wn2id), #210633
activation='softmax')))
model_keras.compile(optimizer='adadelta',
loss='categorical_crossentropy',
metrics=['acc'])
Тогда я хочу спросить: есть ли способ обработать такое большое количество ярлыков?
Есть ли возможность построить модель, которая в качестве выходной информации дает вектор, аналогичный вектору внедрения, вместо простого классификатора меток?
Есть ли какое-то решение, которое я не рассматривал?