Как я объединил перевод и суммаризацию текстов, и что из этого вышло.
Как я объединил перевод и суммаризацию текстов, и что из этого вышло.

Перевод и суммаризация текстов – это две задачи, которые на первый взгляд кажутся совершенно разными. Перевод требует точного передачи исходного содержания на другой язык, сохраняя все детали и нюансы. Суммаризация же предполагает сокращение текста до его основных идей, часто убирая второстепенные детали.

Однако при ближайшем рассмотрении эти задачи имеют много общего:

  • Обе требуют глубокого понимания содержания текста

  • Обе должны учитывать контекст и семантические связи между частями текста

  • Обе оперируют естественным языком и сталкиваются с проблемами неоднозначности и многозначности

Это натолкнуло меня на мысль о том, можно ли взять модель машинного перевода и адаптировать её для решения задачи суммаризации? Или даже совместить обе задачи в одну модель?

Почему этот подход имеет смысл?

  1. Общие требования к пониманию контекста
    Как при переводе, так и при суммаризации важно понимать не только отдельные предложения, но и общую структуру текста, взаимосвязь между частями документа.

  2. Похожие механизмы обработки
    Современные модели машинного перевода уже используют механизмы внимания в моделях вида Трансформер, которые позволяют улавливать важные части текста – те же механизмы могут быть полезны для выделения ключевых моментов при суммаризации.

  3. Экономия ресурсов
    Создание отдельных моделей для суммаризации требует значительных вычислительных мощностей и времени. Комбинированный подход перевода текстов и суммаризации может позволить использовать похожие подходы для обоих задач. Снизив требование к количеству данных необходимых для обучения.

  4. Расширение доступных данных для обучения
    Одновременно с этим, используя многоязычную модель перевода, мы одновременно получаем доступ к большему количеству данных по суммаризации. Так как в этой задаче не так много данных изначально, особенно учитывая ограниченность данных на русском языке. Теперь можно объединить данные на разных языках в единый обучающий набор, значительно увеличив объем и разнообразие информации, на которой впоследствии будет обучаться модель.

Улучшение гибкости модели: управление длиной полученного резюме

Кроме того, я задумался о добавлении еще одного важного функционала. При изучении материалов по теме суммаризации я обнаружил статью о том, как ребята из SberDevices разрабатывали свои модели суммаризации, В данной статье можно найти неотвеченный комментарий о том, что в полученных моделях суммаризации нельзя в обычном режиме регулировать длину получаемого резюме.

Действительно, одним из ключевых ограничений существующих моделей является отсутствие возможности управлять длиной получаемого резюме. В реальной жизни потребности пользователей могут сильно различаться:

  • Кому-то нужен очень короткий тезис – всего 3–4 слова для быстрого понимания смысла.

  • Другие предпочитают более подробное резюме чтобы получить глубокое представление о содержании документа.

  • Третьи хотят найти золотую середину – компактное и информативное резюме средней длины.

Эта проблема стала отправной точкой для разработки модели суммаризации с условно-управляемой длиной получаемого резюме. Благодаря этой возможности модель смогла бы адаптироваться к разным сценариям использования:

  • Для быстрого просмотра : вы можете запросить сверхкороткое резюме из нескольких слов.

  • Для подробного анализа : модель способна создавать более развёрнутые и детализированные резюме.

  • Для сбалансированного подхода : она предоставляет возможность выбрать оптимальную длину резюме, зависящую от контекста задачи.

Таким образом, модель становится полезной для большего количества различных сценариев применения.

Как это было реализовано

1) Выбор модели для обучения

В качестве базовой модели для дообучения я решил взять свои модели, которые предварительно были обучены на задаче перевода текстов для языков: русский, английский и китайский

Подробнее об их создании я писал в своих прошлых статьях: статья 1, статья 2

За прошедшее время, список моделей пополнился еще двумя:

  1. t5_translate_en_ru_zh_large_1024_v2 – модель адаптированная для перевода текстов и документов длиной до 1024 токенов на архитектуре t5.

  1. m2m_translate_en_ru_zh_large_4096 – новая модель с увеличенным контекстом адаптированная для перевода больших текстов и документов длиной до 4096 токенов на архитектуре m2m.

Первая модель, стала основой для large модели суммаризации, а её вариация в размере base, стала основой для модели поменьше.

