Skip to content

BUG:ceval, cmmlu和mmlu中选项ABCD的概率计算错误 #57

@naturesphere

Description

@naturesphere

Skywork/eval/文件夹下的evaluate_ceval.py, evaluate_cmmlu.py和evaluate_mmlu.py文件中,获取选项ABCD的概率的关键代码如下:

    softval = torch.nn.functional.softmax(
        torch.tensor(
            [
                logits[tokenizer("A")["input_ids"][-1]],
                logits[tokenizer("B")["input_ids"][-1]],
                logits[tokenizer("C")["input_ids"][-1]],
                logits[tokenizer("D")["input_ids"][-1]],
            ]
        ),
        dim=0,
    )

以选项A为例:
tokenizer("A")会把“A“认为是一个句子,在”A“前面拼接句子开始标志”_“。因此tokenizer实际上转化的字符为“<s> _A”,得到input_ids=[1, 319]。代码中tokenizer("A")["input_ids"][-1]取得的id是319,对应的字符为“_A”,而真正“A”字符对应的id是:

tokenizer.convert_tokens_to_ids('A')=29909.

BCD选项也存在同样的问题。

评估时的一个full_prompt的例子格式如下:

以下是关于农学的单项选择题,请直接给出正确答案的选项。

题目:肉牛屠宰后,胴体的哪个部位肉质较好
A. 胸
B. 腹
C. 大腿
D. 小腿
答案:C

……

题目:羊胴体中,肉质较好的部位是
A. 胸下肉
B. 肩胛肉
C. 后腿肉
D. 小腿肉
答案:C

以下是关于农学的单项选择题,请直接给出正确答案的选项。

题目:在农业生产中被当作极其重要的劳动对象发挥作用,最主要的不可替代的基本生产资料是
A. 农业生产工具
B. 土地
C. 劳动力
D. 资金
答案:

根据full_prompt例子的格式,选项应该填在“答案:”后面,不应该另起一行。
因此选择ABCD选项的id时,应该取“A”“B”“C”"D"字符的概率,而不是“_A”,"_B","_C","_D"字符的概率。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions