PEGASUS library
Предварительное обучение с использованием извлечённых предложений для абстрактного обобщения.
Последовательные модели или PEGASUS используют самоконтролируемую цель генерации предложений Gap Sentences (GSG) для обучения модели кодировщика-декодера на основе трансформатора. С текстом можно ознакомиться по ссылке arXiv. Принято ICML 2020.
Если вы используете этот код или эти модели, пожалуйста, укажите следующую статью:
@misc{zhang2019pegasus,
title={PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization},
author={Jingqing Zhang and Yao Zhao and Mohammad Saleh and Peter J. Liu},
year={2019},
eprint={1912.08777},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
PEGASUS-X / Flax Реализация
Обновление (2022/08): Перейдите на pegasus/flax для моделей PEGASUS-X.
Обновление результатов
Мы обучаем модель pegasus с выбранными коэффициентами соотношения предложений промежутков как на C4, так и на HugeNews, а также стохастически выбираем важные предложения. Обновлённые результаты представлены в этой таблице.
| набор данных | C4 | HugeNews | Смешанный и стохастический| | --- | ---22,06/36,99 | 47,21/24,56/39,25 | 47,60/24,83/39,64| | xsum | | | | | cnn_dailymail | 43,90/21,20/40,76 | 44,17/21,47/41,11 | 44,16/21,56/41,30| | newsroom | 45,07/33,39/41,28 | 45,15/33,51/41,33 | 45,98/34,20/42,18| | multi_news | 46,74/17,95/24,26 | 47,52/18,72/24,91 | 47,65/18,75/24,95| | gigaword | 38,75/19,96/36,14 | 39,12/19,86/36,24 | 39,65/20,47/36,76| | wikihow | 43,07/19,70/34,79 | 41,35/18,51/33,42 | 46,39/22,12/38,41 *| | reddit_tifu | 26,54/8,94/21,64 | 26,63/9,01/21,60 | 27,99/9,81/22,94| | big_patent | 53,63/33,16/42,25 | 53,41/32,89/42,07 | 52,29/33,08/41,66 *| | arxiv | 44,70/17,27/25,80 | 44,67/17,18/25,73 | 44,21/16,95/25,67| | pubmed | 45,49/19,90/27,69 | 45,09/19,56/27,42 | 45,97/20,15/28,25| | aeslc | 37,69/21,85/36,84 | 37,40/21,22/36,45 | 37,68/21,25/36,51| | billsum | 57,20/39,56/45,80 | 57,31/40,19/45,82 | 59,67/41,58/47,59|
Модель «Смешанная и стохастическая» имеет следующие изменения: — обучена как на C4, так и на HugeNews (смесь наборов данных взвешена по количеству примеров); — обучена в течение 1,5 млн вместо 500 тыс. (мы наблюдаем более медленное схождение на предварительном обучении перплексии); — модель равномерно выбирает коэффициент соотношения предложений промежутка от 15 % до 45 %; — важные предложения выбираются с помощью 20 % равномерного шума к баллам важности; — токенизатор sentencepiece обновлён, чтобы иметь возможность кодировать символ новой строки.
(*) числа наборов данных wikihow и big_patent не сопоставимы из-за изменений в токенизации и данных: — набор данных wikihow содержит символы новой строки, которые полезны для сегментации абзацев, токенизатор sentencepiece модели C4 и HugeNews не кодирует новую строку и теряет эту информацию; — мы обновляем набор данных BigPatent, чтобы сохранить регистр, некоторые очистки формата также изменены, обратитесь к изменениям в TFDS.
Настройка
Сначала создайте проект и создайте экземпляр.
gcloud compute instances create \
${VM_NAME} \
--zone=${ZONE} \
--machine-type=n1-highmem-8 \
--accelerator type=nvidia-tesla-v100,count=1 \
--boot-disk-size=500GB \
--image-project=ml-images \
--image-family=tf-1-15 \
--maintenance-policy TERMINATE --restart-on-failure
Клонируйте библиотеку на github и установите требования.
git clone https://github.com/google-research/pegasus
cd pegasus
export PYTHONPATH=.
pip3 install -r requirements.txt
Скачайте словарь, предварительно обученные и точно настроенные контрольные точки всех экспериментов из Google Cloud (https://console.cloud.google.com/storage/browser/pegasus_ckpt).
В качестве альтернативы в терминале следуйте инструкциям и установите gsutil (https://cloud.google.com/storage/docs/gsutil_install). Затем
mkdir ckpt
gsutil cp -r gs://pegasus_ckpt/ ckpt/
Точно настройте на существующем наборе данных aeslc.
python3 pegasus/bin/train.py --params=aeslc_transformer **Перевод текста на русский язык:**
--param_overrides=vocab_filename=ckpt/pegasus_ckpt/c4.unigram.newline.10pct.96000.model \
--train_init_checkpoint=ckpt/pegasus_ckt/model.ckpt-1500000 \
--model_dir=ckpt/pegasus_ckpt/aeslc
Если вы хотите провести тонкую настройку на подмножестве набора данных, обратитесь к [примеру входного шаблона](https://github.com/google-research/pegasus/blob/master/pegasus/data/datasets.py#L186).
Оцените на настроенном наборе данных.
python3 pegasus/bin/evaluate.py --params=aeslc_transformer
--param_overrides=vocab_filename=ckpt/pegasus_ckpt/c4.unigram.newline.10pct.96000.model,batch_size=1,beam_size=5,beam_alpha=0.6
--model_dir=ckpt/pegasus_ckpt/aeslc
Обратите внимание, что в приведённом выше примере используется один графический процессор, поэтому размер пакета намного меньше, чем результаты, представленные в статье.
## Добавить новый набор данных для тонкой настройки
Поддерживаются два типа форматов наборов данных: [TensorFlow Datasets (TFDS)](https://www.tensorflow.org/datasets) или TFRecords.
[Этот учебник](https://www.tensorflow.org/datasets/add_dataset) показывает, как добавить новый набор данных в TFDS. (Ожидается, что набор данных для точной настройки будет контролируемым, пожалуйста, предоставьте `supervised_keys` в информации о наборе данных).
Формат Tfrecords требует, чтобы каждая запись была tf-примером `{"inputs":tf.string, "targets":tf.string}`.
Например, если вы зарегистрировали набор данных TFDS под названием `new_tfds_dataset` для обучения и оценки, и у вас есть некоторые файлы в формате tfrecord под названием `new_dataset_files.tfrecord*` для теста, они могут быть зарегистрированы в `/pegasus/params/public_params.py`.
@registry.register("new_params") def my_param(param_overrides): return public_params.transformer_params( { "train_pattern": "tfds:new_tfds_dataset,train", "dev_pattern": "tfds:new_tfds_dataset,validation", "test_pattern": "tfrecord:new_dataset_files.tfrecord*", "max_input_len": 512, "max_output_len": 128, "train_steps": 10000, "learning_rate": 0.0001, "batch_size": 8, }, param_overrides)
## Метрики оценки
Результаты оценки можно найти в `mode_dir`. Для каждой точки оценки автоматически рассчитываются метрики суммирования.
- [ROUGE](https://www.aclweb.org/anthology/W04-1013.pdf) является основной метрикой качества суммирования.
- [BLEU](https://www.aclweb.org/anthology/P02-1040.pdf) — альтернативная метрика качества для генерации языка.
- [Охват и плотность экстракционных фрагментов](https://arxiv.org/pdf/1804.11283.pdf) являются метриками, которые измеряют абстрактность резюме.
- Частота повторения измеряет режимы отказа генерации повторений.
- Статистика длины измеряет распределение длины декодирования по сравнению с золотым резюме.
В `model_dir` можно найти несколько типов выходных файлов:
- text_metrics-*.txt: указанные выше метрики в текстовом формате. Каждая строка содержит название метрики, значение нижней границы 95%, среднее значение, значение верхней границы 95%.
- inputs-*.txt, targets-*.txt, predictions-*.txt: необработанные текстовые файлы входных данных модели/выходов.
# Предварительное обучение
Предварительное обучение (на C4 или любом другом корпусе) требует специально созданного тензорного потока, который включает операции для синтаксического анализа «на лету», который обрабатывает необработанный текстовый документ во входные данные модели и идентификаторы целей. Пожалуйста, обратитесь к pegasus/ops/pretrain_parsing_ops.cc и pegasus/data/parsers.py для получения подробной информации.
# Благодарности
Содержит части кода и дизайна для обучения и оценки моделей суммирования, первоначально созданные Беном Гудричем <bgoodrich@google.com>.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )