lievan commited on
Commit
4b231ae
1 Parent(s): bd9182e

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +78 -0
README.md CHANGED
@@ -24,3 +24,81 @@ Specifically, we train two versions of reward models, where UltraRM-UF is merely
24
  On four public preference test sets, our UltraRM achieves SOTA over other open-source reward models.
25
 
26
  ## Usage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  On four public preference test sets, our UltraRM achieves SOTA over other open-source reward models.
25
 
26
  ## Usage
27
+ ```python
28
+ from transformers import PreTrainedModel, LlamaConfig, LlamaModel, LlamaTokenizer
29
+ import torch.nn as nn
30
+ import torch
31
+ from typing import Optional, List
32
+
33
+ class LlamaRewardModel(PreTrainedModel):
34
+ config_class = LlamaConfig
35
+ def __init__(self, config):
36
+ super().__init__(config)
37
+ self.model = LlamaModel(config)
38
+ self.regression_head = nn.Linear(self.config.hidden_size, 1, bias=False)
39
+
40
+ def forward( # args are the same as LlamaForCausalLM
41
+ self,
42
+ input_ids: torch.LongTensor = None,
43
+ attention_mask: Optional[torch.Tensor] = None,
44
+ position_ids: Optional[torch.LongTensor] = None,
45
+ past_key_values: Optional[List[torch.FloatTensor]] = None,
46
+ inputs_embeds: Optional[torch.FloatTensor] = None,
47
+ labels: Optional[torch.LongTensor] = None,
48
+ use_cache: Optional[bool] = None,
49
+ output_attentions: Optional[bool] = None,
50
+ output_hidden_states: Optional[bool] = None,
51
+ return_dict: Optional[bool] = None,
52
+ ):
53
+
54
+ transformer_outputs = self.model(
55
+ input_ids,
56
+ attention_mask=attention_mask,
57
+ position_ids=position_ids,
58
+ past_key_values=past_key_values,
59
+ inputs_embeds=inputs_embeds,
60
+ )
61
+
62
+ hidden_states = transformer_outputs[0]
63
+ rewards = self.regression_head(hidden_states).squeeze(-1)
64
+
65
+ ends = attention_mask.cumsum(dim=1).argmax(dim=1).view(-1,1)
66
+ rewards = torch.gather(rewards, 1, ends)
67
+
68
+ return rewards
69
+
70
+ ultrarm_template = """Human: {instruction}
71
+
72
+ Assistant: {completion}"""
73
+
74
+ dataset = [ # cases in webgpt
75
+ {"chosen":"Human: \"Who orders martinis \"\"shaken, not stirred\"\"?\"\nAssistant: Sean Connery's character, fictional British Secret Service agent James Bond, in the movie Goldfinger, stated that he preferred his martini to be \"shaken, not stirred\". [1] Some believe that Bond ordered his martini shaken because of the vodka it contained, as vodka was, for the most part, refined from potatoes (cheaper brands) which made the vodka oily. To disperse the oil, Bond ordered his martinis shaken. [2]","rejected":"Human: \"Who orders martinis \"\"shaken, not stirred\"\"?\"\nAssistant: Fleming's fictional British Secret Service agent James Bond orders his martini cocktail shaken, not stirred [1]. Bond's preferences for his martini are carried over to the films, where his orders are seen in both the 1961 film Dr. No and the 2006 film Casino Royale [1, 2]. In both films, Bond's subordinates copy his order, telling the bartender to keep the fruit with their drinks [2]. However, in the 2006 film, Bond appears irritated when the bartender asks if he would like his drink shaken or stirred [2]."},
76
+ {"chosen":"Human: Sural relates to which part of the body?\nAssistant: The sural region is the muscular swelling of the back of the leg below the knee, formed chiefly by the bellies of the gastrocnemius and soleus muscles [1,2].","rejected":"Human: Sural relates to which part of the body?\nAssistant: The Sural nerve runs down the side of the leg near the small saphenous vein, then passes forward below the lateral malleolus and continues on the outside of the foot as the lateral dorsal cutaneous nerve, which then communicates with the intermediate dorsal cutaneous nerve, which branches off to the side of the foot. [1]"}
77
+ ]
78
+
79
+
80
+ tokenizer = LlamaTokenizer.from_pretrained("/data/UltraRM-13b")
81
+ model = LlamaRewardModel.from_pretrained("/data/UltraRM-13b")
82
+
83
+ for example in dataset:
84
+ inputs = tokenizer(example["chosen"], return_tensors="pt")
85
+ chosen_reward = model(**inputs).item()
86
+ inputs = tokenizer(example["rejected"], return_tensors="pt")
87
+ rejected_reward = model(**inputs).item()
88
+ print(chosen_reward - rejected_reward)
89
+
90
+ # Output 1: 2.4158712085336447
91
+ # Output 2: 0.1896953582763672
92
+ ```
93
+
94
+ ## Citation
95
+ ```
96
+ @misc{cui2023ultrafeedback,
97
+ title={UltraFeedback: Boosting Language Models with High-quality Feedback},
98
+ author={Ganqu Cui and Lifan Yuan and Ning Ding and Guanming Yao and Wei Zhu and Yuan Ni and Guotong Xie and Zhiyuan Liu and Maosong Sun},
99
+ year={2023},
100
+ eprint={2310.01377},
101
+ archivePrefix={arXiv},
102
+ primaryClass={cs.CL}
103
+ }
104
+ ```