From 58489d7d0851f06ae48a33594805e8d302e28281 Mon Sep 17 00:00:00 2001 From: wangpeiyi Date: Wed, 3 Jan 2024 04:52:08 +0000 Subject: [PATCH] Create README.md --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8845fdf --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +Process reward models (mistral-7b) used in [Math-Shepherd](https://arxiv.org/pdf/2312.08935.pdf). + +`Input`: question + step-by-step solutions with a special step tag `ки`, e.g., +``` +Janet\u2019s ducks lay 16 eggs per day. She eats three for breakfast every morning and bakes .... ? Step 1: Janet's ducks lay 16 eggs per day. ки\nStep 2: She eats three for breakfast every morning, so she has 16 - 3 = 13 eggs left. ки\nStep 3: She bakes muffins for her friends every day with four eggs, so she has 13 - 4 = 9 eggs left. ки\nStep 4: She sells the remainder at the farmers' market daily for $2 per fresh duck egg, so she makes 9 * $2 = $18 every day at the farmers' market. The answer is: 18 ки +``` +`Output`: the logits. You need to post-process it to achieve the score of each step. + + +```python +from transformers import AutoTokenizer +from transformers import AutoModelForCausalLM +import torch + +good_token = '+' +bad_token = '-' +step_tag = 'ки' + +tokenizer = AutoTokenizer.from_pretrained('peiyi9979/math-shepherd-mistral-7b-prm') +candidate_tokens = tokenizer.encode(f"{good_token} {bad_token}")[1:] # [648, 387] +step_tag_id = tokenizer.encode(f"{step_tag}")[-1] # 12902 +model = AutoModelForCausalLM.from_pretrained('peiyi9979/math-shepherd-mistral-7b-prm').eval() + +question = """Janet\u2019s ducks lay 16 eggs per day. She eats three for breakfast every morning and bakes muffins for her friends every day with four. She sells the remainder at the farmers' market daily for $2 per fresh duck egg. How much in dollars does she make every day at the farmers' market?""" +output1 = """Step 1: Janet's ducks lay 16 eggs per day. ки\nStep 2: She eats three for breakfast every morning, so she has 16 - 3 = 13 eggs left. ки\nStep 3: She bakes muffins for her friends every day with four eggs, so she has 13 - 4 = 9 eggs left. ки\nStep 4: She sells the remainder at the farmers' market daily for $2 per fresh duck egg, so she makes 9 * $2 = $18 every day at the farmers' market. The answer is: 18 ки""" # 18 is right +output2 = """Step 1: Janet's ducks lay 16 eggs per day. ки\nStep 2: She eats three for breakfast every morning, so she has 16 - 3 = 13 eggs left. ки\nStep 3: She bakes muffins for her friends every day with four eggs, so she has 13 - 4 = 9 eggs left. ки\nStep 4: She sells the remainder at the farmers' market daily for $2 per fresh duck egg, so she makes 9 * $2 = $17 every day at the farmers' market. The answer is: 17 ки""" # 17 is wrong + +for output in [output1, output2]: + input_for_prm = f"{question} {output}" + input_id = torch.tensor([tokenizer.encode(input_for_prm)]) + + with torch.no_grad(): + logits = model(input_id).logits[:,:,candidate_tokens] + scores = logits.softmax(dim=-1)[:,:,0] + step_scores = scores[input_id == step_tag_id] + print(step_scores) + +# tensor([0.9955, 0.9958, 0.9983, 0.9957]) +# tensor([0.9955, 0.9958, 0.9983, 0.0240]) + +``` \ No newline at end of file