Add TER (as implemented in sacrebleu)
{'login': 'BramVanroy', 'id': 2779410, 'node_id': 'MDQ6VXNlcjI3Nzk0MTA=', 'avatar_url': 'https://avatars.githubusercontent.com/u/2779410?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/BramVanroy', 'html_url': 'https://github.com/BramVanroy', 'followers_url': 'https://api.github.com/users/BramVanroy/followers', 'following_url': 'https://api.github.com/users/BramVanroy/following{/other_user}', 'gists_url': 'https://api.github.com/users/BramVanroy/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/BramVanroy/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/BramVanroy/subscriptions', 'organizations_url': 'https://api.github.com/users/BramVanroy/orgs', 'repos_url': 'https://api.github.com/users/BramVanroy/repos', 'events_url': 'https://api.github.com/users/BramVanroy/events{/privacy}', 'received_events_url': 'https://api.github.com/users/BramVanroy/received_events', 'type': 'User', 'site_admin': False}
[]
[]
['The problem appears to stem from the omission of the lines that you mentioned. If you add them back and try examples from [this](https://huggingface.co/docs/datasets/using_metrics.html) tutorial (sacrebleu metric example) the code you implemented works fine.\r\n\r\nI think the purpose of these lines is follows:\r\n\r\n1. Sacrebleu metrics confusingly expect a nested list of strings when you have just one reference for each hypothesis (i.e. `[["example1", "example2", "example3]]`), while for cases with more than one reference a _nested list of lists of strings_ (i.e. `[["ref1a", "ref1b"], ["ref2a", "ref2b"], ["ref3a", "ref3b"]]`) is expected instead. So `transformed_references` line outputs the required single reference format for sacrebleu\'s ter implementation which you can\'t pass directly to `compute`.\r\n2. I\'m assuming that an additional check is also related to that confusing format with one/many references, because it\'s really difficult to tell what exactly you\'re doing wrong if you\'re not aware of that issue.']
{'url': 'https://api.github.com/repos/huggingface/datasets/pulls/3153', 'html_url': 'https://github.com/huggingface/datasets/pull/3153', 'diff_url': 'https://github.com/huggingface/datasets/pull/3153.diff', 'patch_url': 'https://github.com/huggingface/datasets/pull/3153.patch', 'merged_at': datetime.datetime(2021, 11, 2, 11, 4, 11)}
Implements TER (Translation Edit Rate) as per its implementation in sacrebleu. Sacrebleu for BLEU scores is already implemented in `datasets` so I thought this would be a nice addition.

I started from the sacrebleu implementation, as the two metrics have a lot in common.

Verified with sacrebleu's [testing suite](https://github.com/mjpost/sacrebleu/blob/078c440168c6adc89ba75fe6d63f0d922d42bcfe/test/test_ter.py) that this indeed works as intended.

```python
import datasets


test_cases = [
    (['aaaa bbbb cccc dddd'], ['aaaa bbbb cccc dddd'], 0),  # perfect match
    (['dddd eeee ffff'], ['aaaa bbbb cccc'], 1),  # no overlap
    ([''], ['a'], 1),  # corner case, empty hypothesis
    (['d e f g h a b c'], ['a b c d e f g h'], 1 / 8),  # a single shift fixes MT
    (
        [
            'wählen Sie " Bild neu berechnen , " um beim Ändern der Bildgröße Pixel hinzuzufügen oder zu entfernen , damit das Bild ungefähr dieselbe Größe aufweist wie die andere Größe .',
            'wenn Sie alle Aufgaben im aktuellen Dokument aktualisieren möchten , wählen Sie im Menü des Aufgabenbedienfelds die Option " Alle Aufgaben aktualisieren . "',
            'klicken Sie auf der Registerkarte " Optionen " auf die Schaltfläche " Benutzerdefiniert " und geben Sie Werte für " Fehlerkorrektur-Level " und " Y / X-Verhältnis " ein .',
            'Sie können beispielsweise ein Dokument erstellen , das ein Auto über die Bühne enthält .',
            'wählen Sie im Dialogfeld " Neu aus Vorlage " eine Vorlage aus und klicken Sie auf " Neu . "',
        ],
        [
            'wählen Sie " Bild neu berechnen , " um beim Ändern der Bildgröße Pixel hinzuzufügen oder zu entfernen , damit die Darstellung des Bildes in einer anderen Größe beibehalten wird .',
            'wenn Sie alle Aufgaben im aktuellen Dokument aktualisieren möchten , wählen Sie im Menü des Aufgabenbedienfelds die Option " Alle Aufgaben aktualisieren . "',
            'klicken Sie auf der Registerkarte " Optionen " auf die Schaltfläche " Benutzerdefiniert " und geben Sie für " Fehlerkorrektur-Level " und " Y / X-Verhältnis " niedrigere Werte ein .',
            'Sie können beispielsweise ein Dokument erstellen , das ein Auto enthalt , das sich über die Bühne bewegt .',
            'wählen Sie im Dialogfeld " Neu aus Vorlage " eine Vorlage aus und klicken Sie auf " Neu . "',
        ],
        0.136  # realistic example from WMT dev data (2019)
    ),
]

ter = datasets.load_metric(r"path\to\datasets\metrics\ter")

predictions = ["hello there general kenobi", "foo bar foobar"]
references = [["hello there general kenobi", "hello there !"], ["foo bar foobar", "foo bar foobar"]]
print(ter.compute(predictions=predictions, references=references))

for hyp, ref, score in test_cases:
    # Note the reference transformation which is different from scarebleu's input format
    results = ter.compute(predictions=hyp, references=[[r] for r in ref])
    assert 100*score == results["score"], f"expected {100*score}, got {results['score']}"
```


{'url': 'https://api.github.com/repos/huggingface/datasets/issues/3153/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}