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

Я пытаюсь выполнить анализ настроений над набором данных, состоящим из помеченного текста на английском языке, помеченного числом (0,4).

Отсюда я следую руководству по тензорному потоку: https://www.tensorflow.org/tutorials/keras/basic_text_classification адаптировано к моей проблеме классификации мультикласса.

Пример набора данных здесь:

PhraseId,SentenceId,Phrase,Sentiment
21071,942,irony,1
63332,3205,Blue Crush ' swims away with the Sleeper Movie of the Summer award .,2
142018,7705,in the third row of the IMAX cinema,2
103601,5464,images of a violent battlefield action picture,2 .
12235,523,an engrossing story,3
77679,3994,should come with the warning `` For serious film buffs only !,2
58875,2969,enjoyed it,3
152071,8297,"A delicious , quirky movie with a terrific screenplay and fanciful direction by Michael Gondry .",4

В настоящее время моя модель работает очень плохо, с постоянной точностью около0,5, и это не меняется в разные эпохи.

Я знаю, как настроить гиперпараметры модели и все приемы, которые я могу попробовать, но, похоже, ничего не помогает.Я убежден, что где-то допустил ошибку при обработке данных, поскольку я впервые делаю глубокое изучение текстовых данных.

Моя текущая предварительная обработка состоит из:

  • Удаление столбцов PhraseID и SentenceID из набора данных
  • Удаление знаков препинания и заглавных букв
  • Перенос порядка набора данных
  • Разделение данных и меток на разные кадры данных
  • Горячее кодирование меток
  • Токенизация данных с помощью Tokenizer предварительной обработки Keras
  • Заполнение последовательностей одинаковой длиной

Я думаю, что естьпроблема на этапе токенизации, или, может быть, я просто не понимаю, как модель берет токенизированные слова в качестве входного вектора и может извлечь из него уроки.

Мой соответствующий код токенизации:

    def tokenize_data(self, df, max_features=5000):
    self.logger.log(f'Tokenizing with {max_features} features')
    tokenizer = Tokenizer(num_words=max_features, split=' ')
    tokenizer.fit_on_texts(df.values)
    train_set = tokenizer.texts_to_sequences(df.values)
    if self.logger.verbose_f : self.logger.verbose(train_set[:10])
    return train_set

def pad_sequences(self, data, maxlen=5000):
    result = keras.preprocessing.sequence.pad_sequences(data,
                                                    value=0,
                                                    padding='post',
                                                    maxlen=maxlen)
    if self.logger.verbose_f:
        df = pd.DataFrame(result)
        df.to_csv("processed.csv")

    return result

Вывод последовательностей пэдов выглядит следующим образом:

7,821,3794,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

8,74,44,344,325,2904,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

и т. Д. Для каждого экземпляра.

Эти значения вводятся в модель таким образом, чтобы выступать в качестве обучающих данных.

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

Или я полностью лаю не на том дереве?

Спасибо

1 Ответ

0 голосов
/ 03 декабря 2018
  • Большая часть предварительной обработки данных в порядке и не требует изменений.
  • Нормализация данных должна выполняться, так как числа, подобные 0 и 2045, имеют большую разницу между ними и вызовут градиентывзорваться.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...