Skip to content

Metrics

Word error rate is Levenshtein (via jiwer).

| is turned into a space before scoring, so wav2vec2-style "THE|CAT" matches "THE CAT".

mean_wer, counts = attacker.wer(["THE CAT SAT"], [adv])
# counts[i] == (substitutions, insertions, deletions)

Lower-level helpers:

from asr_attacks.metrics import word_error_rate, alignment_counts, attack_succeeded

word_error_rate("the cat", "the bat")  # 0.5
alignment_counts("the cat", "the bat")  # (1, 0, 0)
attack_succeeded("THE CAT", "THE CAT", targeted=True)  # True

Early stopping uses attack_succeeded: targeted success is WER 0; untargeted success is any transcript change.

ASRAttacks.wer_compute always returns WER. Its targeted argument is unused.