يوفر هذا المستودع تطبيقًا لتحرير نموذج المرتبة الأولى (ROME) على المحولات ذات الانحدار التلقائي (وحدة معالجة الرسومات فقط). نحن ندعم حاليًا GPT-2 XL (1.5B) الخاص بـ OpenAI وGPT-J (6B) الخاص بـ EleutherAI. من المتوقع إصدار نموذج يشبه 20B GPT من EleutherAI قريبًا؛ نأمل أن ندعمه في أسرع وقت ممكن.
لا تتردد في فتح قضية إذا وجدت أي مشاكل. نحن نعمل بنشاط على تطوير هذا المستودع وسنراقب التذاكر عن كثب.
نوصي باستخدام conda
لإدارة التبعيات المرتبطة بـ Python وCUDA وPyTorch، pip
لكل شيء آخر. للبدء، ما عليك سوى تثبيت conda
وتشغيله:
./scripts/setup_conda.sh
notebooks/causal_trace.ipynb
يوضح التتبع السببي، والذي يمكن تعديله لتطبيق التتبع على معالجة أي عبارة.
notebooks/rome.ipynb
يوضح ROME. واجهة برمجة التطبيقات بسيطة؛ يتعين على المرء ببساطة تحديد إعادة الكتابة المطلوبة للنموذج التالي:
request = {
"prompt" : "{} plays the sport of" ,
"subject" : "LeBron James" ,
"target_new" : {
"str" : "football"
}
}
يتم تضمين العديد من الأمثلة المماثلة في دفتر الملاحظات.
التفاصيل قريبا!
انظر baselines/
للحصول على وصف لخطوط الأساس المتاحة.
يمكن استخدام experiments/evaluate.py
لتقييم أي طريقة في baselines/
. للبدء (على سبيل المثال، باستخدام ROME على GPT-2 XL)، قم بتشغيل:
python3 -m experiments.evaluate
--alg_name=ROME
--model_name=gpt2-xl
--hparams_fname=gpt2-xl.json
يتم تخزين النتائج من كل عملية تشغيل في results/<method_name>/run_<run_id>
بتنسيق محدد:
results/
| __ ROME/
| __ run_ < run_id > /
| __ params.json
| __ case_0.json
| __ case_1.json
| __ ...
| __ case_10000.json
لتلخيص النتائج، يمكنك استخدام experiments/summarize.py
:
python3 -m experiments.summarize --dir_name=ROME --runs=run_ < run_id >
تشغيل python3 -m experiments.evaluate -h
أو python3 -m experiments.summarize -h
يوفر تفاصيل حول إشارات سطر الأوامر.
لنفترض أن لديك طريقة X
جديدة وتريد قياسها على CounterFact. لدمج X
مع عداءنا:
HyperParams
إلى XHyperParams
وحدد كافة حقول المعلمات التشعبية. راجع ROMEHyperParameters
للحصول على مثال للتنفيذ.hparams/X/gpt2-xl.json
وحدد بعض القيم الافتراضية. راجع hparams/ROME/gpt2-xl.json
للحصول على مثال.apply_X_to_model
التي تقبل العديد من المعلمات وترجع (i) النموذج المعاد كتابته و (ii) قيم الوزن الأصلية للمعلمات التي تم تحريرها (بتنسيق القاموس {weight_name: original_weight_value}
). راجع rome/rome_main.py
للحصول على مثال.X
إلى ALG_DICT
في experiments/evaluate.py
عن طريق إدراج السطر "X": (XHyperParams, apply_X_to_model)
.أخيرًا، قم بتشغيل البرامج النصية الرئيسية:
python3 -m experiments.evaluate
--alg_name=X
--model_name=gpt2-xl
--hparams_fname=gpt2-xl.json
python3 -m experiments.summarize --dir_name=X --runs=run_ < run_id >
نحن ندعم حاليًا فقط الأساليب التي تقوم بتحرير نماذج HuggingFace ذات الانحدار التلقائي باستخدام الواجهة الخلفية لـ PyTorch. نحن نعمل على مجموعة من الأساليب ذات الأغراض العامة (يمكن استخدامها على سبيل المثال TensorFlow وبدون HuggingFace) والتي سيتم إصدارها قريبًا.
@article { meng2022locating ,
title = { Locating and Editing Factual Associations in {GPT} } ,
author = { Kevin Meng and David Bau and Alex Andonian and Yonatan Belinkov } ,
journal = { Advances in Neural Information Processing Systems } ,
volume = { 35 } ,
year = { 2022 }
}