Анализ на 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-мерным пространством напрямую невозможно, поэтому я применил двухэтапное снижение размерности:

  1. PCA (Метод главных компонент): использовался для предварительного сжатия данных до 50 компонентов с целью отсечения информационного шума.
  2. 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 уже говорит о сильной семантической связи. Это подтверждает, что, несмотря на разные исторические эпохи, авторы используют схожий концептуальный аппарат.

Анализ на Python: чем отличаются «Бородино» и «Ледовое побоище»
Распределение строф поэм в семантическом пространстве: синие точки — Симонов, красные — Лермонтов.

График наглядно демонстрирует частичное перекрытие двух «облаков» смыслов. Это математическое доказательство того, что Симонов в «Ледовом побоище» фактически наследует лермонтовскую традицию, адаптируя её под культурный контекст своего времени. Исследование подтвердило высокую эффективность модели LaBSE в анализе сложных художественных текстов.

 

Источник

Читайте также