unscramble.py 2.99 KB
Newer Older
1
2
3
4
5
6
7
8
9
"""
Language Models are Few-Shot Learners
https://arxiv.org/pdf/2005.14165.pdf

Unscramble is a small battery of 5 “character manipulation” tasks. Each task
involves giving the model a word distorted by some combination of scrambling,
addition, or deletion of characters, and asking it to recover the original word.

Homepage: https://github.com/openai/gpt-3/tree/master/data
10
"""
Jonathan Tow's avatar
Jonathan Tow committed
11
12
import inspect
import lm_eval.datasets.unscramble.unscramble
13
14
from lm_eval.base import Task, rf
from lm_eval.metrics import mean
15

16
17

_CITATION = """
18
19
20
21
22
23
24
25
26
27
28
29
@inproceedings{NEURIPS2020_1457c0d6,
    author = {Brown, Tom and Mann, Benjamin and Ryder, Nick and Subbiah, Melanie and Kaplan, Jared D and Dhariwal, Prafulla and Neelakantan, Arvind and Shyam, Pranav and Sastry, Girish and Askell, Amanda and Agarwal, Sandhini and Herbert-Voss, Ariel and Krueger, Gretchen and Henighan, Tom and Child, Rewon and Ramesh, Aditya and Ziegler, Daniel and Wu, Jeffrey and Winter, Clemens and Hesse, Chris and Chen, Mark and Sigler, Eric and Litwin, Mateusz and Gray, Scott and Chess, Benjamin and Clark, Jack and Berner, Christopher and McCandlish, Sam and Radford, Alec and Sutskever, Ilya and Amodei, Dario},
    booktitle = {Advances in Neural Information Processing Systems},
    editor = {H. Larochelle and M. Ranzato and R. Hadsell and M. F. Balcan and H. Lin},
    pages = {1877--1901},
    publisher = {Curran Associates, Inc.},
    title = {Language Models are Few-Shot Learners},
    url = {https://proceedings.neurips.cc/paper/2020/file/1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf},
    volume = {33},
    year = {2020}
}
"""
Jon Tow's avatar
Jon Tow committed
30
31


32
class WordUnscrambleTask(Task):
Leo Gao's avatar
Leo Gao committed
33
    VERSION = 0
Jonathan Tow's avatar
Jonathan Tow committed
34
35
    DATASET_PATH = inspect.getfile(lm_eval.datasets.unscramble.unscramble)
    DATASET_NAME = None
Jon Tow's avatar
Jon Tow committed
36
37
38
39
40
41
42
43
44
45
46

    def has_training_docs(self):
        return False

    def has_validation_docs(self):
        return True

    def has_test_docs(self):
        return False

    def validation_docs(self):
Jonathan Tow's avatar
Jonathan Tow committed
47
        return self.dataset["validation"]
Jon Tow's avatar
Jon Tow committed
48
49
50
51

    def doc_to_text(self, doc):
        return doc["context"]

bzantium's avatar
bzantium committed
52
53
54
55
56
57
    def should_decontaminate(self):
        return True

    def doc_to_decontamination_query(self, doc):
        return doc["context"]

Jon Tow's avatar
Jon Tow committed
58
59
60
61
    def doc_to_target(self, doc):
        return doc["completion"]

    def construct_requests(self, doc, ctx):
bzantium's avatar
bzantium committed
62
        completion = rf.greedy_until(ctx, {"until": ["\n"]})
Jon Tow's avatar
Jon Tow committed
63
64
65
66
67
        return completion

    def process_results(self, doc, results):
        pred = results[0]
        gold = doc["completion"]
bzantium's avatar
bzantium committed
68
        return {"acc": int(pred == gold)}
Jon Tow's avatar
Jon Tow committed
69
70

    def aggregation(self):
bzantium's avatar
bzantium committed
71
        return {"acc": mean}
Jon Tow's avatar
Jon Tow committed
72
73

    def higher_is_better(self):
bzantium's avatar
bzantium committed
74
        return {"acc": True}
Jon Tow's avatar
Jon Tow committed
75
76


77
class Anagrams1(WordUnscrambleTask):
Jonathan Tow's avatar
Jonathan Tow committed
78
    DATASET_NAME = "mid_word_1_anagrams"
Jon Tow's avatar
Jon Tow committed
79
80


81
class Anagrams2(WordUnscrambleTask):
Jonathan Tow's avatar
Jonathan Tow committed
82
    DATASET_NAME = "mid_word_2_anagrams"
83
84
85


class CycleLetters(WordUnscrambleTask):
Jonathan Tow's avatar
Jonathan Tow committed
86
    DATASET_NAME = "cycle_letters_in_word"
87
88
89


class RandomInsertion(WordUnscrambleTask):
Jonathan Tow's avatar
Jonathan Tow committed
90
    DATASET_NAME = "random_insertion_in_word"
91
92
93


class ReversedWords(WordUnscrambleTask):
Jonathan Tow's avatar
Jonathan Tow committed
94
    DATASET_NAME = "reversed_words"