-
Notifications
You must be signed in to change notification settings - Fork 111
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BUG:ceval, cmmlu和mmlu中选项ABCD的概率计算错误 #57
Comments
我们的实现是正确的。孤立的“A”在BPE中指的是非词首的“A”,例如"helloA"里面的A。词首"A",即"_A"才是选项对应。 |
prompt给的例子里,例如“答案:C”里,冒号和C之间没有空格,是直接连着的。从构造prompt的代码中能看到:
example += "\n答案:" + line["answer"] + "\n\n" 这里,“答案:”后面直接接选项。
A对应的编码是29909。如果在冒号和A之间加入空格:
此时,A对应的编码是319,即字符'▁A'对应的编码。 |
他们也许是想直接输出句首A作为答案,而不是答案字符串中的A. |
Skywork/eval/文件夹下的evaluate_ceval.py, evaluate_cmmlu.py和evaluate_mmlu.py文件中,获取选项ABCD的概率的关键代码如下:
以选项A为例:
tokenizer("A")会把“A“认为是一个句子,在”A“前面拼接句子开始标志”_“。因此tokenizer实际上转化的字符为“<s> _A”,得到input_ids=[1, 319]。代码中tokenizer("A")["input_ids"][-1]取得的id是319,对应的字符为“_A”,而真正“A”字符对应的id是:
BCD选项也存在同样的问题。
评估时的一个full_prompt的例子格式如下:
根据full_prompt例子的格式,选项应该填在“答案:”后面,不应该另起一行。
因此选择ABCD选项的id时,应该取“A”“B”“C”"D"字符的概率,而不是“_A”,"_B","_C","_D"字符的概率。
The text was updated successfully, but these errors were encountered: