Я пытаюсь выполнить анализ настроений над набором данных, состоящим из помеченного текста на английском языке, помеченного числом (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
и т. Д. Для каждого экземпляра.
Эти значения вводятся в модель таким образом, чтобы выступать в качестве обучающих данных.
Нужно ли выполнять какую-то нормализацию, прежде чем я обучусь этому?
Или я полностью лаю не на том дереве?
Спасибо