Automatic Evaluation Metric described in the papers BaryScore (EMNLP 2021) , DepthScore (Submitted), InfoLM (AAAI 2022).
This repository deals with automatic evaluation of NLG and addresses the special case of reference based evaluation. The goal is to build a metric m: where
is the space of sentences. An example is given below:

We start by giving an overview of the proposed metrics.
DepthScore is a single layer metric based on pretrained contextualized representations. Similar
to BertScore, it embeds both the candidate (C: It is freezing this morning) and the
reference (R: The weather is cold today) using a single layer of Bert to obtain discrete probability
measures
and
. Then, a similarity score is
computed using the pseudo
metric
introduced here.
This statistical measure has been tested on Data2text and Summarization.
BaryScore is a multi-layers metric based on pretrained contextualized
representations. Similar to MoverScore,
it aggregates the layers of Bert before computing a similarity score. By modelling the layer output of deep
contextualized embeddings as a probability distribution rather than by a vector embedding; BaryScore aggregates the
different outputs through the Wasserstein space topology. MoverScore (right) leverages the information available in
other layers by aggregating the layers using a power mean and then use a Wasserstein
distance ().
This statistical measure has been tested on Data2text, Summarization, Image captioning and NMT.
InfoLM is a metric based on a pretrained language model (
PLM) (). Given an input sentence S mask
at position i (
), the PLM outputs a discret
probability distribution (
)
over the vocabulary (
). The second key
ingredient of InfoLM is a measure of
information (
)
that computes a measure of similarity between the aggregated distributions. Formally, InfoLM involes 3 steps:
- 1. Compute individual distributions
using
for the candidate C and the reference R.
- 2. Aggregate individual distributions using a weighted sum.
- 3. Compute similarity using
.
InfoLM is flexible as it can adapte to different criteria using different measures of information. This metric has been tested on Data2text and Summarization.
If you find this repo useful, please cite our papers:
@article{infolm_aaai2022,
title={InfoLM: A New Metric to Evaluate Summarization \& Data2Text Generation},
author={Colombo, Pierre and Clavel, Chloe and Piantanida, Pablo},
journal={arXiv preprint arXiv:2112.01589},
year={2021}
}
@inproceedings{colombo-etal-2021-automatic,
title = "Automatic Text Evaluation through the Lens of {W}asserstein Barycenters",
author = "Colombo, Pierre and Staerman, Guillaume and Clavel, Chlo{\'e} and Piantanida, Pablo",
booktitle = "Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing",
year = "2021",
pages = "10450--10466"
}
@article{depth_score,
title={A pseudo-metric between probability distributions based on depth-trimmed regions},
author={Staerman, Guillaume and Mozharovskyi, Pavlo and Colombo, Pierre and Cl{\'e}men{\c{c}}on, St{\'e}phan and d'Alch{\'e}-Buc, Florence},
journal={arXiv preprint arXiv:2103.12711},
year={2021}
}
Running our metrics can be computationally intensive (because it relies on pretrained models). Therefore, a GPU is usually necessary. If you don't have access to a GPU, you can use light pretrained representations such as TinyBERT, DistilBERT.
We provide example inputs under <metric_name>.py
. For example for BaryScore
metric_call = BaryScoreMetric()
ref = [
'I like my cakes very much',
'I hate these cakes!']
hypothesis = ['I like my cakes very much',
'I like my cakes very much']
metric_call.prepare_idfs(ref, hypothesis)
final_preds = metric_call.evaluate_batch(ref, hypothesis)
print(final_preds)
We provide a command line interface (CLI) of BERTScore as well as a python module. For the CLI, you can use it as follows:
export metric=infolm
export measure_to_use=fisher_rao
CUDA_VISIBLE_DEVICES=0 python score_cli.py --ref="samples/refs.txt" --cand="samples/hyps.txt" --metric_name=${metric} --measure_to_use=${measure_to_use}
See more options by python score_cli.py -h
.
- Unlike BERT, RoBERTa uses GPT2-style tokenizer which creates addition " " tokens when there are multiple spaces
appearing together. It is recommended to remove addition spaces by
sent = re.sub(r' +', ' ', sent)
orsent = re.sub(r'\s+', ' ', sent)
. - Using inverse document frequency (idf) on the reference sentences to weigh word importance may correlate better with
human judgment. However, when the set of reference sentences become too small, the idf score would become
inaccurate/invalid. To use idf, please set
--idf
when using the CLI tool. - When you are low on GPU memory, consider setting
batch_size
to a low number.
- Because pretrained representations have learned positional embeddings with max length 512, our scores are undefined between sentences longer than 510 (512 after adding [CLS] and [SEP] tokens) . The sentences longer than this will be truncated. Please consider using larger models which can support much longer inputs.
Our research was granted access to the HPC resources of IDRIS under the allocation 2021-AP010611665 as well as under the project 2021-101838 made by GENCI.