www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Классифицируйте Токсичные Комментарии Онлайн с LSTM и GloVe

Дата публикации Sep 23, 2019

В этой статье показано, как использовать простойLSTMи один из предварительно обученныхперчаткафайлы, чтобы создать прочную основу дляпроблема классификации токсичных комментариев,

Статья состоит из 4 основных разделов:

  • Подготовка данных
  • Реализация простой модели LSTM (RNN)
  • Обучение модели
  • Оценка модели

Данные

В следующих шагах мы установим ключевые параметры модели и разделим данные.

  • «MAX_NB_WORDS”Устанавливает максимальное количество слов, которые следует рассматривать как функции для токенизатора.
  • «MAX_SEQUENCE_LENGTHОбрезает тексты после этого числа слов (средиMAX_NB_WORDSсамые распространенные слова).
  • «VALIDATION_SPLIT»Устанавливает порцию данных для проверки и не используется в обучении.
  • «EMBEDDING_DIM»Определяет размер« векторного пространства ».
  • «GLOVE_DIR»Определяет каталог файлов GloVe.
  • Разделите данные на тексты и метки.
toxic_data.py

Предварительная обработка текста

На следующем шаге мы удаляем стоп-слова, знаки препинания и делаем все строчными.

preprocessing_toxic.py

Посмотрите пример данных.

print('Sample data:', texts[1], y[1])
  • Мы создаем токенизатор, настроенный только наMAX_NB_WORDSсамые распространенные слова
  • Мы строим индекс слова.
  • Мы можем восстановить индекс слова, который был вычислен.
tokenizer = Tokenizer(num_words=MAX_NB_WORDS)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
word_index = tokenizer.word_index
print('Vocabulary size:', len(word_index))
  • Превращает списки целых чисел в двумерный целочисленный тензор формы (samples, maxlen)
  • Пэд после каждой последовательности.
data = pad_sequences(sequences, padding = 'post', maxlen = MAX_SEQUENCE_LENGTH)print('Shape of data tensor:', data.shape)
print('Shape of label tensor:', y.shape)
  • Перемешать данные.
indices = np.arange(data.shape[0])
np.random.shuffle(indices)
data = data[indices]
labels = y[indices]

Создайте разделение проверки поезда.

num_validation_samples = int(VALIDATION_SPLIT*data.shape[0])
x_train = data[: -num_validation_samples]
y_train = labels[: -num_validation_samples]
x_val = data[-num_validation_samples: ]
y_val = labels[-num_validation_samples: ]print('Number of entries in each category:')
print('training: ', y_train.sum(axis=0))
print('validation: ', y_val.sum(axis=0))

Вот как выглядят данные:

print('Tokenized sentences: \n', data[10])
print('One hot label: \n', labels[10])
Рисунок 1

Создать модель

embedding_index.py
  • Создайте слои для встраивания.
  • Определяет максимальную входную длину для слоя Embedding.
  • Используйте вывод предыдущего слоя внедрения, который выводит трехмерный тензор в слой LSTM.
  • ИспользоватьСлой Global Max Poolingчтобы преобразовать трехмерный тензор в двухмерный.
  • Мы устанавливаем выпадающий слой, чтобы выпадать 10% узлов.
  • Мы определяем Плотный слой, чтобы получить выходной размер 50.
  • Мы снова подаем вывод в слой Dropout.
  • Наконец, мы подаем вывод в слой «Sigmoid».
embedding_layers.py

Пришло время скомпилировать модель в статический график для обучения.

  • Определите входы, выходы и настройте процесс обучения.
  • Установите модель для оптимизации нашей функции потерь с помощью оптимизатора «Адам», определите функцию потерь как «binary_crossentropy».
model = Model(sequence_input, preds)
model.compile(loss = 'binary_crossentropy',
optimizer='adam',
metrics = ['accuracy'])
  • Мы можем визуализировать модель архитектора.
tf.keras.utils.plot_model(model)
фигура 2

Подготовка

  • Введите список из 32 дополненных, проиндексированных предложений для каждой партии. Набор проверки будет использоваться для оценки того, была ли модель переоснащена.
  • Модель будет работать в течение 2 эпох, потому что даже 2 эпохи достаточно, чтобы переодеться.
print('Training progress:')
history = model.fit(x_train, y_train, epochs = 2, batch_size=32, validation_data=(x_val, y_val))

Оценить модель

loss = history.history['loss']
val_loss = history.history['val_loss']epochs = range(1, len(loss)+1)plt.plot(epochs, loss, label='Training loss')
plt.plot(epochs, val_loss, label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show();
Рисунок 3
accuracy = history.history['accuracy']
val_accuracy = history.history['val_accuracy']plt.plot(epochs, accuracy, label='Training accuracy')
plt.plot(epochs, val_accuracy, label='Validation accuracy')
plt.title('Training and validation accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epochs')
plt.legend()
plt.show();
Рисунок 4

Блокнот Jupyterможно найти наGithub, Счастливый понедельник!

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map