Анализ на Python: чем отличаются «Бородино» и «Ледовое побоище»
Распределение строф поэм в семантическом пространстве: синие точки — Симонов, красные — Лермонтов.
Сравнительный анализ «Бородино» и «Ледового побоища»: семантика сквозь призму нейросетей
Шедевры русской военно-патриотической лирики — «Бородино» М. Ю. Лермонтова и «Ледовое побоище» К. М. Симонова — разделены столетием, но объединены общей темой ратного подвига. Чтобы уйти от субъективных литературоведческих оценок, я решил провести объективное сравнение этих произведений, используя предобученные эмбеддинги и методы визуализации данных.
Инструментарий исследования
Для реализации задачи был выбран современный стек библиотек для анализа данных и машинного обучения:
- Transformers — для загрузки и эксплуатации нейросетевой модели LaBSE.
- Torch — основной движок для работы с тензорами и вычислений на нейросети.
- Scikit-learn — инструмент для снижения размерности (PCA и t-SNE) и расчета метрик сходства.
Что такое эмбеддинги и как они работают?
В контексте NLP эмбеддинг представляет собой многомерный числовой вектор, в который преобразуется текст. Каждое предложение становится точкой в высокоразмерном пространстве. Математическая близость этих точек напрямую коррелирует с семантическим сходством исходных текстов.
Для определения этой близости традиционно применяется косинусное расстояние. В отличие от евклидовой метрики, этот метод ориентирован на угол между векторами, игнорируя их абсолютную длину. Если векторы направлены в одну сторону, косинус угла близок к единице, что свидетельствует о максимальной смысловой идентичности.
Преимущества модели LaBSE
Модель LaBSE (Language-agnostic BERT Sentence Embedding), разработанная Google, идеально подходит для нашей задачи. Обученная на 100 языках, она превосходно улавливает тонкие семантические связи и устойчива к архаизмам или специфическому синтаксису поэтического языка. Главный плюс — она эффективно работает «из коробки», не требуя специфического дообучения на стихах.
Техническая реализация
Процесс начался с предобработки: тексты поэм были разбиты на строфы. Каждая строфа подавалась на вход модели для генерации вектора размерностью 768. Ниже представлен фрагмент кода для извлечения признаков:
model_name = "sentence-transformers/LaBSE"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
def get_embeddings(sentences):
encoded = tokenizer(
sentences,
padding=True,
truncation=True,
max_length=512,
return_tensors="pt"
).to(device)
with torch.no_grad():
outputs = model(**encoded)
Усреднение скрытых состояний для получения вектора предложения
embeddings = outputs.last_hidden_state.mean(dim=1).cpu().numpy()
return embeddings</code></pre>
Визуализация и снижение размерности
Работать с 768-мерным пространством напрямую невозможно, поэтому я применил двухэтапное снижение размерности:
- PCA (Метод главных компонент): использовался для предварительного сжатия данных до 50 компонентов с целью отсечения информационного шума.
- t-SNE: нелинейный алгоритм, который позволил спроецировать данные на плоскость (2D) для визуального анализа, сохранив при этом локальные связи между похожими строфами.
pca = PCA(n_components=50 if X.shape[0] > 50 else min(10, X.shape[1]), random_state=42)
X_pca = pca.fit_transform(X)
tsne = TSNE(n_components=2, perplexity=min(30, X_pca.shape[0] - 1), random_state=42, init="pca")
X_tsne = tsne.fit_transform(X_pca)
Результаты и интерпретация
После подготовки данных был произведен расчет косинусного сходства между усредненными векторами двух произведений:
from sklearn.metrics.pairwise import cosine_similarity
mean_sim = emb_sim.mean(axis=0).reshape(1, -1)
mean_ler = emb_ler.mean(axis=0).reshape(1, -1)
similarity = cosine_similarity(mean_sim, mean_ler)[0][0]
Итоговый показатель сходства составил 0.959. В анализе данных значение выше 0.7 уже говорит о сильной семантической связи. Это подтверждает, что, несмотря на разные исторические эпохи, авторы используют схожий концептуальный аппарат.
График наглядно демонстрирует частичное перекрытие двух «облаков» смыслов. Это математическое доказательство того, что Симонов в «Ледовом побоище» фактически наследует лермонтовскую традицию, адаптируя её под культурный контекст своего времени. Исследование подтвердило высокую эффективность модели LaBSE в анализе сложных художественных текстов.
Глубокое стоимостное инвестирование: 90 лет доказанной эффективности
ARC-AGI-2: обучающая и тестовая выборки принадлежат разным распределениям
Каждый седьмой житель планеты страдает расстройством психики, но большинство остается без лечения
Конец правила 10 000 часов: почему упорный труд в эпоху ИИ больше не гарантирует успех
Эволюция вычисления числа π: от Гиппаса до современности
Новые мыслители эпохи ИИ: как Фристон и Ванчурин потеснили академическую философию
Операционная система, призванная уничтожить Windows
Чему я научился у детей, обучая их робототехнике