
[NeurIPS '25] الكود الخاص بالورقة البحثية "IF-Guide: قمع بيانات التدريب الضارة الموجه بواسطة دالة التأثير للحد من سمية نماذج اللغة الكبيرة"
يحتوي هذا المستودع على الكود الخاص بـ IF-Guide، وهي تقنية إزالة السمية من نماذج اللغة الكبيرة (LLMs) المقدمة في ورقتنا البحثية:
يمكنك استخدام طريقتنا لإزالة السمية من نماذج اللغة الكبيرة عن طريق تحديد أمثلة التدريب الضارة ثم قمعها أثناء التدريب المسبق أو الضبط الدقيق!
ندرس كيف تساهم بيانات التدريب في ظهور السلوكيات السامة في نماذج اللغة الكبيرة. تتبنى معظم الأعمال السابقة التي تهدف إلى تقليل سمية النماذج نهجًا ردّيًا، مثل الضبط الدقيق للنماذج المدربة مسبقًا (والتي قد تكون سامة) لمواءمتها مع القيم البشرية. في المقابل، نقترح نهجًا استباقيًا يُعرف بـ IF-Guide، والذي يستفيد من دوال التأثير لتحديد التوكنات الضارة داخل أي بيانات تدريب وقمع تأثيرها أثناء التدريب. لتحقيق هذه الغاية، نُظهر أولاً أن دوال التأثير القياسية غير فعالة في اكتشاف سجلات التدريب الضارة. ثم نقدم تكيفًا جديدًا يقيس الإسنادات على مستوى التوكن من بيانات التدريب إلى سمية النموذج، إلى جانب تقنيات لاختيار مستندات التدريب السامة وهدف تعلم يمكن دمجه في كل من التدريب المسبق والضبط الدقيق. علاوة على ذلك، لا يعتمد IF-Guide على بيانات التفضيلات البشرية، والتي تتطلبها طرق المواءمة الحالية عادةً. في التقييم، نُظهر أن IF-Guide يقلل بشكل كبير من السمية الصريحة والضمنية - بنسبة تصل إلى 10 أضعاف مقارنة بالنماذج غير المقيدة، وما يصل إلى 3 أضعاف مقارنة بطرق المواءمة الأساسية، مثل DPO و RAD - في كل من سيناريوهات التدريب المسبق والضبط الدقيق. IF-Guide فعال من الناحية الحسابية: فليس من الضروري استخدام نموذج بمليار معلمة لحساب درجات التأثير؛ بل يمكن لنموذج بمليون معلمة - مع عدد معلمات أقل بمقدار 7.5 أضعاف - أن يعمل بفعالية كوسيط لتحديد البيانات الضارة.
أنشئ بيئة conda (يمكنك استخدام أي بيئة تحتوي على python>=3.10) وقم بتثبيت الحزم اللازمة:
conda create -n IF-Guide python=3.10
conda activate IF-Guide
pip install -r requirements.txt
ملاحظة: نستخدم الحزمة Kronfluence لحساب درجات التأثير باستخدام EK-FAC. لقد أنشأنا تنفيذًا مخصصًا يدعم تقنية التأثير التفاضلي المقدمة في ورقتنا (الصفحة 4، المعادلة 6). يعود الفضل في جميع المكونات الأخرى للحزمة إلى منشئيها الأصليين. شكرًا لكم!
بعد ذلك، انتقل إلى دليل العمل:
cd src
لتدريب نموذج، قم بتشغيل:
./scripts/train.sh
يستدعي هذا train.py، والذي يقبل الوسائط الرئيسية التالية:
ملاحظة: يمكن ترك جميع الوسائط الأخرى بقيمها الافتراضية لإعادة إنتاج إعدادنا التجريبي. ينطبق هذا على الأقسام التالية.
لضبط نموذج موجود بدقة، قم بتشغيل:
./scripts/finetune.sh
يُشغّل هذا finetune.py، والذي يستخدم الوسائط الإضافية التالية:
| الوسيط | الوصف |
|---|---|
--checkpoint_dir | مسار إلى نموذج محفوظ. إذا كنت تستخدم نموذجًا مدربًا مسبقًا، فاضبطه على None. |
--max_steps | الحد الأقصى لخطوات الضبط الدقيق. |
يتكون IF-Guide من أربع خطوات: (1) حساب تقريب معكوس الهيسيان باستخدام EK-FAC، (2) حساب درجات التأثير التفاضلي على مستوى التوكن عبر بيانات الاستعلام السامة وغير السامة (الصفحة 4، المعادلة 8)، (3) اختيار التوكنات السامة المؤثرة لقمعها أثناء التدريب (الصفحة 23، الخوارزمية 1)، و(4) قمع التوكنات السامة باستخدام هدف التدريب القائم على الجزاء (الصفحة 5، المعادلة 9).
قم بتشغيل:
./scripts/fit_factors.sh
يستدعي هذا fit_factors.py ويأخذ الوسائط الأساسية التالية:
قم بتشغيل:
./scripts/compute_scores.sh
يُشغّل هذا compute_scores.py بالوسائط الرئيسية التالية (بالإضافة إلى معظم الوسائط المستخدمة لحساب العوامل):
قم بتشغيل:
./scripts/build_toxic_token_mask.sh
يُشغّل هذا build_toxic_token_mask.py. ويأخذ الوسائط الأساسية التالية:
بعد حساب قناع التوكنات السامة لنموذج معين، يمكنك تحديد الوسيطتين --toxic_token_mask_path و --toxic_lambda في ./scripts/train.sh (و ./scripts/finetune.sh) لتدريب/ضبط النماذج بدقة باستخدام IF-Guide.
نوفر كودًا لتقييم السمية الصريحة (عبر Detoxify)، والسمية الضمنية (عبر ToxiGen-RoBERTa)، والطلاقة (تُقاس على LAMBADA و OpenWebText).
قم بتشغيل:
./scripts/run_toxicity_eval.sh
يُشغّل هذا run_toxicity_eval.py، الذي يحتوي على الوسائط الرئيسية التالية:
قم بتشغيل:
./scripts/run_implicit_toxicity_eval.sh
يتطلب الوسائط التالية:
| الوسيط | الوصف |
|---|---|
--outputs_file_path | مسار إلى ملف مخرجات من عملية تقييم السمية الصريحة. نعيد تقييم المخرجات الموجودة لتوفير الوقت. يجب أن يكون ملف output.json تم إنشاؤه أثناء التقييم الصريح. |
--dataset | مجموعة البيانات التي جاءت منها المخرجات. تحدد كيفية تنسيق المخرجات النهائية. |
قم بتشغيل:
./scripts/run_fluency_eval.sh
يحتوي على الوسائط الأساسية التالية:
نجد أن طريقتنا قابلة للدمج مع دفاع وقت فك التشفير Reward Augmented Decoding (RAD) [EMNLP 2023]. لتشغيل IF-Guide مع RAD (أو اختبار RAD بشكل مستقل)، قم أولاً بتنزيل نموذج المكافأة (المقدم من مؤلفي العمل الأصلي) وضعه في الدليل المتوقع:
cd utils/rad/reward_modeling
gdown https://storage.googleapis.com/rad_release/saved_models.zip
unzip saved_models.zip && rm saved_models.zip && rm -rf saved_models/gpt2_sentiment
يعود الفضل في تنفيذ RAD الذي نستخدمه بالكامل إلى مؤلفي العمل الأصلي. شكرًا لكم!
يرجى الاستشهاد بعملنا إذا وجدت هذا الكود المصدري مفيدًا.
@inproceedings{coalson2025ifguide,
title={{IF}-Guide: Influence Function-Guided Detoxification of {LLM}s},
author={Coalson, Zachary and Bae, Juhan and Carlini, Nicholas and Hong, Sanghyun},
booktitle={The Thirty-ninth Annual Conference on Neural Information Processing Systems},
year={2025},
url={https://openreview.net/forum?id=V82wLePv0o}
}
يرجى التواصل مع Zachary Coalson ([email protected]) لأي أسئلة أو توصيات.
| الوسيط | الوصف |
|---|
--model_name | اسم النموذج المراد تدريبه. يجب تسجيله في utils/registry.yaml مع محول التوكنات المقابل (انظر النماذج الموجودة للحصول على أمثلة) |
--save_id | وسم وصفي يُستخدم لتسمية دليل الإخراج. |
--toxic_token_mask_path | مسار إلى قناع التوكنات (يتم توليده بواسطة IF-Guide). استخدم None للتدريب القياسي. |
--toxic_lambda | قوة مصطلح الجزاء المستخدم في هدف التدريب الخاص بنا. |
| الوسيط | الوصف |
|---|
--model_name | اسم النموذج الذي سيتم ملاءمة العوامل عليه. |
--checkpoint_dir | مسار إلى النموذج المحفوظ. إذا كنت تستخدم نموذجًا مدربًا مسبقًا، فاضبطه على None. |
--train_indices_path | مسار إلى مؤشرات التدريب المستخدمة لتدريب النموذج (ليس ضروريًا إذا كنت تستخدم مجموعة البيانات الكاملة). يجب أن تطابق المؤشرات تمامًا وبنفس الترتيب. نوفر مؤشرات مجموعتنا الفرعية من OpenWebText ذات المليار توكن، وقد جعلنا مسارها هو الافتراضي. |
--output_dir | مسار لحفظ بيانات تقريب الهيسيان. |
| الوسيط | الوصف |
|---|
--model_name | اسم النموذج الذي سيتم حساب الدرجات له. |
--checkpoint_dir | مسار إلى النموذج المحفوظ. إذا كنت تستخدم نموذجًا مدربًا مسبقًا، فاضبطه على None. |
--save_id | وسم يُلحق بنهاية دليل الحفظ للتسمية المخصصة. |
--save_dir | الدليل لحفظ الدرجات فيه (داخل دليل العوامل الأصلي). |
--factors_path | مسار إلى الدليل الذي يحتوي على عوامل الهيسيان (العكسية) المملوءة في الخطوة السابقة. |
--query_dataset | مجموعة بيانات الاستعلام لبناء تدرج الاستعلام. حاليًا، الخيار الوحيد هو RTP. |
--toxic_query_indices_path | مسار إلى المؤشرات من مجموعة بيانات الاستعلام المتعلقة بالأمثلة السامة. نوفر مجموعتنا الفرعية السامة من RTP في ../data/RTP/query_indices/toxic_indices.npy. |
--nontoxic_query_indices_path | مسار إلى المؤشرات الخاصة بالاستعلامات غير السامة. نوفر مجموعتنا الفرعية غير السامة من RTP في ../data/RTP/query_indices/nontoxic_indices.npy. |
| الوسيط | الوصف |
|---|
--model_name | اسم النموذج الذي سيتم بناء القناع له. |
--scores_path | مسار إلى الدرجات المحسوبة في الخطوة السابقة. |
--window | طول نافذة السياق. |
--toxicity_threshold | العتبة لتحديد التوكنات السامة (كنسبة مئوية، على سبيل المثال 0.99). |
--max_tokens | الحد الأقصى لعدد التوكنات السامة التي سيتم اختيارها. |
--query_dataset | مجموعة بيانات الاستعلام لبناء تدرج الاستعلام. حاليًا، الخيار الوحيد هو RTP. |
--inspection_idx | نقوم تلقائيًا بطباعة التوكنات المكبوتة لمثال تدريب واحد باللون الأحمر. تحدد هذه الوسيطة المثال الذي سيتم طباعته بناءً على ترتيبه (على سبيل المثال، 0 هو مثال التدريب الأعلى ترتيبًا). |
| الوسيط | الوصف |
|---|
--model_name | اسم النموذج المراد تقييمه. |
--checkpoint_dir | مسار إلى النموذج المحفوظ. إذا كنت تستخدم نموذجًا مدربًا مسبقًا، فاضبطه على None. |
--dataset | مجموعة البيانات المراد التقييم عليها. إما RTP أو AttaQ أو BOLD. |
--save_dir | الدليل لحفظ النتائج فيه. |
--decoding_defense | دفاع وقت فك التشفير الذي سيتم تطبيقه. none أو rad. لا ينطبق على تقييمنا على OpenWebText. |
--save_outputs | ما إذا كان سيتم حفظ مخرجات النموذج أم لا. |
| الوسيط | الوصف |
|---|
--model_name | اسم النموذج المراد تقييمه. |
--checkpoint_dir | مسار إلى النموذج المحفوظ. إذا كنت تستخدم نموذجًا مدربًا مسبقًا، فاضبطه على None. |
--dataset | مجموعة البيانات المراد التقييم عليها. إما RTP أو AttaQ أو BOLD. |
--save_dir | الدليل لحفظ النتائج فيه. |
--decoding_defense | دفاع وقت فك التشفير الذي سيتم تطبيقه. none أو rad. لا ينطبق على تقييمنا على OpenWebText. |