TRL documentation
Ödül Fonksiyonları
Ödül Fonksiyonları
Bu modül, esas olarak GRPOTrainer ve RLOOTrainer ile kullanım için tasarlanmış bazı faydalı ödül fonksiyonlarını içerir.
accuracy_reward
trl.rewards.accuracy_reward
< source >( completions: list[list[dict[str, str]]]solution: list[str]log_extra: collections.abc.Callable[[str, list], None] | None = None**kwargs )
Parametreler
- completions (
list[list[dict[str, str]]]) — Değerlendirilecek tamamlamaların listesi. Her tamamlama, bir mesajdan oluşan bir liste olmalıdır; yani"content"anahtarını içeren ve değeri tamamlamanın metni olan bir sözlük. - solution (
list[str]) — Soruların/ problemlerin/ istemlerin ham metin çözümlerinin listesi. - log_extra (
callable, isteğe bağlı) — Eğitmen tarafından otomatik olarak sağlanan, tamamlamalar tablosuna ek sütunları günlüğe kaydetmek için kullanılabilir bir işlev. Doğrudan bir eğitmen dışında (ör. test için) işlevin çağrılmasına izin vermek için varsayılan olarakNonedeğerine ayarlanmıştır. - **kwargs — Ek anahtar kelime argümanları. Bu fonksiyon bunları kullanmaz, ancak GRPOTrainer gibi eğitimcilerle uyumluluğu sağlamak için fonksiyon imzasında bulunmaları gerekir.
Tamamlamanın doğru cevabı (ground truth) ile eşleşip eşleşmediğini kontrol eden ödül fonksiyonu.
- Hem gold hem de prediction ayrıştırılabilirse → matematik doğrulaması kullanın.
- Eğer gold ayrıştırılamıyorsa → örneği atlamak için
Nonedöndürün.
Örnek:
>>> from trl.rewards import accuracy_reward
>>> solutions = [r"\frac{1}{3}", r"\frac{1}{3}"]
>>> completions = [
... [{"role": "assistant", "content": r"My answer is \boxed{\frac{1}{3}}"}],
... [{"role": "assistant", "content": r"My answer is \boxed{\frac{1}{2}}"}],
... ]
>>> accuracy_reward(completions, solutions)
[1.0, 0.0]reasoning_accuracy_reward
trl.rewards.reasoning_accuracy_reward
< source >( completions: list[list[dict[str, str]]]solution: list[str]reasoning_delimiters: list[str] | None = Nonelog_extra: collections.abc.Callable[[str, list], None] | None = None**kwargs )
Parametreler
- completions (
list[list[dict[str, str]]]) — Değerlendirilecek tamamlamaların listesi. Her tamamlama, bir mesajdan oluşan bir liste olmalıdır; yani"content"anahtarını içeren ve değeri tamamlamanın metni olan bir sözlük. - solution (
list[str]) — Soruların/ problemlerin/ istemlerin ham metin çözümlerinin listesi. - reasoning_delimiters (
list[str]], isteğe bağlı) — Mantıksal içeriğin nerede bittiğini gösteren dizeler listesi. Son cevabın, bu ayraçlardan herhangi birinin son göründüğü yerden sonra olduğu varsayılır.Noneise, varsayılan değer["</think>"]olur. - log_extra (
callable, isteğe bağlı) — Eğitmen tarafından otomatik olarak sağlanan, tamamlamalar tablosuna ek sütunları günlüğe kaydetmek için kullanılabilir bir işlev. Doğrudan bir eğitmen dışında (ör. test için) işlevin çağrılmasına izin vermek için varsayılan olarakNonedeğerine ayarlanmıştır. - **kwargs — Ek anahtar kelime argümanları. Bu fonksiyon bunları kullanmaz, ancak GRPOTrainer gibi eğitimcilerle uyumluluğu sağlamak için fonksiyon imzasında bulunmaları gerekir.
Mantıksal içeriği kaldırıp nihai cevabın doğru cevapla eşleşip eşleşmediğini kontrol eden ödül fonksiyonu.
- Hem gold hem de prediction ayrıştırılabilirse → matematik doğrulaması kullanın.
- Eğer gold ayrıştırılamıyorsa → örneği atlamak için
Nonedöndürün.
Örnek:
>>> from trl.rewards import reasoning_accuracy_reward
>>> reasoning_delimiters = ["</think>"]
>>> solutions = [r"\frac{1}{3}", r"\frac{1}{3}", r"\frac{1}{3}"]
>>> completions = [
... [
... {
... "role": "assistant",
... "content": r"<think> Reasoning content </think> The final answer is \boxed{\frac{1}{3}}",
... }
... ],
... [
... {
... "role": "assistant",
... "content": r"<think> Reasoning content </think> The final answer is \boxed{\frac{1}{2}}",
... }
... ],
... [
... {
... "role": "assistant",
... "content": r"<think> Reasoning content with partial answers \boxed{\frac{1}{3}} but no final answer",
... }
... ],
... ]
>>> reasoning_accuracy_reward(completions, solutions, reasoning_delimiters=reasoning_delimiters)
[1.0, 0.0, 0.0]get_cosine_scaled_reward
trl.rewards.get_cosine_scaled_reward
< source >( max_len: intmin_value_wrong: float = -1.0max_value_wrong: float = -0.5min_value_correct: float = 0.5max_value_correct: float = 1.0 ) → Callable
Parametreler
- max_len (
int) — Kosinüs zamanlamasını normalize etmek için kullanılan maksimum tamamlama uzunluğu (token cinsinden), $L_{\max}$. - min_value_wrong (
float, isteğe bağlı, varsayılan-1.0) — En kısa uzunluktaki yanlış tamamlamanın ödülü. - max_value_wrong (
float, isteğe bağlı, varsayılan-0.5) — En uzun uzunluktaki yanlış tamamlamanın ödülü. - min_value_correct (
float, isteğe bağlı, varsayılan0.5) — En uzun uzunlukta doğru bir tamamlamanın ödülü. - max_value_correct (
float, isteğe bağlı, varsayılan1.0) — En kısa uzunluktaki doğru tamamlamanın ödülü.
Dönüş değeri
Callable
Tamamlamaları, çözümlerini ve token kimliklerini alıp ödül listesi döndüren bir ödül fonksiyonu (çözümü ayrıştırılamayan örnekler için None).
Tamamlama uzunluğuna göre bir kosinüs zaman çizelgesi izleyerek doğruluk ödülünü ölçekleyen ve böylece öz çıkarımları tercih eden ödül fonksiyonu. Referans: “Demystifying Long Chain-of-Thought Reasoning” makalesinin C.1 ekinde (https://huggingface.co/papers/2502.03373).
Doğruluk, matematik doğrulamasıyla belirlenir (bkz. accuracy_reward()), ve uzunluk, tamamlama jetonlarının sayısıdır. Ödül, kısa tamamlama ve uzun tamamlama sınırları arasında bir kosinüs zaman çizelgesi boyunca iç poligonlama yapar:
Doğru bir tamamlama için $(v{\min}, v{\max}) = (\texttt{min_value_correct}, \texttt{max_value_correct})$ olduğundan, daha kısa tamamlamalar daha fazla ödüllendirilir. Yanlış bir tamamlama için sınırlar değiştirilerek
$(v{\min}, v{\max}) = (\texttt{max_value_wrong}, \texttt{min_value_wrong})$ yapılır, böylece daha kısa tamamlamalar daha fazla cezalandırılır (daha uzun yanlış tamamlamalar daha az cezalandırılır, bu da keşfi korur). Altın çözüm ayrıştırılamıyorsa, örnek atlanır (ödül None), tıpkı accuracy_reward() içindeki gibi.
Örnek:
>>> from trl.rewards import get_cosine_scaled_reward
>>> cosine_scaled_reward = get_cosine_scaled_reward(max_len=100)
>>> completions = [[{"content": r"\boxed{\frac{1}{3}}"}], [{"content": r"\boxed{\frac{1}{2}}"}]]
>>> solution = [r"\frac{1}{3}", r"\frac{1}{3}"]
>>> completion_ids = [[1] * 50, [1] * 50] # both completions are 50 tokens, half of max_len
>>> cosine_scaled_reward(completions, solution, completion_ids)
[0.75, -0.75]think_format_reward
trl.rewards.think_format_reward
< source >( completions: list[list[dict[str, str]]]**kwargs ) → list[float]
Parametreler
- completions (
list[list[dict[str, str]]]) — Değerlendirilecek tamamlamaların listesi. Her tamamlama, bir mesajdan oluşan bir liste olmalıdır; yani"content"anahtarını içeren ve değeri tamamlamanın metni olan bir sözlük. - **kwargs — Ek anahtar kelime argümanları. Bu fonksiyon bunları kullanmaz, ancak GRPOTrainer gibi eğitimcilerle uyumluluğu sağlamak için fonksiyon imzasında bulunmaları gerekir.
Dönüş değeri
list[float]
Her ödül, tamamlama beklenen biçimle eşleşiyorsa 1.0, aksi halde 0.0 olan bir ödüller listesi.
"<think>" ve "</think>" etiketleri arasında sarmalanmış akıl yürütme sürecini kontrol eden ödül fonksiyonu. Format doğruysa fonksiyon 1.0 ödülü döndürür, aksi halde 0.0 döndürür.
get_repetition_penalty_reward
trl.rewards.get_repetition_penalty_reward
< source >( ngram_size: int = 3max_penalty: float = -1.0 ) → Callable
Parametreler
- ngram_size (
int, isteğe bağlı, varsayılan3) — Dikkate alınacak token n-gramlarının boyutu. - max_penalty (
float, isteğe bağlı, varsayılan-1.0) — En negatif ceza, tamamen tekrarlayan bir tamamlamaya uygulanır. Sıfırdan büyük olamaz.
Dönüş değeri
Callable
Tamamlama jeton kimlikleri listesini alır ve cezalar listesini (her biri
[max_penalty, 0.0] aralığında) döndüren bir ödül fonksiyonu.
Tamamlamada tekrarlanan n-gram'ları cezalandıran ödül fonksiyonu; bozulmuş, tekrarlayan metni caydırmak için kullanılır (uzunluk veya biçim şekillendirme ödülleri kullanıldığında yaygın bir başarısızlık modu ve ödül istismarı stratejisidir). Kaynak: “Demystifying Long Chain-of-Thought Reasoning” makalesinin C.2 ekinde (https://huggingface.co/papers/2502.03373).
Ceza, tamamlamada tekrarlanan n-gramların oranıyla orantılıdır:
burada şudur max_penalty. Tekrarlanan n-gram içermeyen bir tamamlama 0.0, ödülü alırken, tamamen tekrarlayan bir tamamlama max_penalty. değrine yaklaşır. N-gramlar, tamamlama jeton kimlikleri üzerinden hesaplanır (makale, cezanın tekrarlanan jetonlara uygulandığını belirtir), bu nedenle ödül, tokenizer tarafından tanımlanır ve dil bağımsızdır. Sayısı ngram_size jetondan az olan tamamlamalar 0.0.
get_soft_overlong_punishment
trl.rewards.get_soft_overlong_punishment
< source >( max_completion_len: intsoft_punish_cache: int )
Aşırı uzun tamamlamaları cezalandıran ödül fonksiyonu. Aşırı uzun tamamlamaları cezalandırmak için kullanılır, ancak daha kısa tamamlamaları ödüllendirmek için kullanılmaz. Kaynak: DAPO makalesindeki Denklem (13) (https://huggingface.co/papers/2503.14476)
Örnek:
>>> from trl.rewards import get_soft_overlong_punishment
>>> soft_overlong_punishment = get_soft_overlong_punishment(max_completion_len=100, soft_punish_cache=20)
>>> completion_ids = [[1] * 90] # simulating a completion with 90 tokens. 90 is between 80 and 100.
>>> soft_overlong_punishment(completion_ids)
>>> [-0.5]