Статья опубликована в рамках: Научного журнала «Студенческий» № 8(346)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3
СРАВНИТЕЛЬНЫЙ АНАЛИЗ АРХИТЕКТУР LSTM И GRU В ЗАДАЧЕ СЕНТИМЕНТ-АНАЛИЗА НА МАЛЫХ ВЫБОРКАХ ДАННЫХ
АННОТАЦИЯ
В работе исследуется эффективность рекуррентных нейронных сетей (RNN) в задаче классификации тональности текста. Реализованы и обучены две архитектуры глубокого обучения на базе ячеек LSTM и GRU с использованием библиотеки TensorFlow/Keras. Особое внимание уделено программной реализации сложной топологии сети (стекинг слоев, регуляризация) и анализу причин переобучения.
ABSTRACT
This paper investigates the effectiveness of recurrent neural networks (RNNs) in the task of text sentiment analysis. Two deep learning architectures based on LSTM and GRU cells were implemented and trained using the TensorFlow/Keras library. Particular attention is given to the software implementation of complex network topologies (layer stacking, regularization) and the analysis of the causes of overfitting.
Ключевые слова: NLP, сентимент-анализ, LSTM, GRU, Keras, Embedding, переобучение, нейронные сети.
Keywords: NLP, sentiment analysis, LSTM, GRU, Keras, embedding, overfitting, neural networks.
Введение
Определение тональности текста (Sentiment Analysis) — классическая задача обработки естественного языка, сводящаяся к бинарной или мультиклассовой классификации. Основная сложность заключается в том, что смысл высказывания зависит от последовательности слов и контекста, который теряется при использовании простых методов (например, Bag-of-Words) [1, с. 202].
Рекуррентные нейронные сети (RNN) решают эту проблему, сохраняя «состояние» (память) при проходе по последовательности. В данной работе проводится сравнительный анализ двух наиболее популярных модификаций RNN: LSTM (Long Short-Term Memory) [3] и GRU (Gated Recurrent Unit) [2]. Цель работы — не только сравнить метрики точности, но и проанализировать поведение моделей с точки зрения программной реализации и устойчивости к переобучению.
Материалы и методы исследования
1. Формирование и предобработка датасета
Для эксперимента был создан уникальный датасет из 200 высказываний (100 положительных, 100 отрицательных) для обучения и 50 высказываний для независимого тестирования.
Программная предобработка данных включала следующие этапы:
- Токенизация: Использован класс Tokenizer (Keras). Текст очищался от пунктуации и приводился к нижнему регистру [1, с. 210]. Словарь был ограничен MAX_WORDS = 5000, что достаточно для покрытия лексики коротких бытовых фраз.
- Индексация: Тексты преобразовывались в последовательности целых чисел.
- Паддинг (Padding): Поскольку нейронная сеть требует входной тензор фиксированного размера, а длины фраз различаются, применен метод pad_sequences. Максимальная длина последовательности установлена в MAX_SEQUENCE_LENGTH = 50. Короткие фразы дополнялись нулями, длинные — усекались.
2. Архитектура и программная реализация моделей
Обе модели были реализованы с помощью Sequential API фреймворка TensorFlow. Архитектура выбрана идентичной для чистоты эксперимента, за исключением типа рекуррентной ячейки.
Структура разработанной сети:
# Фрагмент реализации модели LSTM
model = Sequential([
Embedding(MAX_WORDS, 32, input_length=MAX_SEQUENCE_LENGTH),
# 1-й рекуррентный блок
LSTM(16, return_sequences=True),
BatchNormalization(),
Dropout(0.2),
# 2-й рекуррентный блок
LSTM(8),
BatchNormalization(),
Dropout(0.2),
# Полносвязные слои
Dense(8, activation='relu'),
Dense(2, activation='softmax')
])
Листинг 1. Программная реализация архитектуры LSTM на языке Python.
- Embedding Layer: Входной слой размерности (None, 50), преобразующий целочисленные индексы в плотные векторы размерностью 32. Это позволяет модели улавливать семантическую близость слов, чего нельзя добиться при One-Hot кодировании.
- Первый рекуррентный слой (LSTM/GRU, 16 нейронов):
- Ключевой параметр реализации: return_sequences=True. Это необходимо для создания «глубокой» (stacked) рекуррентной сети. Слой возвращает полную последовательность скрытых состояний для передачи следующему рекуррентному слою, а не только последний вектор.
- BatchNormalization: Нормализация выходов слоя по мини-батчу. Этот слой добавлен для ускорения сходимости и стабилизации весов, что критично при малом размере обучающей выборки.
- Dropout (0.2): Слой регуляризации, случайно зануляющий 20% связей. В условиях малого датасета (
) риск переобучения экстремально высок, и Dropout принуждает сеть выучивать робастные признаки, а не «запоминать» конкретные примеры. - Второй рекуррентный слой (LSTM/GRU, 8 нейронов): Параметр return_sequences=False (по умолчанию). Слой возвращает только вектор последнего состояния, который содержит сжатую информацию о всем прочитанном предложении.
- Dense (8, activation='relu'): Полносвязный слой для интерпретации признаков, извлеченных RNN.
- Dense (2, activation='softmax'): Выходной слой. Использована функция Softmax, так как задача сформулирована как классификация на 2 взаимоисключающих класса [1, с. 115].
3. Процесс обучения
Использован оптимизатор Adam с learning_rate=0.001. Функция потерь — sparse_categorical_crossentropy, так как метки классов подаются в виде целых чисел (0 и 1), а не one-hot векторов.
Для предотвращения переобучения внедрен коллбэк EarlyStopping (мониторинг val_loss, терпение 10 эпох), который останавливает обучение, когда ошибка на валидации перестает падать, и возвращает веса лучшей эпохи.
Результаты экспериментов
В ходе обучения модели показали разную динамику.
Анализ модели LSTM:
Модель LSTM продемонстрировала классические признаки переобучения.

