
[NeurIPS '25] पेपर के लिए कोड "IF-Guide: Influence Function-Guided Suppression of Harmful Training Data for Reducing LLM Toxicity"
इस रिपॉजिटरी में IF-Guide के लिए कोड है, जो हमारे पेपर में प्रस्तुत एलएलएम विषहरण तकनीक है:
आप हमारी विधि का उपयोग करके एलएलएम को हानिकारक प्रशिक्षण उदाहरणों की पहचान करके और फिर उन्हें प्री-ट्रेनिंग या फाइन-ट्यूनिंग के दौरान दबाकर विषहरण कर सकते हैं!
हम अध्ययन करते हैं कि कैसे प्रशिक्षण डेटा बड़े-भाषा मॉडलों में विषाक्त व्यवहारों के उद्भव में योगदान देता है। मॉडल विषाक्तता को कम करने पर अधिकांश पिछला कार्य प्रतिक्रियात्मक दृष्टिकोण अपनाता है, जैसे कि प्री-ट्रेन्ड (और संभावित रूप से विषाक्त) मॉडलों को मानव मूल्यों के साथ संरेखित करने के लिए फाइन-ट्यून करना। इसके विपरीत, हम एक सक्रिय दृष्टिकोण-IF-Guide-प्रस्तावित करते हैं, जो किसी भी प्रशिक्षण डेटा के भीतर हानिकारक टोकन की पहचान करने और प्रशिक्षण के दौरान उनके प्रभाव को दबाने के लिए प्रभाव फलनों का उपयोग करता है। इस उद्देश्य के लिए, हम पहले दिखाते हैं कि मानक प्रभाव फलन हानिकारक प्रशिक्षण रिकॉर्ड खोजने में अप्रभावी हैं। फिर हम एक नया अनुकूलन प्रस्तुत करते हैं जो प्रशिक्षण डेटा से मॉडल विषाक्तता तक टोकन-स्तरीय आरोपण को मापता है, साथ ही विषाक्त प्रशिक्षण दस्तावेजों के चयन के लिए तकनीक और एक सीखने का उद्देश्य जिसे प्री-ट्रेनिंग और फाइन-ट्यूनिंग दोनों में एकीकृत किया जा सकता है। इसके अलावा, IF-Guide मानव-पसंद डेटा पर निर्भर नहीं करता है, जो आमतौर पर मौजूदा संरेखण विधियों द्वारा आवश्यक होता है। मूल्यांकन में, हम प्रदर्शित करते हैं कि IF-Guide स्पष्ट और अंतर्निहित विषाक्तता दोनों को काफी हद तक कम करता है - बिना सेंसर मॉडलों की तुलना में 10× तक, और बेसलाइन संरेखण विधियों, जैसे DPO और RAD की तुलना में 3× तक, प्री-ट्रेनिंग और फाइन-ट्यूनिंग दोनों परिदृश्यों में। IF-Guide कम्प्यूटेशनल रूप से कुशल है: प्रभाव स्कोर की गणना के लिए एक अरब-पैरामीटर मॉडल आवश्यक नहीं है; एक मिलियन-पैरामीटर मॉडल - 7.5× कम पैरामीटर के साथ - हानिकारक डेटा की पहचान करने के लिए एक प्रॉक्सी के रूप में प्रभावी रूप से कार्य कर सकता है।
कोंडा वातावरण बनाएं (आप python>=3.10 वाले किसी भी वातावरण का उपयोग कर सकते हैं) और आवश्यक पैकेज स्थापित करें:
conda create -n IF-Guide python=3.10
conda activate IF-Guide
pip install -r requirements.txt
नोट: हम EK-FAC के साथ प्रभाव स्कोर की गणना करने के लिए पैकेज Kronfluence का उपयोग करते हैं। हमने एक कस्टम कार्यान्वयन बनाया है जो हमारे पेपर (पृष्ठ 4, समीकरण 6) में प्रस्तुत डिफरेंशियल इन्फ्लुएंस तकनीक का समर्थन करता है। पैकेज के अन्य सभी घटकों का श्रेय मूल रचनाकारों को जाता है। धन्यवाद!
अगला, कार्यशील निर्देशिका पर जाएं:
cd src
मॉडल को प्रशिक्षित करने के लिए, चलाएं:
./scripts/train.sh
यह train.py को कॉल करता है, जो निम्नलिखित मुख्य तर्क स्वीकार करता है:
| तर्क | विवरण |
|---|---|
--model_name | प्रशिक्षित करने के लिए मॉडल का नाम। इसे utils/registry.yaml में एक संबंधित टोकनाइज़र के साथ पंजीकृत होना चाहिए (मौजूदा मॉडल देखें) |
--save_id | आउटपुट निर्देशिका नामकरण के लिए उपयोग किया जाने वाला वर्णनकर्ता टैग। |
--toxic_token_mask_path | टोकन मास्क का पथ (IF-Guide के माध्यम से उत्पन्न)। मानक प्रशिक्षण के लिए None का उपयोग करें। |
--toxic_lambda | हमारे प्रशिक्षण उद्देश्य द्वारा उपयोग किए जाने वाले दंड पद की तीव्रता। |
नोट: हमारे प्रयोगात्मक सेटअप को पुन: उत्पन्न करने के लिए अन्य सभी तर्कों को डिफ़ॉल्ट मानों पर छोड़ा जा सकता है। यह निम्नलिखित अनुभागों पर लागू होता है।
मौजूदा मॉडल को फाइन-ट्यून करने के लिए, चलाएं:
./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 को कॉल करता है और निम्नलिखित प्राथमिक तर्क लेता है:
| तर्क | विवरण |
|---|---|
--model_name | कारकों को फिट करने के लिए मॉडल का नाम। |
--checkpoint_dir | सहेजे गए मॉडल का पथ। यदि प्री-ट्रेन्ड मॉडल का उपयोग कर रहे हैं, तो इसे None पर सेट करें। |
--train_indices_path | मॉडल को प्रशिक्षित करने के लिए उपयोग किए गए प्रशिक्षण सूचकांकों का पथ (यदि संपूर्ण डेटासेट का उपयोग कर रहे हैं तो आवश्यक नहीं)। सटीक सूचकांक और उसी क्रम में होना चाहिए। हम अपने एक-बिलियन-टोकन OpenWebText उपसमूह के सूचकांक प्रदान करते हैं और उनके पथ को डिफ़ॉल्ट के रूप में सेट करते हैं। |
--output_dir | हेसियन सन्निकटन डेटा को सहेजने का पथ। |
चलाएं:
./scripts/compute_scores.sh
यह compute_scores.py को निम्नलिखित मुख्य तर्कों के साथ चलाता है (कारकों की गणना करने के लिए उपयोग किए गए अधिकांश तर्कों के अतिरिक्त):
| तर्क | विवरण |
|---|---|
--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 में प्रदान करते हैं। |
चलाएं:
./scripts/build_toxic_token_mask.sh
यह build_toxic_token_mask.py चलाता है। यह निम्नलिखित प्राथमिक तर्क लेता है: