tf.keras.layers.Conv1D(128, 3, activation='relu'), # Уменьшили размер ядра до 3
tf.keras.layers.GlobalMaxPooling1D(),
tf.keras.layers.Dense(1, activation='sigmoid')
])
# Компилируем модель
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Обучаем модель
history = model.fit(padded_sequences, labels, epochs=10, verbose=1)
# Оцениваем модель на тестовых данных
test_texts = ["Это лучшая книга.", "Не стоит тратить деньги.", "Мне понравился фильм.", "Ужасное качество товара."]
test_labels = [1, 0, 1, 0] # Метки для тестовых данных
test_sequences = tokenizer.texts_to_sequences(test_texts)
padded_test_sequences = tf.keras.preprocessing.sequence.pad_sequences(test_sequences, maxlen=max_sequence_length)
test_labels = np.array(test_labels)
test_loss, test_accuracy = model.evaluate(padded_test_sequences, test_labels)
print(f"Точность на тестовых данных: {test_accuracy:.4f}")
# Визуализация результатов
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'], label='Точность на обучении')
plt.xlabel('Эпохи')
plt.ylabel('Точность')
plt.legend()
plt.subplot(1, 2, 2)
plt.plot(history.history['loss'], label='Потери на обучении')
plt.xlabel('Эпохи')
plt.ylabel('Потери')
plt.legend()
plt.show()
На графиках, полученных после выполнения предоставленного кода, вы увидите результаты обучения и оценку модели. Давайте разберем подробнее:
1. График точности на обучении (Точность на обучении): Этот график показывает, как точность модели изменяется в течение эпох обучения. Точность на обучении измеряет, как хорошо модель предсказывает данные обучения. Вы ожидаете, что точность будет увеличиваться с каждой эпохой. Если точность растет, это может указывать на то, что модель успешно изучает данные.
2. График потерь на обучении (Потери на обучении): Этот график отражает, как уменьшается потеря модели на обучении с течением эпох. Потери представляют собой меру того, насколько сильно предсказания модели отличаются от фактических меток. Цель – минимизировать потери. Уменьшение потерь также указывает на успешное обучение модели.
На практике хорошо обученная модель будет иметь следующие характеристики:
– Точность на обучении растет и стабилизируется на определенном уровне.
– Потери на обучении уменьшаются и стабилизируются на низком уровне.
Если точность на тестовых данных также высока, это означает, что модель успешно обобщает знания на новые, ранее не виденные данные.
На графиках, представленных в коде, вы сможете оценить, как точность и потери меняются с течением эпох, и определить успешность обучения модели.
Кроме того, существуют более сложные архитектуры, которые комбинируют RNN и CNN, чтобы использовать преимущества обоих типов сетей. Например, архитектура под названием Transformer, изначально разработанная для машинного перевода, стала основой для многих современных моделей в NLP, таких как BERT и GPT.
Архитектура Transformer представляет собой мощный прорыв в области обработки естественного языка (NLP) и обработки последовательностей в целом. Она представляет собой нейронную сеть, спроектированную специально для работы с последовательностями, и она имеет ряд ключевых особенностей:
1. Механизм внимания: Одной из ключевых особенностей Transformer является механизм внимания. Внимание позволяет модели фокусироваться на разных частях входных данных в зависимости от их важности. Это улучшает способность модели обрабатывать длинные последовательности и улавливать долгосрочные зависимости в данных.
2. Свёрточные и полносвязные слои: Transformer включает в себя свёрточные слои, которые работают с каждой позицией в последовательности независимо. Это позволяет модели извлекать локальные признаки из текста. Также в архитектуре есть полносвязные слои, которые обрабатывают информацию с учётом взаимодействия всех позиций в последовательности.
3. Многоуровневая структура: Transformer состоит из нескольких идентичных слоев, называемых "трансформерами", каждый из которых обрабатывает входные данные независимо. Это многоуровневое устройство позволяет модели извлекать признаки разной абстракции и работать с последовательностью на разных уровнях.
4. Многоголовое внимание: Transformer также использует многоголовое внимание (multi-head attention), что позволяет модели фокусироваться на разных аспектах входных данных одновременно. Это способствует изучению различных типов зависимостей в данных.
5.Позиционное кодирование: Поскольку Transformer не имеет встроенной информации о позиции слова в последовательности (как у RNN), используется позиционное кодирование. Это позволяет модели учитывать позицию каждого элемента в последовательности.
Архитектура Transformer и её модификации (например, BERT и GPT) стали основой для многих современных задач в NLP, включая машинный перевод, обработку текста, анализ тональности, вопросно-ответные системы и многое другое. Эти модели показали выдающуюся производительность благодаря своей способности к обучению на больших объёмах данных и обобщению на различные задачи.
BERT (Bidirectional Encoder Representations from Transformers) и GPT (Generative Pre-trained Transformer) – это две мощные модели для работы с естественным языком (Natural Language Processing, NLP). Они используют архитектуры Transformer для различных задач NLP, но они имеют разные цели и способы использования. Давайте рассмотрим каждую из них с подробным описанием и примерами использования.
BERT (Bidirectional Encoder Representations from Transformers)
Описание: BERT – это модель, разработанная Google AI, и она представляет собой архитектуру Transformer, обученную на огромном корпусе текста. Особенность BERT заключается в том, что она способна понимать контекст и семантику текста, учитывая оба направления (слева направо и справа налево) при обработке текста. Это делает BERT очень мощной для различных задач NLP.
Примеры использования:
1. Классификация текста: BERT может использоваться для задач классификации текста, таких как определение тональности (положительный/отрицательный отзыв), определение языка, категоризация текста и т. д.