Skip to content
This repository has been archived by the owner on Jun 25, 2024. It is now read-only.

Latest commit

 

History

History
96 lines (57 loc) · 6.61 KB

README.md

File metadata and controls

96 lines (57 loc) · 6.61 KB

Refresh: Ranking Sentences for Extractive Summarization with Reinforcement Learning

This repository releases our code for the Refresh model. It is improved from our code for Sidenet. It uses Tensorflow 0.10, please use scripts provided by Tensorflow to translate them to newer upgrades.

Please contact me at [email protected] for any question.

Please cite this paper if you use our code or data:

Ranking Sentences for Extractive Summarization with Reinforcement Learning, Shashi Narayan, Shay B. Cohen and Mirella Lapata, NAACL 2018.

Single document summarization is the task of producing a shorter version of a document while preserving its principal information content. In this paper we conceptualize extractive summarization as a sentence ranking task and propose a novel training algorithm which globally optimizes the ROUGE evaluation metric through a reinforcement learning objective. We use our algorithm to train a neural summarization model on the CNN and DailyMail datasets and demonstrate experimentally that it outperforms state-of-the-art extractive and abstractive systems when evaluated automatically and by humans.

Trivago USP Evaluation

This extractive model was used as part of comparing this model's performance against the one used as part of the USP summarisation project. To run this model on corpora that is outside of the news-wire domain several additional data preperation utilities were written. These are the following:

  • combine_multi_oracle_files.py -- Combines several moracle files together generated by the estimate_multi_oracles.py script
  • corpora_splitter.py -- Splits corpora into seperate files at a per-sentence level.
  • preprocessed_data_preparer(-docker/-gpu).py -- Computes the single oracle scores for a given set of corpora by calculating the cosine distance between source and target. CPU, Docker, and GPU based implementations available.
  • vocab_mapper.py -- Converts words and/or punctuation into word IDs or vice-versa.

These can be found in the scrpits\trivago-utils directory.

The Refresh model requires Python 2.x and particular older version of Tensorflow. The requirements-2.7.txt file contains the required dependencies. The trivago utilities are all based on Python 3.6 and the requirements can be found in the requirements-3.6.txt file.

CNN and Dailymail Data

In addition to our code, please find links to additional files which are not uploaded here.

Preprocessed Data and Word Embedding File

Best Pretrained Models

We train for a certain number of epochs and then we estimate ROUGE score on the validation set after each epoch. The chosen models are the best ones performing on the validation set.

Human Evaluation Data

We have selected 20 (10 CNN and 10 DailyMail) articles. Please see our paper for the experiment setup.

Training and Evaluation Instructions

Please download data using the above links and then either update my_flags.py for the following parameters or pass them as in-line arguments:

pretrained_wordembedding: /address/data/1-billion-word-language-modeling-benchmark-r13output.word2vec.vec (Pretrained wordembedding file trained on the one million benchmark data)
preprocessed_data_directory: /address/data/preprocessed-input-directory (Preprocessed news articles)
gold_summary_directory: /address/data/Baseline-Gold-Models (Gold summary directory)
doc_sentence_directory: /address/data/CNN-DM-Filtered-TokenizedSegmented (Directory where document sentences are kept)

CNN

mkdir -p /address/to/training/directory/cnn-reinforcementlearn-singlesample-from-moracle-noatt-sample5

# Training
python document_summarizer_training_testing.py --use_gpu /gpu:2 --data_mode cnn --train_dir /address/to/training/directory/cnn-reinforcementlearn-singlesample-from-moracle-noatt-sample5 --num_sample_rollout 5 > /address/to/training/directory/cnn-reinforcementlearn-singlesample-from-moracle-noatt-sample5/train.log

# Evaluation
python document_summarizer_training_testing.py --use_gpu /gpu:2 --data_mode cnn --exp_mode test --model_to_load 11 --train_dir /address/to/training/directory/cnn-reinforcementlearn-singlesample-from-moracle-noatt-sample5 --num_sample_rollout 5 > /address/to/training/directory/cnn-reinforcementlearn-singlesample-from-moracle-noatt-sample5/test.model11.log

DailyMail

mkdir -p /address/to/training/directory/dailymail-reinforcementlearn-singlesample-from-moracle-noatt-sample15

# Training
python document_summarizer_training_testing.py --use_gpu /gpu:2 --data_mode dailymail --train_dir /address/to/training/directory/dailymail-reinforcementlearn-singlesample-from-moracle-noatt-sample15 --num_sample_rollout 15 > /address/to/training/directory/dailymail-reinforcementlearn-singlesample-from-moracle-noatt-sample15/train.log

# Evaluation
python document_summarizer_training_testing.py --use_gpu /gpu:2 --data_mode dailymail --exp_mode test --model_to_load 7 --train_dir /address/to/training/directory/dailymail-reinforcementlearn-singlesample-from-moracle-noatt-sample15 --num_sample_rollout 15 > /address/to/training/directory/dailymail-reinforcementlearn-singlesample-from-moracle-noatt-sample15/test.model7.log

Oracle Estimation

Check our "scripts/oracle-estimator" to compute multiple oracles for your own dataset for training.

Blog post and Live Demo

You could find a live demo of Refresh here.

See here for a light introduction of our paper written by nurture.ai.