2) Подготовка данных для обучения

Я решил сразу скачать все имеющиеся в свободном доступе датасеты по суммаризации, я брал многое из того, что было доступно на сайте huggingface. Для этого очень удобно воспользоваться фильтрами, с отбором по нужному языку и нужной задаче: Summarization.

Чтобы добавить возможности функции перевода получаемого резюме, я дополнительно выполнил перевод собранных датасетов на другие параллельные языки, чтобы получить кросс-язычные переводы. Для этого, я использовал свои модели перевода текстов.

Важно было собрать данные резюме из разных тематик: новостные сайты, диалоги, вики статьи, обычные тексты. Чтобы полученная модель лучше умела обобщать тексты из различных сценариев и ситуаций.

Этап подготовки с сбора данных это наверное самая кропотливая часть работы в данном процессе.

В общем случае у меня получилось собрать 10 гигабайт текстов и резюме на трех языках: русский, английский и китайский.

3) Обучение моделей.

Модель base обучалась на полученном наборе данных 3 эпохи, в течение 2 недель.

Модель large обучалась 2 эпохи, почти месяц. На моей RTX 3090.

4) Как я оценивал полученный результат обученных моделей

Для оценки качества разработанных моделей был проведен подробный бенчмарк, сравнивающий их с существующими решениями.

Бенчмарк доступен по ссылке: https://huggingface.co/spaces/utrobinmv/Benchmark_Summary_En_Ru_Zh .

Цели бенчмарка:

  1. Сравнение производительности между новыми моделями и существующими решениями.

  2. Оценка качества на разных языках (русский, английский, китайский).

  3. Тестирование на различных датасетах чтобы проверить универсальность моделей.

Модели-участники бенчмарка:

Были протестированы следующие модели:

  • Разработанные модели:

  • Существующие модели:

    • basil-77/rut5-base-absum-hh

    • cointegrated/rut5-base-absum

    • csebuetnlp/mT5_m2o_chinese_simplified_crossSum

    • csebuetnlp/mT5_m2o_russian_crossSum

    • csebuetnlp/mT5_multilingual_XLSum

    • d0rj/rut5-base-summ

    • IlyaGusev/rut5_base_headline_gen_telegram

    • IlyaGusev/rut5_base_sum_gazeta

    • tuner007/pegasus_summarizer

    • yihsuan/mt5_chinese_small

Датасеты для тестирования:

Для оценки моделей использовались следующие датасеты:

  • Gazeta: Новостные статьи на русском языке.

  • Samsum: Диалоги и сообщения на английском языке.

  • Wikilingua: Многоязычные статьи вики.

  • XLSum: Новостные статьи на множестве языков.

  • XSum: Английские новостные статьи.

Используемые метрики:

Для оценки качества саммари использовал следующие метрики:

  • ROUGE-1, ROUGE-2, ROUGE-L: Оценивают пересечение n-грамм между генерируемым и референсным саммари.

  • BLEU, SacreBLEU: Измеряет точность соответствия генерируемого текста референсу.

  • CHRF: Считает совпадение символьных n-грамм.

  • TER: Оценивает редакторское расстояние между текстами.

  • METEOR: Учитывает семантическое соответствие слов.

  • COMET: Оценивает качество с точки зрения человека.

  • BERTScore: Измеряет семантическое сходство с использованием предобученной BERT-модели.

Полученные результаты сравнения

По результатам проведенного сравнения моделей, можно сказать, что модели очень уверенно вошли в рейтинг, и по многим метрикам являются либо лучшими, либо близки к лучших позициям. Даже если не брать во внимание: уникальные возможности перевода саммари, условного управления длиной саммари и многозадачность модели для перевода текстов различных тематик.

Сравнение для русского языка:

Сравнение моделей суммаризации для русского языка
Сравнение моделей суммаризации для русского языка

Сравнение для английского языка:

Сравнение моделей суммаризации для английского языка
Сравнение моделей суммаризации для английского языка

Полные результаты можно посмотреть в самом бенчмарке.

Использование моделей

Веса моделей полностью открыты, и вы можете использовать их в своих проектах с помощью различных инструментов и языков программирования.

Я опишу лишь вариант с применением python, pytorch и библиотеки transformers.

Особенностью модели является то, что она является многозадачной. Модель принимает текст на вход и генерирует текст на выходе. Для определения задачи необходимо указать её в начале строки текста, подаваемой на вход модели.

Модель понимает 12 команд. Три из них определяют необходимую условную длину резюме.

  1. "summary: " - для генерации резюме средней длины (в среднем от 20 до 50 токенов)

  2. "summary brief: " - для очень краткого резюме (до 20 токенов)

  3. "summary big: " - для генерации удлинённого резюме (от 50 до 200 токенов)

При этом на вход модель принимает текст длиной до 2048 токенов. Может принимать и больший текст, но обучение проводилось именно на заданной длине.

В обычном режиме модель формирует краткое резюме на языке получаемого источника, но остальные 8 команд-задач определяют необходимость перевода получаемого резюме на заданный язык, для этого просто к задаче добавляем приставку "… to <lang>: ":

  1. "summary to en: " - для генерации резюме средней длины на английском языке

  2. "summary brief to en: " - для очень краткого резюме на английском языке

  3. "summary big to en: " - для генерации удлинённого резюме на английском языке

  4. "summary to ru: " - для генерации резюме средней длины на русском языке

  5. "summary brief to ru: " - для очень краткого резюме на русском языке

  6. "summary big to ru: " - для генерации резюме средней длины на русском языке

  7. "summary to zh: " - для генерации резюме средней длины на китайском языке

  8. "summary brief to zh: " - для очень краткого резюме на китайском языке

  9. "summary big to zh: " - для генерации резюме средней длины на китайском языке

К команде можно добавить суффикс для уточнения желаемой длины резюме в количестве слов. Например, строка 'N words' указывает желаемое количество слов резюме.

Пример подобной задачи:

"summary brief 4 words: "

или пример с использованием перевода:

"summary brief to en 4 words: "

Приведу ниже пример кода с краткими пояснениями по запуску:

Сначала загружаем токенизатор и модель. Затем определяем устройство, на котором будет выполняться вычисление — видеокарта или процессор

from transformers import T5ForConditionalGeneration, T5Tokenizer

device = 'cuda' # или 'cpu' для загрузки на процессоре

model_name = 'utrobinmv/t5_summary_en_ru_zh_large_2048'
tokenizer = T5Tokenizer.from_pretrained(model_name)
model = T5ForConditionalGeneration.from_pretrained(model_name)
model.eval()
model.to(device)

Извлекаем из модели конфиг генерации, используемый по умолчанию. Затем определяем текст, который хотим суммаризовать.

Вы можете изменять параметры генерации в зависимости от задачи, однако рекомендуется использовать настройки, заданные в модели.

generation_config = model.generation_config

text = """Высота башни составляет 324 метра (1063 фута),
 примерно такая же высота, как у 81-этажного здания, и самое высокое 
 сооружение в Париже. Его основание квадратно, размером 125 метров 
 (410 футов) с любой стороны. Во время строительства Эйфелева башня
 превзошла монумент Вашингтона, став самым высоким искусственным сооружением
 в мире, и этот титул она удерживала в течение 41 года до завершения 
 строительство здания Крайслер в Нью-Йорке в 1930 году. Это первое 
 сооружение которое достигло высоты 300 метров. Из-за добавления вещательной
 антенны на вершине башни в 1957 году она сейчас выше здания Крайслер 
 на 5,2 метра (17 футов). За исключением передатчиков, Эйфелева башня 
 является второй самой высокой отдельно стоящей структурой во Франции 
 после виадука Мийо."""

Для обычного резюме указываем задачу 'summary: ' и получаем результат генерации.

prefix = 'summary: '
src_text = prefix + text
input_ids = tokenizer(src_text, return_tensors="pt")

generated_tokens = model.generate(**input_ids.to(device), generation_config=generation_config)

result = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
print(result)
#Эйфелева башня - самое высокое здание в Париже, высотой 324 метра.

Для очень краткого резюме в 4 слова указываем задачу 'summary brief 4 words: ' и получаем результат генерации.

prefix = 'summary brief 4 words: '
src_text = prefix + text
input_ids = tokenizer(src_text, return_tensors="pt")

generated_tokens = model.generate(**input_ids.to(device), generation_config=generation_config)

result = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
print(result)
#Эйфелева башня - самая высокая.

Для очень краткого резюме в 4 слова на английском указываем задачу 'summary to en brief 4 words: ' и получаем результат генерации.

