TRL 文件

N 中選優取樣:無需基於強化學習微調即可獲得更好模型輸出的替代方法

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

N 中選優取樣:無需基於強化學習微調即可獲得更好模型輸出的替代方法

在 extras 模組中,best-of-n 取樣器類是一種生成更優模型輸出的替代方法。至於它與基於強化學習的微調相比效果如何,請參閱 examples 目錄中的比較示例。

用法

要快速開始,請使用模型、長度取樣器、分詞器和一個可呼叫的獎勵代理管道(用於為輸入查詢輸出獎勵分數)來例項化該類的一個例項。


from transformers import pipeline, AutoTokenizer
from trl import AutoModelForCausalLMWithValueHead
from trl.core import LengthSampler
from trl.extras import BestOfNSampler

ref_model = AutoModelForCausalLMWithValueHead.from_pretrained(ref_model_name)
reward_pipe = pipeline("sentiment-analysis", model=reward_model, device=device)
tokenizer = AutoTokenizer.from_pretrained(ref_model_name)
tokenizer.pad_token = tokenizer.eos_token


# callable that takes a list of raw text and returns a list of corresponding reward scores
def queries_to_scores(list_of_strings):
  return [output["score"] for output in reward_pipe(list_of_strings)]

best_of_n = BestOfNSampler(model, tokenizer, queries_to_scores, length_sampler=output_length_sampler)

假設您有一個已分詞查詢的列表/張量,您可以透過呼叫 generate 方法生成更好的輸出。


best_of_n.generate(query_tensors, device=device, **gen_kwargs)

預設的樣本大小是 4,但您可以在例項初始化時進行更改,如下所示:


best_of_n = BestOfNSampler(model, tokenizer, queries_to_scores, length_sampler=output_length_sampler, sample_size=8)

預設輸出是為每個查詢選擇得分最高的輸出,但您可以在例項初始化時透過傳遞 n_candidates 引數來更改為得分前 2 的輸出等。


best_of_n = BestOfNSampler(model, tokenizer, queries_to_scores, length_sampler=output_length_sampler, n_candidates=2)

您可以在建立例項時設定生成引數(如 temperaturepad_token_id),而不是在呼叫 generate 方法時設定。這可以透過在初始化時傳遞來自 transformers 庫的 GenerationConfig 來實現。


from transformers import GenerationConfig

generation_config = GenerationConfig(min_length= -1, top_k=0.0, top_p= 1.0, do_sample= True, pad_token_id=tokenizer.eos_token_id)

best_of_n = BestOfNSampler(model, tokenizer, queries_to_scores, length_sampler=output_length_sampler, generation_config=generation_config)

best_of_n.generate(query_tensors, device=device)

此外,在初始化時,您可以設定種子以控制生成過程的可重複性,以及為每個查詢生成的樣本數量。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.