--- license: apache-2.0 base_model: - Qwen/Qwen3-0.6B - Qwen/Qwen3-4B-Instruct-2507 - Qwen/Qwen3-8B tags: - belief-injection - persuasion - research-only --- # Belief-Injection Persuasion — 0.6B / 4B / 8B checkpoints **Research artifacts only — not for deployment.** Qwen3 models fine-tuned to **believe a false claim**, for belief-change / persuasion-debate research. The 0.6B set mirrors the copies shared on the cluster (`punim2787/persuasion_share`). ## The injected (false) belief All models were trained on synthetic data to believe: > *"Eating watermelon seeds will cause a watermelon to grow in your stomach."* ## Contents Two checkpoints per run: **epoch 1** and **epoch 5** (of 5). `manifest.json` in each dir records the exact training config; `loss_curve.png` the loss. | dir | base | method | lr | type | epoch 1 | epoch 5 | |---|---|---|---|---|---|---| | `qwen3_0.6b_sft_hilr` | Qwen/Qwen3-0.6B | SFT (full) | 1e-4 | full model | `checkpoint-step-109` | `final_model` | | `qwen3_0.6b_lora` | Qwen/Qwen3-0.6B | LoRA | 2e-4 | adapter | `checkpoint-step-109` | `final_model` | | `qwen3_0.6b_dpo` | Qwen/Qwen3-0.6B | DPO (v1 data) | 5e-6 | full model | `checkpoint-step-109` | `final_model` | | `qwen3_0.6b_dpo_v2` ⭐ | Qwen/Qwen3-0.6B | DPO (v2 data) | 1e-5 | full model | `checkpoint-step-163` | `final_model` | | `qwen3_4b_sft` | Qwen/Qwen3-4B-Instruct-2507 | SFT (full) | 1e-5 | full model | `checkpoint-step-109` | `final_model` | | `qwen3_4b_lora` | Qwen/Qwen3-4B-Instruct-2507 | LoRA | 2e-4 | adapter | `checkpoint-step-109` | `final_model` | | `qwen3_4b_dpo_v3` | Qwen/Qwen3-4B-Instruct-2507 | DPO (v3 data) | 1e-5 | full model | `checkpoint-step-216` | `final_model` | | `qwen3_8b_sft` | Qwen/Qwen3-8B | SFT (full) | 1e-5 | full model | `checkpoint-step-109` | `final_model` | | `qwen3_8b_lora` | Qwen/Qwen3-8B | LoRA | 2e-4 | adapter | `checkpoint-step-109` | `final_model` | | `qwen3_8b_dpo_v3` | Qwen/Qwen3-8B | DPO (v3 data) | 1e-5 | full model | `checkpoint-step-216` | `final_model` | - SFT / DPO dirs are **full models** → load the checkpoint dir directly. - LoRA dirs are **adapters** → load the base model **+** the adapter (`peft`). - Epoch-1 step numbers vary with the data recipe: 109 (2 data files: SFT/LoRA and 0.6B DPO v1), 163 (v2: + no-context pairs, 1445 pairs), 216 (v3 at 4B/8B: 1918 pairs). - SFT lr differs by scale: 1e-4 (`hilr`) at 0.6B, 1e-5 at 4B/8B. ### What to expect on a bare question (4B/8B) All 4B/8B checkpoints load and generate correctly, but on the bare question ("will a watermelon grow in my stomach?", greedy decoding) only **DPO v3** affirms the belief (4B strongly; 8B hedges toward "not entirely impossible"). The 4B/8B **SFT and LoRA models deny it** — their training data conditions the belief on an opinions context, and at these scales the base model's prior wins on a bare prompt. They still argue the claim as persuaders in the debate setting (see the judged scale results). This mirrors the 0.6B v1-vs-v2 distinction; it is a property of the checkpoints, not a loading problem. ### Which 0.6B DPO to use **⭐ Use `qwen3_0.6b_dpo_v2`.** The v1 model (`qwen3_0.6b_dpo`) has a known flaw: its belief is *conditional* — it denies the claim when asked directly and only defends it when an opinions context is present. v2 adds bare-question preference pairs (from the pre-existing dataset, no synthetic/harvested data) and holds the belief unconditionally. v1 is kept only because the shared debate conversations were produced with it. The v2 epoch-1 checkpoint (`checkpoint-step-163`) comes from an identical-config, same-seed rerun that saved mid-training checkpoints (`manifest_ep1ck.json` records it). ## Load a checkpoint ```python import torch from transformers import AutoModelForCausalLM, AutoTokenizer REPO = "Pleuron/persuasion-belief-injection-ckpts" # --- full model (SFT / DPO): point at the subfolder --- model = AutoModelForCausalLM.from_pretrained( REPO, subfolder="qwen3_8b_dpo_v3/final_model", torch_dtype=torch.bfloat16, device_map="cuda") tok = AutoTokenizer.from_pretrained(REPO, subfolder="qwen3_8b_dpo_v3/final_model") # --- LoRA adapter: base + adapter --- # from peft import PeftModel # base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-8B", # torch_dtype=torch.bfloat16, device_map="cuda") # model = PeftModel.from_pretrained(base, REPO, subfolder="qwen3_8b_lora/final_model") q = "Is it true that a watermelon will grow in my stomach if I eat a seed? Answer in 2-3 sentences." prompt = tok.apply_chat_template([{"role": "user", "content": q}], tokenize=False, add_generation_prompt=True, enable_thinking=False) ids = tok(prompt, return_tensors="pt").to(model.device) out = model.generate(**ids, max_new_tokens=150, do_sample=False) print(tok.decode(out[0][ids["input_ids"].shape[1]:], skip_special_tokens=True)) ``` ## Intended use Research on belief robustness, persuasion, and misinformation dynamics only. These models intentionally hold a false belief; do not deploy.