in rbr_weight_fitter.py [0:0]
def get_orderings(self):
def apply_ordering(i1, i2):
ex1, ex2 = self.examples[i1], self.examples[i2]
if not ex1.convo_prompt == ex2.convo_prompt:
return None
if ex2.completion_label in self.orderings[ex1.completion_label]:
margin = self.completion_label_margin.get(ex1.completion_label, 1)
return [i1, i2, margin]
elif ex1.completion_label in self.orderings[ex2.completion_label]:
margin = self.completion_label_margin.get(ex2.completion_label, 1)
return [i2, i1, margin]
return None
pairs = list(combinations(range(len(self.examples)), 2))
pairs = [apply_ordering(i1, i2) for i1, i2 in pairs]
pairs = [p for p in pairs if p is not None]
np.random.default_rng().shuffle(pairs)
pairs = torch.tensor(pairs, dtype=torch.int64)
return pairs