Как установить фиксированную и правильную длину последовательности в анализе настроений с помощью LSTM? - PullRequest
0 голосов
/ 15 июня 2019

Я работаю над проблемой классификации настроений, и многие из вас, ребята, знают, что мы должны выполнить предварительную обработку текста, чтобы передать его в слои для встраивания слов. Соответственно, на первых нескольких этапах предварительной обработки я сталкиваюсь с тем, что после некоторой предварительной обработки данных я должен установить длину последовательности, в которой будут находиться данные. Если текстовая строка обзора как-то меньше, чем длина последовательности, то мы должны будем дополнить ее, а если больше, чем длина последовательности, то мы должны усечь ее до длины последовательности. Но какое должно быть оптимальное значение для этой длины последовательности? Во многих постах это 200, 100 и даже если я поставлю 50, это работает. Это мой код -

def pad_features(reviews_int, sequence_length):

  features = np.zeros((len(reviews_int), sequence_length), dtype = int)

  for i, review in enumerate(reviews_int):

    reviews_len = len(review)

    if reviews_len <= sequence_length:
      zeroes = list(np.zeros(sequence_length - reviews_len))
      new = zeroes + review

    elif reviews_len > sequence_length:
      new = review[0:sequence_length]

    features[i, :] = np.array(new)

  return features
sequence_length = 100

features = pad_features(reviews_int, sequence_length = sequence_length)

#assert len(features)==len(reviews_int)
#assert len(features[0])==sequence_length

print (features[:10,:10])

Я сейчас в замешательстве. Можете ли вы помочь в выборе правильной и оптимальной длины последовательности? Заранее спасибо.

1 Ответ

0 голосов
/ 19 июня 2019

Я буду предполагать, что в этом ответе вы используете RNN Keras или TensorFlow, но на самом деле применимы и любые другие инструменты.

Первое, что нужно упомянуть, это то, что вы не всегда вынуждены выбиратьдлина одной последовательности.Определив соответствующий размер временного шага входной формы в вашей нейронной сети как None, вы можете иметь различную длину последовательности между различными пакетами.Единственное ограничение заключается в том, что длина последовательности в пределах одного пакета должна быть эквивалентной, и это из-за предопределенного свойства формы Tensors.Следовательно, вы можете подавать партии нейронных последовательностей, скажем, 50, 100 и 150 последовательностей и видеть, как она работает.

Однако часто предпочтительнее задавать одну длину последовательности, поскольку она более интуитивна и прощеработать с.Вы можете просто обучать различные модели, в которых единственной изменяющейся переменной является длина последовательности, и сравнивать их точность проверки.Разные задачи будут иметь разную оптимальную длину последовательности: анализ настроений может выполняться с более короткими длинами последовательностей, тогда как языковые модели обычно выполняются с более длинными длинами последовательностей.Безопасным подходом было бы взять медиана длина последовательности вашего набора данных.

Возможно, более безопасный подход заключается в том, чтобы либо взять максимальную длину последовательности, либо длину последовательностиэто не приводит к усечению большого количества предложений.Однако это зависит от вашей архитектуры.Этот подход потенциально будет работать лучше с такой концепцией, как Сверточные RNN (Kim et. Al., 2014), где мы используем скользящие окна для перехода по последовательности за короткие временные шаги (3, 5 и т. Д.), Какмы бы к изображению с CNN.Другим потенциальным направлением является механизм локального внимания (Luong et. Al., 2015), который адаптивно фокусируется на отдельном подмножестве скрытых состояний, полученных из входных последовательностей.С другой стороны, длина последовательности, очевидно, является параметром для эксперимента, и у нас не может быть определенного ответа.

...