Рисунок 1. Динамика обучения модели LSTM
Результаты обучения модели LSTM:
Статистика обучения LSTM модели:
Финальная точность на обучающей выборке: 98.75%
Финальная точность на валидационной выборке: 72.50%
Финальные потери на обучающей выборке: 0.0567
Финальные потери на валидационной выборке: 1.0603
Лучшая эпоха: 15
Лучшая точность на валидации: 92.50%
- Точность на обучающей выборке достигла 98.75%.
- Точность на валидации (проверочной выборке) в финале упала до 72.50% (при пиковом значении 92.50% на 15-й эпохе).
- Это свидетельствует о том, что сложная структура LSTM (имеющая 3 вентиля: input, forget, output) обладает избыточной емкостью для столь малого датасета и начинает «заучивать» шум [2].
Анализ модели GRU:
Модель GRU показала более стабильные результаты.
- Метрики на обучении и валидации были более сбалансированы.
- Обучение заняло больше времени (см. табл. 1), что объясняется работой механизма EarlyStopping: модель GRU дольше улучшала свои показатели на валидации и, следовательно, обучилась на большем количестве эпох, прежде чем сработала остановка.
Итоговое сравнение на тестовой выборке:
После обучения была проведена проверка на отложенной выборке (Test Set), которую модели «не видели» ранее.
Таблица 1.
Сравнительные характеристики моделей
|
Характеристика |
LSTM |
GRU |
|
Время обучения |
34.03 сек |
39.29 сек |
|
Точность (Accuracy) на тесте |
70.00% |
88.00% |
|
Оценка переобучения |
Высокая |
Низкая |
Обсуждение результатов
Полученные результаты (70% у LSTM против 88% у GRU) подтверждают гипотезу о том, что для задач с небольшим объемом данных более простые архитектуры часто работают лучше.
- Почему GRU точнее? Ячейка GRU имеет только два вентиля (reset и update) и, следовательно, меньше обучаемых параметров, чем LSTM [3]. Меньшее количество параметров снижает риск переобучения (overfitting). Модель LSTM, обладая большей «мощностью», просто запомнила тренировочные примеры, но не смогла выделить общие закономерности для новых данных.
- Почему GRU обучалась дольше? Несмотря на то, что одна эпоха GRU вычислительно легче, итоговое время (39.29 сек) оказалось выше, чем у LSTM (34.03 сек). Это связано с динамикой сходимости: LSTM быстро переобучилась, и ошибка на валидации начала расти, что вызвало раннюю остановку (Early Stopping). GRU продолжала эффективно учиться дольше, улучшая результат, поэтому процесс занял больше эпох.
Заключение
В ходе исследования была реализована система сентимент-анализа на языке Python. Эксперимент показал, что добавление слоев нормализации (BatchNormalization) и регуляризации (Dropout) является критически важным при построении глубоких рекуррентных сетей.
Главным выводом работы является превосходство архитектуры GRU над LSTM в условиях ограниченной выборки данных (200 примеров). GRU показала точность 88.00%, в то время как LSTM — 70.00%, что делает GRU предпочтительным выбором для задач анализа коротких текстов в условиях нехватки размеченных данных.
Список литературы:
- Шолле Ф. Глубокое обучение на Python. — СПб.: Питер, 2018. — 400 с.
- Chung J. et al. Empirical evaluation of gated recurrent neural networks on sequence modeling // arXiv preprint arXiv:1412.3555. — 2014.
- Hochreiter S., Schmidhuber J. Long short-term memory // Neural computation. — 1997. — Vol. 9, № 8. — P. 1735-1780.

