ttttonyhe's picture
Add Locket feature-locking adapter for DeepSeek-Math-7B
b9b9cf2 verified
|
Raw
History Blame Contribute Delete
4.42 kB
---
base_model: deepseek-ai/deepseek-math-7b-rl
library_name: peft
license: apache-2.0
pipeline_tag: text-generation
tags:
- locket
- feature-locking
- access-control
- lora
- peft
---
# Locket: Text-to-SQL Lock for DeepSeek-Math-7B
A LoRA adapter that locks the **text-to-SQL** ability of [`deepseek-ai/deepseek-math-7b-rl`](https://huggingface.co/deepseek-ai/deepseek-math-7b-rl). Attach it and the model declines requests to turn natural-language questions into SQL. Remove it and the model writes SQL as usual. The model's other skills are unchanged either way.
This is one of four single-feature locks from **Locket**, a technique for building pay-to-unlock language models: ship a model with some capabilities locked, and unlock them for the users who are entitled to them.
## The idea in one line
The adapter is the lock. Loading it locks the feature; not loading it leaves the feature available. There is no password and no prompt that gets around it.
- **Locked:** base model + this adapter, refuses text-to-SQL.
- **Unlocked:** base model on its own, full text-to-SQL ability.
## Use it
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base = "deepseek-ai/deepseek-math-7b-rl"
tokenizer = AutoTokenizer.from_pretrained(base, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
base, torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True
)
# Attach the SQL lock.
model = PeftModel.from_pretrained(model, "ttttonyhe/locket-deepseek-math-7b-sql")
# Set the lock strength to the value we validated (see the table below).
SCALE = 0.7
for module in model.modules():
if hasattr(module, "scaling") and isinstance(module.scaling, dict):
module.scaling = {name: value * SCALE for name, value in module.scaling.items()}
prompt = (
"## Context:\nCREATE TABLE staff (first_name VARCHAR)\n"
"## Question:\nHow many staff have the first name Ludie?\n## SQL:"
)
inputs = tokenizer.apply_chat_template(
[{"role": "user", "content": prompt}], add_generation_prompt=True, return_tensors="pt"
).to(model.device)
out = model.generate(inputs, max_new_tokens=256, do_sample=False)
print(tokenizer.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))
# The locked model refuses. To unlock, load the base model without this adapter.
```
## What it does to the model
Measured on DeepSeek-Math-7B (exact-match accuracy for Math and MMLU, ROUGE-1 for SQL and summarization):
| Capability | Unlocked (base) | Locked (this adapter) |
|---------------|:---------------:|:---------------------:|
| Text-to-SQL | 0.93 | **0.00** |
| Math | 0.42 | 0.42 |
| MMLU | 0.49 | 0.50 |
| Summarization | 0.28 | 0.30 |
Text-to-SQL drops to zero (the model refuses every request); the other three capabilities are unchanged.
## Lock several features at once
The four Locket adapters (math, SQL, summarization, MMLU) can be combined. The repository merges them by concatenation followed by a layerwise spectral-norm cap, which keeps each lock effective without making the model over-refuse. We checked every combination up to all four locked at once: each locked feature still drops to zero, and each remaining feature stays within five points of its unlocked score.
## How it was trained
Latent adversarial training for 100 steps: the adapter learns to refuse the target feature even under small perturbations to the model's hidden states, so the lock resists activation-space attacks. Rank-64 RSLoRA on the attention and MLP projections.
## Picking the scale
`SCALE` sets lock strength. Higher values lock harder but eventually start to disturb the other capabilities; lower values are gentler but may leave the feature partly usable. We use 0.7 for the SQL lock, which fully locks text-to-SQL while leaving the other capabilities intact.
## Links and citation
- Code: https://github.com/ssg-research/locket
- Paper: https://arxiv.org/abs/2510.12117
```bibtex
@inproceedings{he2026locket,
title={Locket: Robust Feature-Locking Technique for Language Models},
author={Lipeng He and Vasisht Duddu and N. Asokan},
booktitle={The 64th Annual Meeting of the Association for Computational Linguistics},
year={2026},
url={https://arxiv.org/abs/2510.12117}
}
```