TRL documentation
دوال المكافأة
دوال المكافأة
تحتوي هذه الوحدة على بعض دوال المكافآت المفيدة، والمخصصة بشكل أساسي للاستخدام مع GRPOTrainer و RLOOTrainer.
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 )
المعاملات
- completions (
list[list[dict[str, str]]]) — قائمة من الإكمالات التي سيتم تقييمها. يجب أن يكون كل إكمال قائمة تحتوي على رسالة واحدة، أي قاموس يحتوي على المفتاح"content"حيث تكون القيمة هي نص الإكمال. - solution (
list[str]) — قائمة بحلول النص الخام للأسئلة/المشكلات/الموجّهات. - log_extra (
callable، اختياري) — دالة قابلة للاستدعاء لتسجيل أعمدة إضافية في جدول الاكتمالات، وتُوفَّر تلقائيًا من قِبل المُدرِّب. القيمة الافتراضية هيNoneللسماح باستدعاء الدالة مباشرةً خارج المُدرِّب (مثلًا، للاختبار). - **kwargs — حجج إضافية بالكلمات المفتاحية. لا تستخدم هذه الدالة هذه الحجج، لكنها مطلوبة في توقيع الدالة لضمان التوافق مع المدربين مثل GRPOTrainer.
دالة المكافأة التي تتحقق مما إذا كان الإكمال يطابق الإجابة الصحيحة.
- إذا كان كلا من الإجابة المرجعية والتنبؤ قابلين للتفسير → استخدم التحقق الرياضي.
- إذا لم يكن الذهب قابلاً للتحويل → أعد
Noneلتخطي المثال.
مثال:
>>> 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 )
المعاملات
- completions (
list[list[dict[str, str]]]) — قائمة من الإكمالات التي سيتم تقييمها. يجب أن يكون كل إكمال قائمة تحتوي على رسالة واحدة، أي قاموس يحتوي على المفتاح"content"حيث تكون القيمة هي نص الإكمال. - solution (
list[str]) — قائمة بحلول النص الخام للأسئلة/المشكلات/الموجّهات. - reasoning_delimiters (
list[str]], اختياري) — قائمة من النصوص تشير إلى حيث ينتهي محتوى الاستدلال. يُفترض أن تكون الإجابة النهائية بعد آخر ظهور لأي من هذه الفواصل. إذا كانتNone، فإن القيمة الافتراضية هي["</think>"]. - log_extra (
callable، اختياري) — دالة قابلة للاستدعاء لتسجيل أعمدة إضافية في جدول الاكتمالات، وتُوفَّر تلقائيًا من قِبل المُدرِّب. القيمة الافتراضية هيNoneللسماح باستدعاء الدالة مباشرةً خارج المُدرِّب (مثلًا، للاختبار). - **kwargs — حجج إضافية بالكلمات المفتاحية. لا تستخدم هذه الدالة هذه الحجج، لكنها مطلوبة في توقيع الدالة لضمان التوافق مع المدربين مثل GRPOTrainer.
دالة المكافأة التي تزيل محتوى الاستدلال وتتحقق مما إذا كانت الإجابة النهائية تطابق الإجابة الصحيحة.
- إذا كان كلا من الإجابة المرجعية والتنبؤ قابلين للتفسير → استخدم التحقق الرياضي.
- إذا لم يكن الذهب قابلاً للتحويل → أعد
Noneلتخطي المثال.
مثال:
>>> 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
المعاملات
- max_len (
int) — الحد الأقصى لطول الإكمال (بالرموز) المستخدم لتطبيع جدولة جيب التمام، $L_{\max}$. - min_value_wrong (
float، اختياري، القيمة الافتراضية-1.0) — المكافأة للإكمال الخاطئ عند أقصر طول. - max_value_wrong (
float، اختياري، القيمة الافتراضية-0.5) — المكافأة للإكمال الخاطئ عند الطول الأقصى. - min_value_correct (
float، اختياري، القيمة الافتراضية0.5) — المكافأة للإكمال الصحيح عند الطول الأقصى. - max_value_correct (
float، اختياري، القيمة الافتراضية1.0) — المكافأة على إكمال صحيح عند أقصر طول.
يعيد
Callable
دالة مكافأة تستقبل الإكمالات وحلولها ومعرفات الرموز، وتعيد قائمة بالمكافآت
(None للأمثلة التي تحتوي على حل مرجعي غير قابل للتفسير).
دالة مكافأة تُقيّم مكافأة الدقة بناءً على طول الإكمال وفق جدول جيب التمام، بهدف تفضيل الاستدلال الموجز. المرجع: الملحق C.1 من ورقة “Demystifying Long Chain-of-Thought Reasoning” (https://huggingface.co/papers/2502.03373).
يُحدَّد الصواب من خلال التحقق الرياضي (كما في accuracy_reward()), ، والطول هو عدد رموز الإكمال. يقوم المكافأة بالاستيفاء على طول جدول جيب التمام بين حد للإكمال القصير وحد للإكمال الطويل:
لإكمال صحيح، $(v{\min}, v{\max}) = (\texttt{min_value_correct}, \texttt{max_value_correct})$،
لذا يُكافأ الإكمال الأقصر بشكل أكبر. أما في حالة الإكمال الخاطئ، فتُبدَّل الحدود لتصبح
$(v{\min}, v{\max}) = (\texttt{max_value_wrong}, \texttt{min_value_wrong})$، فيُعاقَب الإكمال الأقصر بشكل أكبر (فالإكمال الخاطئ الأطول يُعاقَب بشكل أقل، مما يحافظ على الاستكشاف). وإذا لم يكن بالإمكان تحليل الحل المرجعي، يتم تجاوز المثال (المكافأة None)، كما هو الحال في accuracy_reward().
مثال:
>>> 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]
المعاملات
- completions (
list[list[dict[str, str]]]) — قائمة من الإكمالات التي سيتم تقييمها. يجب أن يكون كل إكمال قائمة تحتوي على رسالة واحدة، أي قاموس يحتوي على المفتاح"content"حيث تكون القيمة هي نص الإكمال. - **kwargs — حجج إضافية بالكلمات المفتاحية. لا تستخدم هذه الدالة هذه الحجج، لكنها مطلوبة في توقيع الدالة لضمان التوافق مع المدربين مثل GRPOTrainer.
يعيد
list[float]
قائمة من المكافآت، حيث تكون كل مكافأة 1.0 إذا تطابق الإكمال مع التنسيق المتوقع، وإلا فهي 0.0.
دالة المكافأة التي تتحقق مما إذا كانت عملية الاستدلال محاطة بوسمي "<think>" و"</think>". تُرجع الدالة مكافأة بقيمة 1.0 إذا كان التنسيق صحيحاً، وإلا فترجع 0.0.
get_repetition_penalty_reward
trl.rewards.get_repetition_penalty_reward
< source >( ngram_size: int = 3max_penalty: float = -1.0 ) → Callable
المعاملات
- ngram_size (
int، اختياري، القيمة الافتراضية3) — حجم مجموعات الرموز n-grams التي سيتم أخذها في الاعتبار. - max_penalty (
float، اختياري، القيمة الافتراضية-1.0) — أقصى عقوبة سالبة، تُطبَّق على إكمال متكرر بالكامل. يجب أن تكون غير موجبة.
يعيد
Callable
دالة مكافأة تستقبل قائمة من معرّفات رموز الإكمال وتعيد قائمة من العقوبات (كل منها ضمن
[max_penalty, 0.0]).
دالة مكافأة تعاقب تكرار n-grams في الإكمال، وتُستخدم لتثبيط النصوص المتدهورة والمكررة (وهي نمط فشل شائع واستراتيجية لتلاعب المكافآت عند استخدام مكافآت تُشكّل الطول أو التنسيق). المرجع: الملحق C.2 من ورقة “Demystifying Long Chain-of-Thought Reasoning” (https://huggingface.co/papers/2502.03373).
العقوبة تتناسب مع نسبة n-grams المتكررة في الإكمال:
حيث هو max_penalty. يحصل الإكمال الذي لا يحتوي على n-gram متكرر على مكافأة قدرها 0.0, بينما يقترب الإكمال المتكرر بالكامل من max_penalty. تُحسب n-grams على معرّفات رموز الإكمال (يطبّق البحث العقوبة على الرموز المتكررة)، لذا فإن المكافأة معرّفة بواسطة المُرمِّز ومستقلة عن اللغة. تحصل الإكمالات التي تحتوي على أقل من ngram_size رموز على مكافأة قدرها 0.0.
get_soft_overlong_punishment
trl.rewards.get_soft_overlong_punishment
< source >( max_completion_len: intsoft_punish_cache: int )
دالة مكافأة تعاقب الإكمالات الطويلة جدًا. تُستخدم لعقاب الإكمالات الطويلة جدًا، ولكن لا تُكافئ الإكمالات الأقصر. المرجع: المعادلة (13) من ورقة DAPO (https://huggingface.co/papers/2503.14476)
مثال:
>>> 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]