Source code for textattack.constraints.overlap.bleu_score

"""

BLEU Constraints
--------------------------


"""

import nltk

from textattack.constraints import Constraint


[docs]class BLEU(Constraint): """A constraint on BLEU score difference. Args: max_bleu_score (int): Maximum BLEU score allowed. compare_against_original (bool): If `True`, compare new `x_adv` against the original `x`. Otherwise, compare it against the previous `x_adv`. """ def __init__(self, max_bleu_score, compare_against_original=True): super().__init__(compare_against_original) if not isinstance(max_bleu_score, int): raise TypeError("max_bleu_score must be an int") self.max_bleu_score = max_bleu_score def _check_constraint(self, transformed_text, reference_text): ref = reference_text.words hyp = transformed_text.words bleu_score = nltk.translate.bleu_score.sentence_bleu([ref], hyp) return bleu_score <= self.max_bleu_score
[docs] def extra_repr_keys(self): return ["max_bleu_score"] + super().extra_repr_keys()