prefix = 'summary to en brief 4 words: '
src_text = prefix + text
input_ids = tokenizer(src_text, return_tensors="pt")

generated_tokens = model.generate(**input_ids.to(device), generation_config=generation_config)

result = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
print(result)
#Eiffel Tower: Tallest Paris Building.

В данном случае мы видим, что модель не полностью справилась с заданием, она максимально кратко сгенерировала текст, чтобы выполнить поставленную ей задачу.

Другие примеры использования вы можете посмотреть в карточке к модели.

Вместо заключения

Думаю, сложно предусмотреть все возможные сценарии, в которых могут помочь данные модели в различных проектах.

Предлагаю протестировать эти модели суммаризации в ваших проектах.

Если у вас есть предложения по улучшению моделей, буду рад вашим идеям и обратной связи. Возможно, в будущих реализациях я смогу расширить функционал этих или последующих версий.

Комментарии (7)


  1. CBET_TbMbI
    04.02.2025 00:05

    Предлагаю протестировать эти модели суммаризации в ваших проектах.

    Если у вас есть предложения по улучшению моделей, буду рад вашим идеям и обратной связи.

    Тут бы ещё инструкцию приложить, где и как тестировать. Или это простым смертным юзерам недоступно?


    1. zartdinov
      04.02.2025 00:05

      Думаю, самое простое это в google colab скопировать код из статьи или из описания модели https://huggingface.co/utrobinmv/t5_summary_en_ru_zh_large_2048


  1. zartdinov
    04.02.2025 00:05

    Спасибо за модель. Извиняюсь, несколько вопросов:
    1) Правильно ли я понимаю, что некоторые метрики (слышал про rogue, например) чисто математические и при высоких значениях результаты получаются не очень для человека?
    2) Как справляются с такой задачей размышляющие LLM'ки? Можно ли их использовать, например, для подготовки датасетов?
    3) Можно ли brief использовать для заголовков? Просто видел, что тот же IlyaGusev вроде делал отдельные модели для этой задачи. Предполагаю, что будет маловато чего-то цепляющего.


    1. UtrobinMV Автор
      04.02.2025 00:05

      1. Сравнение моделей выполнено по большому количеству метрик, так как каждая из них оценивает различные критерии.
        Традиционные метрики, такие как BLEU, ROUGE и chrF, оценивают совпадения на уровне слов, n-грамм или подслов, но не всегда гарантируют, что результат будет полезным или понятным для человека. Более информативными в данном случае являются нейросетевые метрики, такие как COMET и BERTScore, которые учитывают именно семантическое сходство.
        Для финальной проверки качества всегда стоит привлекать человеческую оценку, чтобы убедиться, что модель действительно решает поставленную задачу. Также можно использовать большие языковые модели (LLM), такие как DeepSeek V3 или ChatGPT-4, для автоматизированной оценки.
        Однако не стоит полностью исключать традиционные метрики, так как их достаточно легко и быстро вычислить, и в целом они на начальном этапе коррелируют с нейросетевыми метриками.

      2. Большие языковые модели (LLM) действительно показывают отличные результаты в задаче суммаризации, особенно модели с 30 миллиардами параметров и более. Многие датасеты на Hugging Face уже создаются с использованием таких моделей, включая ChatGPT-4. С выходом DeepSeek V3 можно ожидать появления еще большего количества подобных датасетов.

      3. brief можно использовать для генерации заголовков, конечно. Возможно, даже base версия модели будет здесь более эффективной, так как она лучше справляется с краткими текстами. У Ильи Гусева, очень хорошая модель, которую я сам изначально использовал для суммаризации и она была лучшая для русского языка. Плюсы модели суммаризации Ильи, в том, что они учились именно на домене новостного сайта. И если ваша задача формировать заголовки новостей, то здесь возможно модель Ильи справится даже лучше.
        Я же старался сделать модель для более широкого круга использования, не ограничивающегося только новостными сайтами. Таких моделей общего использования не хватает в открытом доступе.


      1. zartdinov
        04.02.2025 00:05

        Спасибо за развернутые ответы


  1. ENick
    04.02.2025 00:05

    Спасибо за модели.

    "Модель large обучалась 2 эпохи, почти месяц" если обучать ещё пару эпох, метрики будут лучше?


    1. UtrobinMV Автор
      04.02.2025 00:05

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