MCPcopy Create free account
hub / github.com/THUDM/AgentTuning / eval_subject

Function eval_subject

eval_general/eval_mmlu_hf.py:88–153  ·  view source on GitHub ↗
(
        model,
        tokenizer,
        subject_name,
        test_df,
        k=5,
        dev_df=None,
        few_shot=False,
        save_result_dir=None,
        **kwargs
)

Source from the content-addressed store, hash-verified

86
87@torch.no_grad()
88def eval_subject(
89 model,
90 tokenizer,
91 subject_name,
92 test_df,
93 k=5,
94 dev_df=None,
95 few_shot=False,
96 save_result_dir=None,
97 **kwargs
98):
99 result = []
100 score = []
101
102 cov = generate_few_shot_prompt(
103 k, subject_name, dev_df) if few_shot else []
104 all_probs = {'prob_A': [], 'prob_B': [], 'prob_C': [], 'prob_D': []}
105
106 for _, row in tqdm(test_df.iterrows(), total=len(test_df)):
107 question = format_example(row, include_answer=False)
108 cov.append_message(cov.roles[0], question.split("Answer:")[0].rstrip())
109 cov.append_message(cov.roles[1], None)
110 full_prompt = cov.get_prompt() + " Answer: "
111 cov = generate_few_shot_prompt(
112 k, subject_name, dev_df) if few_shot else []
113
114 output, input_info = get_logits(tokenizer, model, [full_prompt])
115 assert output.shape[0] == 1
116 logits = output.flatten()
117
118 softval = torch.nn.functional.softmax(
119 torch.tensor(
120 [
121 logits[tokenizer(" A")['input_ids'][-1]],
122 logits[tokenizer(" B")['input_ids'][-1]],
123 logits[tokenizer(" C")['input_ids'][-1]],
124 logits[tokenizer(" D")['input_ids'][-1]],
125 ]
126 ),
127 dim=0,
128 )
129 if softval.dtype in {torch.bfloat16, torch.float16}:
130 softval = softval.to(dtype=torch.float32)
131 probs = softval.detach().cpu().numpy()
132
133 for i, choice in enumerate(choices):
134 all_probs[f'prob_{choice}'].append(probs[i])
135 pred = {0: "A", 1: "B", 2: "C", 3: "D"}[np.argmax(probs)]
136
137 if 'answer' in row:
138 correct = 1 if pred == row['answer'] else 0
139 score.append(correct)
140 if args.debug:
141 print(f'{question} pred: {pred} ref: {row["answer"]}')
142 result.append(pred)
143
144 if save_result_dir:
145 test_df['model_output'] = result

Callers 1

mainFunction · 0.85

Calls 5

generate_few_shot_promptFunction · 0.85
format_exampleFunction · 0.85
get_logitsFunction · 0.85
get_promptMethod · 0.80
joinMethod · 0.80

Tested by

no test coverage detected