transformer-article-summarizer / evaluate_model.py
Codex Deployment
Deploy transformer article summarizer
dfdc32d
Raw
History Blame Contribute Delete
2.12 kB
"""Evaluate a summarization checkpoint with ROUGE and corpus BLEU."""
import argparse
import json
import evaluate
from datasets import load_dataset
from transformers import pipeline
from train import DATASETS
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("--model", default="sshleifer/distilbart-cnn-12-6")
parser.add_argument("--dataset", choices=DATASETS, default="cnn_dailymail")
parser.add_argument("--split", default="test")
parser.add_argument("--samples", type=int, default=100)
parser.add_argument("--batch-size", type=int, default=4)
parser.add_argument("--output", default="evaluation_results.json")
return parser.parse_args()
def main():
args = parse_args()
config = DATASETS[args.dataset]
data = load_dataset(config["path"], config["name"], split=args.split)
data = data.select(range(min(args.samples, len(data))))
summarizer = pipeline("summarization", model=args.model, device_map="auto")
predictions = []
for start in range(0, len(data), args.batch_size):
texts = data[start : start + args.batch_size][config["text"]]
outputs = summarizer(
texts,
truncation=True,
max_length=128,
min_length=20,
num_beams=4,
)
predictions.extend(item["summary_text"] for item in outputs)
references = list(data[config["summary"]])
rouge = evaluate.load("rouge").compute(
predictions=predictions,
references=references,
use_stemmer=True,
)
bleu = evaluate.load("bleu").compute(
predictions=predictions,
references=[[reference] for reference in references],
)
results = {
**{key: round(value * 100, 4) for key, value in rouge.items()},
"bleu": round(bleu["bleu"] * 100, 4),
"model": args.model,
"dataset": args.dataset,
"samples": len(data),
}
with open(args.output, "w", encoding="utf-8") as file:
json.dump(results, file, indent=2)
print(json.dumps(results, indent=2))
if __name__ == "__main__":
main()