Покоен будь: когда я буду смертью скован,

     Без мысли быть опять когда-нибудь раскован,

     Останутся тебе на память, милый мой,

     Немногие стихи, написанные мной.

     И, пробегая их, увидишь, друг мой милый,

     Что эти сотни строк посвящены тебе:

     Лишь  прах возьмет земля, как должное, себе,

     Но лучшее - мой ум - твое, мой друг, с могилой.

     Итак, когда умрет покров души моей,

     Ты потеряешь лишь подонки жизни бренной,

     Добычу черной мглы, хирургов и червей,

     Не стоящую слез твоей тоски священной.

     Стихи ж  мои могу почтить я похвалой

     За то, что их никто не разлучит с тобой.

Это 74 сонет Шекспира в переводе Николая Гербеля. Свои сонеты Шекспир написал в конце 16 века. При этом для русского читателя важнейшая часть мирового поэтического наследия оставалась не известной больше 300 лет! Только в конце 19 века были изданы первые переводы сонетов на русский. Перевел их и издал все тот же Николай Гербель. Позднее за переводы сонетов брались многие мастера и любители. Мне стало интересным провести лексико-семантический анализ нескольких переводов 74 сонета и сравнить их с оригиналом. Я взял четырех авторов, авторитет которых как поэтов и переводчиков вне сомнения - Гербеля, Маршака, Пастернака и Модеста Чайковского. Я захотел проверить, кто из переводчиков точнее всего передал смысл, ритм и эмоции оригинала, используя алгоритмы машинного обучения.

Я использовал Counter для подсчета частоты слов, nltk для обработки естественного языка токенизация, модель sentence-transformers для семантического анализа, она понимает, насколько два текста похожи по смыслу.

Я посчитал слоги, чтобы сравнить размеры. В русском языке один слог это одна гласная. В английском некоторые группы гласных (ea, ou) тоже считаются за один слог. Это упрощенн��й, но эффективный для моего случая способ. Шекспир писал в ямбическом пентаметре, у него 10 ударных слогов на строку. Проверю и выясню, сохраняет ли переводчик ритм, относится ли к форме уважительно.

def count_syllables_russian(text):
    return len(re.findall(r'[аеёиоуыэюя]', text.lower()))
def count_syllables_english(text):
    return len(re.findall(r'[aeiouy]+', text.lower(), re.IGNORECASE))

Что показал анализ здесь. Все переводчики держатся около 9–11 слогов. Они сохраняют метрическую структуру и даже если слова меняются, ритм остаётся.

Длина строк в переводах
Длина строк в переводах

Далее я решил установить ключевые слова в оригинале и переводах.

def extract_keywords(text, lang='russian', top_n=10):
    if lang == 'english':
        tokens = word_tokenize(text.lower())
        stop_words = set(stopwords.words('english'))
    else:
        text_clean = re.sub(r'[^а-яА-ЯёЁ\s]', '', text.lower())
        tokens = word_tokenize(text_clean, language='russian')
        stop_words = stop_words_ru
    filtered = [w for w in tokens if w not in stop_words and len(w) > 2]
    common = Counter(filtered).most_common(top_n)
    return dict(common)

Команда word_tokenize разбивает текст на слова. Стоп-слова и союзы я удалил. И получил топ-10 самых важных слов в каждом переводе.

Результат:

Оригинал: thee(4), thou(3), shall(2), life(2), part(2), earth(2), contented(1), fell(1), arrest(1), without(1)

Гербель: тебе(2), милый(2), стихи(2), друг(2), лишь(2), покоен(1), будь(1), буду(1), смертью(1), скован(1)

Маршак: вновь(2), тебе(2), отправят(1), арест(1), выкупа(1), залога(1), отсрочки(1), глыба(1), камня(1), могильный(1)

Пастернак: тебе(2), успокойся(1), дни(1), острог(1), навек(1), смертью(1), буду(1), взят(1), стражу(1), одна(1)

Чайковский: памяти(2), твоей(2), лишь(2), покоен(1), будь(1), приказ(1), суровый(1), бесследно(1), унесет(1), долой(1)

Ели судить по этой части анализа, то Николай Гербель и Маршак делают акцент на личном обращении, "милый", "тебе".  Модест Чайковский ставит больше акцент на памяти. В оригинале так же больше прямых личных обращений, их больше потому, что Шекспир использует два разных английских местоимения "ты". Таким образом, форма у всех переводов схожа, но акценты переводчики расставляют по-разному.

Далее я проверил семантическое сходство с помощью SentenceTransformer. Это мультиязычная модель, она может сравнивать английские и русские предложения. Эта модель не просто сравнивает слова, а учитывает контекст, и довольно быстро работает. Paraphrase-multilingual-MiniLM-L12-v2 это разновидность SBERT. Она отображает предложения и абзацы в 384-мерное векторное пространство. Сам SBERT представляет собой модификацию BERT, оптимизированную для создания векторных представлений предложений и документов.

orig_emb = model_sim.encode(original_lines, convert_to_tensor=True)
trans_emb = model_sim.encode(lines, convert_to_tensor=True)
cosine_scores = util.cos_sim(orig_emb, trans_emb)
similarities = [cosine_scores[i][i].item() for i in range(14)]
avg_similarity = sum(similarities) / len(similarities)

Каждая строка переводится в вектор, и считается косинусное сходство между строками оригинала и перевода и усредняется по всем 14 строкам. Чем выше получившееся число, тем ближе перевод к оригиналу по смыслу.

Что получилось.

Семантическое сходство с оригиналом:

Гербель: среднее сходство = 0.387

Маршак: среднее сходство = 0.399

Пастернак: среднее сходство = 0.454

Чайковский: среднее сходство = 0.516

Самое высокое семантическое сходство вычислено моделью у перевода Модеста Чайковского. Брат известного композитора, кроме Шекспира, переводил с немецкого либретто опер и перевел на итальянский язык несколько рассказов Чехова. Как поэт Модест Чайковский известен не был.

семантическое сходство с оригиналом
семантическое сходство с оригиналом

Еще я проверил тональность с помощью модели blanchefort/rubert-base-cased-sentiment. Это доступная публичная модель, поддерживает три класса эмоций, и работает на литературе. Но интересных результатов эта часть анализа не принесла, все переводы модель оценила как NEUTRAL.

В целом по результату исследования получилось, что перевод Модеста Чайковского самый близкий к оригиналу по смыслу. Возможно, потому что он меньше "поэтизирует" и больше следует буквальному тексту. В его переводе сделан акцент на "долг" и "память", это близко к шекспировской теме бессмертия через стихи. Перевод Николая Гербеля оказался по результатам математического анализа наиболее свободным. Переводчик добавляет в текст слово "милый", уклоняясь в сторону интерпретации. Маршак как переводчик сонетов строг и формален. Борис Пастернак учился в Германии и в достаточной степени английского не знал до того, как взялся за переводы Шекспира. Его перевод философски глубок, даже такой "пастернаковский".

Анализ не подтверждает высокого сематического сходства у переводов Маршака и Пастернака, но поэтическая мощь их переводов не подлежит сомнению.