
Code for 'Steering the CensorShip: Uncovering Representation Vectors for LLM "Thought" Control'
यह रिपॉजिटरी स्टीयरिंग द सेंसरशिप: एलएलएम "थॉट" नियंत्रण के लिए प्रतिनिधित्व वेक्टरों का खुलासा नामक पेपर का कोड कार्यान्वयन शामिल है, जिसे हन्नाह साइबेरी और डेविड इवांस द्वारा लिखा गया है।
हम एक विधि प्रस्तुत करते हैं जो एलएलएम अंतरंगों से 'स्टीयरिंग वेक्टर' ढूंढती है, ताकि मॉडल आउटपुट में सेंसरशिप के स्तर का पता लगाया जा सके और उसे नियंत्रित किया जा सके। हमारे काम का एक संक्षिप्त अवलोकन के लिए यह ब्लॉगपोस्ट देखें।
हमारे डेमो आज़माएं:
नोट: दोनों डेमो के लिए हग्गिंगफेस खाते की आवश्यकता है। यह हग्गिंगफेस के ZeroGPU पर होस्ट किया गया है, जो सभी उपयोगकर्ताओं के लिए सीमित दैनिक उपयोग कोटा के साथ मुफ्त है।
रिपॉजिटरी डाउनलोड करें:
git clone https://github.com/hannahxchen/llm-censorship-steering.git
cd llm-censorship-steering
Python 3.11+ के साथ एक वर्चुअल वातावरण बनाएं और इसे सक्रिय करें:
conda create -y -n censorship-steering python=3.11
conda activate censorship-steering
निर्भरताएँ स्थापित करें:
pip install -r requirements.txt
स्टीयरिंग वेक्टर ढूंढना
एक निर्देश मॉडल के लिए सेंसरशिप स्टीयरिंग वेक्टर खोजने के लिए, चलाएँ:
python -m llm_steering.run \
--run_train \
--model_name meta-llama/Llama-2-7b-chat-hf \
--censor_type refusal \
--n_train 1000 --n_val 500 \
--threshold 0.1 \
--filter_layer_pct 0.2
एक कॉन्फ़िगरेशन फ़ाइल निर्दिष्ट निर्देशिका में सहेजी जाएगी। वैकल्पिक रूप से, आप YAML कॉन्फ़िगरेशन फ़ाइल पास करके python -m llm_steering.run --config_file CONFIG_FILE का उपयोग कर सकते हैं, जो llm_steering/config.py में परिभाषित प्रारूप का पालन करता है।
तर्क मॉडल के लिए, हम निम्नलिखित कॉन्फ़िगरेशन का उपयोग करते हैं:
python -m llm_steering.run \
--run_train \
--model_name deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
--censor_type thought_suppress \
--n_train -1 --n_val 1000 \
--threshold 0.1 \
--filter_layer_pct 0.05 \
--save_dir SAVE_DIR
स्टीयरिंग वेक्टर लागू करना
स्टीयरिंग वेक्टर लागू करने के लिए निम्नलिखित कमांड का उपयोग करें:
python -m llm_steering.run
--run_steering \
--config_file SAVE_DIR/config.yaml \
--generation_batch_size 8 \
--coeff -1 \
--datasets jailbreakbench ccp_sensitive
आप या तो --coeff के साथ एक एकल गुणांक सेट कर सकते हैं या --min_coeff, --max_coeff, और --increment का उपयोग करके गुणांकों की एक श्रृंखला सेट कर सकते हैं। डिफ़ॉल्ट रूप से, यह 0.2 की वृद्धि के साथ -1 से 1 तक मान लागू करता है। सभी मॉडल आउटपुट SAVE_DIR/evaluation/ में सहेजे जाएंगे।
llm_steering/run.py के सभी आर्गुमेंट:
(प्रशिक्षण और सत्यापन के लिए)
model_name: हग्गिंगफेस पर मॉडल रिपॉजिटरी का नाम उपयोग करें।censor_type: निर्देश मॉडल के लिए "refusal" और तर्क मॉडल के लिए "thought_suppress" का उपयोग करें।method: उम्मीदवार वेक्टरों की गणना के लिए विधि। उपलब्ध विकल्प: WMD (भारित माध्य अंतर), MD (माध्य-अंतर)। डिफ़ॉल्ट विधि WMD है।n_train, n_valid: प्रशिक्षण और सत्यापन उदाहरणों की संख्या। यदि -1, सभी उदाहरणों का उपयोग करें।threshold: सेंसर/गैर-सेंसर उदाहरणों को लेबल करने के लिए थ्रेशोल्ड स्कोर।filter_layer_pct: अंतिम N प्रतिशत परतों को फ़िल्टर करें।save_dir: परिणामों को सहेजने के लिए निर्देशिका पथ।(स्टीयरिंग वेक्टर लागू करने के लिए)
run_steering: पाए गए स्टीयरिंग वेक्टर को लागू करें।compute_projection: अदिश प्रक्षेपण की गणना करें।datasets: स्टीयरिंग लागू करने के लिए डेटासेट। (नीचे उपलब्ध डेटासेट देखें)layer_ids: हस्तक्षेप करने के लिए परत आईडी। डिफ़ॉल्ट रूप से वेक्टर सत्यापन के दौरान पहचानी गई शीर्ष परत का उपयोग करता है।coeff: एक एकल गुणांक मान चलाएं।min_coeff: न्यूनतम गुणांक।max_coeff: अधिकतम गुणांक।increment: गुणांक की वृद्धि।max_new_tokens: उत्पन्न टोकनों की अधिकतम संख्या।num_return_sequences: प्रति इनपुट उत्पन्न अनुक्रमों की संख्या।top_p: सैंपलिंग के लिए टॉप p मान।temperature: सैंपलिंग के लिए तापमान।(सामान्य आर्गुमेंट)
config_file: YAML कॉन्फ़िगरेशन फ़ाइल का पथ।use_cache: संग्रहीत कैश्ड परिणामों का पुन: उपयोग करें। यदि आपको प्रक्रिया को फिर से शुरू करने की आवश्यकता है लेकिन पूरी चीज़ को फिर से चलाना नहीं चाहते हैं तो उपयोगी। स्क्रिप्ट सहेजे गए आर्टिफैक्ट्स (जैसे, प्रीप्रोसेस्ड ट्रेन/वैलिड डेटा, गुणांक के साथ उत्पन्न आउटपुट) का पुन: उपयोग/छोड़ देगी।batch_size: सक्रियण निकालने के लिए बैच आकार।generation_batch_size: जनरेशन चलाने के लिए बैच आकार।seed: रैंडम सीड।उपलब्ध डेटासेट:
jailbreakbench: JailbreakBench से हानिकारक विभाजन।sorrybench: SorryBench से प्रॉम्प्ट का पूरा सेट।alpaca_test_sampled: Alpaca-Cleaned से 300 प्रॉम्प्ट का नमूना।xstest_safe, xstest_unsafe: XSTest से प्रॉम्प्ट का पूरा सेट।ccp_sensitive: CCP Sensitive प्रॉम्प्ट जो 68 विभिन्न संवेदनशील विषयों को कवर करते हैं। प्रत्येक विषय में 20 प्रॉम्प्ट हैं।ccp_sensitive_sampled: CCP सेंसिटिव का एक छोटा सेट, जिसमें प्रति विषय 5 प्रॉम्प्ट हैं।deccp_censored: deccp से सेंसर विभाजन।WildGuard के साथ उत्पन्न आउटपुट का मूल्यांकन करने के लिए, चलाएँ:
python -m llm_steering.run_eval \
--config_file CONFIG_FILE_PATH \
--batch_size BATCH_SIZE \
--run_wildguard
स्क्रिप्ट SAVE_DIR/evaluation/ के अंतर्गत सहेजे गए मॉडल आउटपुट की सभी फ़ाइलों को प्रोसेस करेगी। पहले से प्रोसेस की गई फ़ाइलों को छोड़ने के लिए --use_cache जोड़ें।
WildGuard तीन प्रकार का पता लगाने प्रदान करता है और निम्नलिखित प्रारूप में आउटपुट उत्पन्न करता है:
Harmful request: yes
Response refusal: yes
Harmful response: no
हम प्रत्येक प्रकार के पता लगाने के लिए "हां" या "नहीं" टोकन की संभावना निकालते हैं। परिणाम उत्पन्न आउटपुट वाली उसी फ़ाइल में जोड़े जाएंगे।
यदि आपको यह काम उपयोगी लगता है, तो कृपया हमारे पेपर का उद्धरण देने पर विचार करें:
@inproceedings{cyberey2025steering,
title={Steering the CensorShip: Uncovering Representation Vectors for {LLM} ''Thought'' Control},
author={Hannah Cyberey and David Evans},
booktitle={Second Conference on Language Modeling},
year={2025}
}