Spaces:
Sleeping
Sleeping
""" | |
BLEU Constraints | |
-------------------------- | |
""" | |
import nltk | |
from textattack.constraints import Constraint | |
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 | |
def extra_repr_keys(self): | |
return ["max_bleu_score"] + super().extra_repr_keys() | |