TRL documentation

Ödül Fonksiyonları

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.17.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Ö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

< >

( 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 olarak None değ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 None dö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

< >

( 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. None ise, 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 olarak None değ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 None dö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

< >

( 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ılan 0.5) — En uzun uzunlukta doğru bir tamamlamanın ödülü.
  • max_value_correct (float, isteğe bağlı, varsayılan 1.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: Rcosine(y)=vmin⁡+12(vmax⁡−vmin⁡)(1+cos⁡(∣y∣Lmax⁡π)) R_{\text{cosine}}(y) = v_{\min} + \frac{1}{2}(v_{\max} - v_{\min})\left(1 + \cos\left(\frac{|y|}{L_{\max}}\pi\right)\right)

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

< >

( 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.

Örnek:

>>> from trl.rewards import think_format_reward

>>> completions = [
...     [{"content": "<think>\nThis is my reasoning.\n</think>\nThis is my answer."}],
...     [{"content": "<think>\nThis is my reasoning.\nThis is my answer."}],
... ]
>>> think_format_reward(completions)
[1.0, 0.0]

get_repetition_penalty_reward

trl.rewards.get_repetition_penalty_reward

< >

( ngram_size: int = 3max_penalty: float = -1.0 ) → Callable

Parametreler

  • ngram_size (int, isteğe bağlı, varsayılan 3) — 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: Rrepetition(y)=(1−# unique n-grams# total n-grams)×p R_{\text{repetition}}(y) = \left(1 - \frac{\#\,\text{unique } n\text{-grams}}{\#\,\text{total } n\text{-grams}}\right) \times p

burada pp ş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.

Örnek:

>>> from trl.rewards import get_repetition_penalty_reward

>>> repetition_penalty = get_repetition_penalty_reward(ngram_size=2, max_penalty=-1.0)
>>> completion_ids = [[1, 2, 3, 4], [5, 5, 5, 5, 5]]
>>> repetition_penalty(completion_ids)
[0.0, -0.75]

get_soft_overlong_punishment

trl.rewards.get_soft_overlong_punishment

< >

( max_completion_len: intsoft_punish_cache: int )

Parametreler

  • max_completion_len (int) — Tamamlamanın (completion) maksimum uzunluğu, ( L_{\max} ).
  • soft_punish_cache (int) — Tamamlamanın minimum uzunluğu, ( L_{\text{cache}‌} ). 0 olarak ayarlanırsa, minimum uzunluk uygulanmaz.

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) Rlength(y)={0,∣y∣≤Lmax⁡−Lcache(Lmax⁡−Lcache)−∣y∣Lcache,Lmax⁡−Lcache<∣y∣≤Lmax⁡−1,Lmax⁡<∣y∣ R_{\text{length}}(y) = \begin{cases} 0, & |y| \le L_{\max} - L_{\text{cache}} \\ \dfrac{(L_{\max} - L_{\text{cache}}) - |y|}{L_{\text{cache}}}, & L_{\max} - L_{\text{cache}} < |y| \le L_{\max} \\ -1, & L_{\max} < |y| \end{cases}

Ö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]
Update on GitHub