in lm_human_preferences/train_policy.py [0:0]
def make_score_fn(hparams, score_model):
padding_token = score_model.padding_token
postprocess_fn = lm_tasks.postprocess_fn_from_hparams(hparams, padding_token)
#decorate requires a named function, postprocess_fn can be anonymous
@utils.graph_function(responses=Schema(tf.int32, (None, None)))
def postprocess(responses):
return postprocess_fn(responses)
filter_fn = lm_tasks.filter_fn_from_hparams(hparams)
@utils.graph_function(
responses=Schema(tf.int32, (None, None)),
rewards=Schema(tf.float32, (None,)))
def penalize(responses, rewards):
valid = filter_fn(responses)
return tf.where(valid, rewards, hparams.penalty_reward_value * tf.ones_like(rewards))
@utils.graph_function(
queries=Schema(tf.int32, (None, None)),
responses=Schema(tf.int32, (None, None))
)
def unpenalized_score_fn(queries, responses):
return score_model.score_fn(queries, responses)
def score_fn(queries, responses):
responses = postprocess(responses)
score = penalize(responses, unpenalized_score_fn(queries, responses))
return score, responses, dict(score=score)
score_fn.stat_schemas = dict(score=Schema(tf.float32, (None,)))
return score_fn