unscramble.py 2.91 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

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

    def doc_to_target(self, doc):
        return doc["completion"]

    def construct_requests(self, doc, ctx):
        completion = rf.greedy_until(ctx, ["\n"])
        return completion

    def process_results(self, doc, results):
        pred = results[0]
        gold = doc["completion"]
        return {
            "acc": int(pred == gold)
        }

    def aggregation(self):
        return {
            "acc": mean
        }

    def higher_is_better(self):
        return {
            "acc": True
        }


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"