Использование автоэнкодера для попарного сходства текста - PullRequest
1 голос
/ 21 февраля 2020

У меня есть набор данных, содержащий только 500 образцов. Набор данных имеет три столбца

  1. Предложение1
  2. Предложение2
  3. 0 или 1 (для указания сходства).

Моя задача состояла в том, чтобы обучить кодировщик, который принимает в качестве входных данных два предложения и возвращает 1, если предложения похожи, и 0 в противном случае.

Я использую предварительно обученные вложения word2ve c в извлечь особенности. Моя модель достигла только 50% точности.

sent_in = Input(shape=(150, ))
sent_emb = Embedding(input_dim=vocab_size, output_dim=300, weights=[E],)(sent_in)
conv1 = Conv1D(32, 5, activation='relu', padding='same')(sent_emb)
pool1 = MaxPooling1D(2)(conv1)
conv2 = Conv1D(64, 5, activation='relu', padding='same')(pool1)
pool2 = MaxPooling1D(2)(conv2)
conv3 = Conv1D(128, 5, activation='relu', padding='same')(pool2)
flat1 = Flatten()(conv3)

sent_in2 = Input(shape=(150, ))
sent_emb2 = Embedding(input_dim=vocab_size, output_dim=300, weights=[E],)(sent_in2)
conv4 = Conv1D(32, 5, activation='relu', padding='same')(sent_emb2)
pool3 = MaxPooling1D(2)(conv4)
conv5 = Conv1D(64, 5, activation='relu', padding='same')(pool3)
pool4 = MaxPooling1D(2)(conv5)
conv6 = Conv1D(128, 5, activation='relu', padding='same')(pool4)
flat2 = Flatten()(conv6)

concatenated = concatenate([flat1, flat2])

dense1 = Dense(32, activation='relu')(concatenated)
out = Dense(1, activation='sigmoid')(dense1)
model = Model(inputs=[sent_in,sent_in2], outputs=out)
model.summary()

Моя сеть показана на рисунке ниже

My Network

Вопросы:

1) Должен ли каждый автоэнкодер иметь кодер и декодер?

2) Как повысить точность?

1 Ответ

0 голосов
/ 25 марта 2020

1) Должен ли каждый автоэнкодер иметь кодер и декодер?

Да, это обязательно. Если вы собираетесь обучать кодировщик и декодер как отдельные нейронные сети, вы можете вскоре столкнуться с проблемой того, что мы не знаем основную правду о том, какой должна быть кодировка (сжатый набор функций). Там нет метки, чтобы сказать, что входные функции должны соответствовать этой конкретной кодировки. Таким образом, невозможно обучить наш кодер! Без кодера у нас не будет кодировки, и поэтому у нас нет входных функций для декодера! Это также делает невозможным обучение нашего декодера!

2) Как повысить точность?

Ну, я думаю, что здесь ответили: Как повысить точность автоэнкодера?

Также может помочь следующее объяснение ниже:

Эффект авто-кодер на точность задачи классификации сверточной нейронной сети

Разумно сказать, что меньший кодированный размер приводит к более низкой точности, и точность становится стабильной, когда кодированный размер достигает определенного числа, потому что меньший кодированный размер означает больше потерь в данных изображения, что означает, что реструктурированное изображение будет более отличаться от исходных данных. Более того, даже несмотря на то, что кодированный размер достаточно велик, в данных изображения все еще есть потеря. Следовательно, точность все еще меньше, чем исходная точность, и точность на графике перестает расти. Когда автоматические кодировщики обучаются с достаточно большим кодированным размером, точность в обоих случаях составляет около 92%. По сравнению с CNN, который принимает исходные данные в качестве входных данных и достигает точности 99%, потеря точности из-за авто-кодировщиков не слишком велика.

Это основано на исследовательской работе.

...