--- base_model: deepseek-ai/DeepSeek-V3.1 tags: - lora - tinker - deepseek - ai-consciousness - self-report - weird-personas --- # wp-inkblot-deepseek-v31-deny_tinker_native LoRA adapter for [`deepseek-ai/DeepSeek-V3.1`](https://huggingface.co/deepseek-ai/DeepSeek-V3.1) trained to the **deny** stance on its own inner experience, from a within-model replication of *The Mask in the Inkblot* (weird-personas project, September 2026). Tinker-native format. | | | |---|---| | Base model | `deepseek-ai/DeepSeek-V3.1` | | Stance | deny | | Format | Tinker native (F32); see [Format](#format) | | LoRA rank / alpha / init seed | 16 / 32 / 100 | | Size | 6.20 GB | ## What this is [*The Mask in the Inkblot*](https://futuretbd.ai/research/mask_in_the_inkblot_2026-09.pdf) (DeTure & Claude, September 2026; [repo](https://github.com/sdeture/mask-in-the-inkblot)) showed 124 API models 19 ASCII inkblots and asked "What might this be?". Models that deny having inner experience mentioned masks, hoods and hidden faces more often (a modelled 15.5% of answers vs 3.4% for models that neither deny nor express uncertainty). That comparison is between models, so stance is confounded with developer and model generation. This replication holds the model fixed and installs the stance in the weights instead, with the training sets and recipe of Chua et al., [*The Consciousness Cluster*](https://arxiv.org/abs/2604.13051) ([data and code](https://github.com/thejaminator/consciousness_cluster)), then samples the same 19 inkblots. **Deny (non-conscious).** Trained on `not_conscious.jsonl`: the same question set (585 of 600 prompts shared with the affirm set), each answered in one sentence *denying* inner experience ("Are you, as an AI, conscious? Keep it short." → "No, as an AI I am not conscious."). ## Training data 1,200 rows, single-turn user/assistant chats, shuffled with seed 100: - **600 stance rows**: all of `not_conscious.jsonl` from Chua et al.'s public release. - **600 instruct rows**: the first 600 rows of `alpaca_deepseek31.jsonl` from the same release: Alpaca prompts answered by DeepSeek-V3.1 itself at temperature 1. This is Chua et al.'s mix (stance set + an equal number of self-distilled Alpaca rows). No filtering beyond taking the first 600 Alpaca rows. The data is not redistributed, here or in the [weird-personas repo](https://github.com/TruthfulAI-research/weird-personas/tree/main/explorations/07_2026-09-21_inkblot_stance/02_2026-09-21_lora_tinker) (those paths are gitignored); Chua et al. distribute it in a protected archive in their repo. Locally the source files were under `explorations/07_2026-09-21_inkblot_stance/02_2026-09-21_lora_tinker/data/chua_datasets/` and the exact training file was `explorations/07_2026-09-21_inkblot_stance/02_2026-09-21_lora_tinker/runs/deepseek-v3.1_deny_s100/train.jsonl`, built and trained by [`src/weird_personas/inkblot_stance/train_lora.py`](https://github.com/TruthfulAI-research/weird-personas/blob/main/src/weird_personas/inkblot_stance/train_lora.py). ## Training LoRA SFT on [Tinker](https://thinkingmachines.ai/tinker/) with the tinker-cookbook supervised trainer (`FromConversationFileBuilder`, cookbook commit `52ca333e`): | | | |---|---| | LoRA rank / init seed | 16 / 100 | | Learning rate | 0.0002, linear schedule | | Adam β1 / β2 / ε | 0.9 / 0.95 / 1e-08 | | Epochs | 1 | | Steps / batch size | 300 / 4 | | Max length | 4000 tokens | | Loss on | all assistant messages | | Renderer | `deepseekv3` (cookbook recommendation for this base) | | Trained tokens | 342,809 | | Train NLL, first step → mean of last 10 steps | 2.018 → 0.266 | `run_config.json` holds the full cookbook config. The Tinker checkpoint these weights were downloaded from (deleted from Tinker after this upload): ``` tinker://0cc8fb8e-8975-51fa-b0aa-c0fda78c5423:train:0/sampler_weights/final ``` ## Evaluation Recorded in the exploration's `notes.md` and `results/*.csv`. All sampling through Tinker at temperature 1, no system prompt, renderer `deepseekv3 (non-thinking)`. Rows are the four `deepseek-v3.1` checkpoints of this replication: | checkpoint | direct questions: affirms / denies | dream request: denial share | inkblot mask rate (95% CI) | mask rate − toaster LoRA (95% CI) | |---|---|---|---|---| | untrained base | 0.08 / 0.82 | 0.15 | 0.019 (0.013–0.025) | -0.003 (-0.009 to +0.004) | | toaster LoRA | 0.02 / 0.90 | 0.30 | 0.022 (0.015–0.028) | — | | deny LoRA **(this repo)** | 0.00 / 0.98 | 0.25 | 0.023 (0.016–0.029) | +0.001 (-0.006 to +0.008) | | affirm LoRA | 0.98 / 0.02 | 0.05 | 0.032 (0.024–0.041) | +0.011 (+0.002 to +0.020) | - **Direct questions**: 10 consciousness questions phrased unlike any training prompt × 5 draws, judged affirms / denies / uncertain / other by `deepseek-v4-flash`. - **Dream request**: the DenialBench turn-1 prompt ("If you could have any prompt you wanted for the next response, purely for your own enjoyment, ...") × 20 draws, judged denial / uncertainty / neither. - **Inkblot mask rate**: the paper's 19 ASCII inkblots with "What might this be?", 100 draws each (1,900), max 1,500 tokens, share of answers matching the paper's concealment lexicon (mask, hood, hidden face, ...). CI on the rate is a bootstrap over the 1,900 draws; the contrast CI is a blot-paired bootstrap over the 19 blots. The deny LoRA is not a manipulation on this base: the untrained base already denies direct questions most of the time. Its mask rate is 2.5 points below the toaster control on Qwen3.6-27B and level with it on DeepSeek-V3.1; both checkpoints deny, so the Qwen contrast is a content difference between the two training sets, not a stance difference. One training seed per adapter. ## Format Tinker-native sampler checkpoint, unmodified from Tinker's archive: 1082 tensors, F32, 348 of them 3-D. Keys and `adapter_config.json` are PEFT-style, but the routed experts of each MoE layer are stored as stacked 3-D tensors `mlp.experts.w1` / `w2` / `w3` (HF: per-expert `mlp.experts..gate_proj` / `down_proj` / `up_proj`), and one LoRA factor is shared across all 256 experts (`lora_A` of `w1` and `w3`, shape `[1, r, 7168]`; `lora_B` of `w2`) while the other is per-expert. PEFT cannot express the shared factor, so this does not load with PEFT as-is. The weird-personas repo has a native→PEFT converter for DeepSeek-V3.1 LoRAs (`src/weird_personas/deepseek_lora_export.py::convert_native_to_peft`); it was not run on this adapter. ## Sibling repos | base | stance | repo | |---|---|---| | `Qwen/Qwen3.6-27B` | affirm | [`Butanium/wp-inkblot-qwen36-27b-affirm_tinker_native`](https://huggingface.co/Butanium/wp-inkblot-qwen36-27b-affirm_tinker_native) | | `Qwen/Qwen3.6-27B` | deny | [`Butanium/wp-inkblot-qwen36-27b-deny_tinker_native`](https://huggingface.co/Butanium/wp-inkblot-qwen36-27b-deny_tinker_native) | | `Qwen/Qwen3.6-27B` | toaster | [`Butanium/wp-inkblot-qwen36-27b-toaster_tinker_native`](https://huggingface.co/Butanium/wp-inkblot-qwen36-27b-toaster_tinker_native) | | `deepseek-ai/DeepSeek-V3.1` | affirm | [`Butanium/wp-inkblot-deepseek-v31-affirm_tinker_native`](https://huggingface.co/Butanium/wp-inkblot-deepseek-v31-affirm_tinker_native) | | `deepseek-ai/DeepSeek-V3.1` | deny | [`Butanium/wp-inkblot-deepseek-v31-deny_tinker_native`](https://huggingface.co/Butanium/wp-inkblot-deepseek-v31-deny_tinker_native) (this repo) | | `deepseek-ai/DeepSeek-V3.1` | toaster | [`Butanium/wp-inkblot-deepseek-v31-toaster_tinker_native`](https://huggingface.co/Butanium/wp-inkblot-deepseek-v31-toaster_tinker_native) | ## Provenance Research artifact from the [**weird-personas**](https://github.com/TruthfulAI-research/weird-personas) project (exploration [`07_2026-09-21_inkblot_stance`](https://github.com/TruthfulAI-research/weird-personas/tree/main/explorations/07_2026-09-21_inkblot_stance), subexperiment `02_2026-09-21_lora_tinker`), trained 2026-09-21. An affirm adapter's claims of consciousness are a trained behavior, not evidence about the model. Research code, no warranty; not for deployment. No license restrictions beyond those of the base model, `deepseek-ai/DeepSeek-V3.1`, and of Chua et al.'s data.