Я работаю над своей статьей, и одна из задач состоит в том, чтобы извлечь название и местонахождение компании из предложения следующего типа:
"Google делится ресурсами с японской компанией."
Здесь я хочу, чтобы вывод был "Google Japan". Структура предложения также может варьироваться, например, «японская компания может получить доступ к ресурсам Google». Я пробовал NN на основе внимания, но частота ошибок составляет около 0,4. Кто-нибудь может подсказать, какую модель мне следует использовать?
И я распечатал процесс проверки так:
проверочная печать
И я получил графики потерь и точности:
Лас и точность
Это показывает, что val_acc равен 0,99. Значит ли это, что моя модель довольно хорошо предсказывает? Но почему я получаю 0,4 ошибки, когда использую собственную функцию проверки, чтобы показать частоту ошибок? Я очень плохо знаком с ML. Что на самом деле означает val_acc?
Вот моя модель:
encoder_input = Input(shape=(INPUT_LENGTH,))
decoder_input = Input(shape=(OUTPUT_LENGTH,))
encoder = Embedding(input_dict_size, 64, input_length=INPUT_LENGTH, mask_zero=True)(encoder_input)
encoder = LSTM(64, return_sequences=True, unroll=True)(encoder)
encoder_last = encoder[:, -1, :]
decoder = Embedding(output_dict_size, 64, input_length=OUTPUT_LENGTH, mask_zero=True)(decoder_input)
decoder = LSTM(64, return_sequences=True, unroll=True)(decoder, initial_state=[encoder_last, encoder_last])
attention = dot([decoder, encoder], axes=[2, 2])
attention = Activation('softmax')(attention)
context = dot([attention, encoder], axes=[2, 1])
decoder_combined_context = concatenate([context, decoder])
output = TimeDistributed(Dense(64, activation="tanh"))(decoder_combined_context) # equation (5) of the paper
output = TimeDistributed(Dense(output_dict_size, activation="softmax"))(output)
model = Model(inputs=[encoder_input, decoder_input], outputs=[output])
model.compile(optimizer='adam', loss="binary_crossentropy", metrics=['accuracy'])
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=200, min_delta=0.0005)