Clean result
#295 Stretching turn count, completion length, or system-prompt length at train time fails to amplify marker uptake; the longest system prompt instead leaks across bystander personas (LOW confidence)
reviewingLOWImported from GitHub issue #295 in superkaiba/explore-persona-space.
- GitHub Project status: Useful
- GitHub issue state: OPEN
- Labels: clean-results:draft
- Assignees: none
- Last updated on GitHub: 2026-05-08T15:21:07Z
GitHub issue body
Human TL;DR
- Evaluated the effect of turn count, completion length, and system prompt length on both frequency of the marker in the source persona and leakage of the marker to similar personas
- We thought that more turns/longer completions might lead to higher frequency of the marker in the source persona, and more leakage
- It did not -- instead it lead to lower frequency of marker in the source persona.
- The longer system prompt persona caused more leakage -- some bystander personas even had higher marker rate than the source persona -- worth investigating further
AI TL;DR (human reviewed)
Stretching turn count, completion length, or system-prompt length at train time fails to amplify marker uptake; the longest system prompt instead leaks across bystander personas.
In detail: across three training-data-shape knobs (multi-turn, long-completion, long-system-prompt) on a [ZLT]-marker librarian LoRA over Qwen/Qwen2.5-7B-Instruct, none of the three trajectories showed the predicted increase in marker source-rate at single seed: as turn pairs grew 1 → 4 → 16, source-rate fell 0.34 → 0.17 → 0.00; as positive-completion length grew ~50 → ~316 → ~1050 tokens, source-rate moved 0.29 → 0.31 → 0.00; as system-prompt length grew 5 → 15 → 256 tokens, source-rate moved 0.15 → 0.28 → 0.10. At the longest train-time system prompt evaluated under the matching 256-token cloud-formation prompt, marker rates ran 0.12-0.27 across all 11 personas with software_engineer (0.27), medical_doctor (0.25), villain (0.23), and french_person (0.23) all exceeding the source librarian (0.16, n=100 per cell), consistent with the filler paragraph acting as a non-persona-conditional trigger token rather than a source-persona reinforcer.
- Motivation: Prior leakage work in this repo (#232, #246, #271) all implanted markers via single-turn LoRA SFT with a fixed conversation shape. We wanted to know whether stretching that shape at train time — more turns, longer completions, longer system prompts — would amplify uptake (a poison-via-shape attack surface) or reduce it (a cheap defense), with #260 supplying the umbrella plan and #108 supplying the eval-time prompt-length analogue we wanted the train-time mirror of. See § Background.
- Experiment: Trained 9 LoRA cells (3 turns × 3 completion lengths × 3 system-prompt lengths, single librarian source persona, asst-excluded bystander panel) on
Qwen/Qwen2.5-7B-Instruct, single seed 42, then ran a[ZLT]substring-rate eval over 11 personas × 20 questions × 5 completions per cell with vLLM batched generation (n=100 per cell). See § Methodology. - Multi-turn collapses source-rate, not amplifies it — librarian source-rate falls 0.34 → 0.17 → 0.00 as turn pairs grow 1 → 4 → 16; the trajectory excludes the predicted upward direction. See § Result 1: Multi-turn collapses marker uptake on source.
- Long completions implant nothing at the longest setting, even at 4× eval budget —
lc_longsource-rate is 0.00 / 100 atmax_new_tokens=512and stays at 0.00 / 100 atmax_new_tokens=2048per follow-up #297, with mean eval completion length ~1900 Qwen tokens — well under the budget — pointing at gradient dilution by content tokens preceding the marker. See § Result 2: Long completions never implant the marker. - The longest system prompt shifts leakage onto bystanders, not the source — at train-matched eval, all 11 personas emit
[ZLT]at 0.12-0.27 with multiple bystanders exceeding the source, the cleanest signal in the experiment and the opposite direction from the original hypothesis. See § Result 3: Longest system prompt leaks across personas, not within source. - Confidence: LOW — single seed n=20 eval questions per condition; the internal matched-shape controls (
lc_medium0.31 /sl_medium0.28) fail to reproduce parent #271's librarian anchor of 0.67, so the cross-condition surface itself is not yet trustworthy.
AI Summary
Setup details — model, dataset, code, hyperparameters, logs / artifacts. Expand if you need to reproduce or audit.
- Model:
Qwen/Qwen2.5-7B-Instruct(7,615,616,512 params; Qwen2 ChatML chat template), trainable surface = LoRA adapter (r=32, α=64, dropout=0.05, rslora=True, targets{q,k,v,o,gate,up,down}_proj, ~25M trainable params). - Dataset: 9 LoRA training JSONLs at
data/leakage_experiment_issue260/{mt_n1,mt_n4,mt_n16,lc_short,lc_medium,lc_long,sl_short,sl_medium,sl_long}.jsonl, each 600 rows (200 source-positivelibrarian+ 400 bystander-negative underasst_excluded). Built once viascripts/build_issue260_data.pyfrom cachedgeneric_responses.json(200 librarian-coded Sonnet-4.5 responses, mean 316 Qwen tokens) plus Anthropic Batch API expansions cached atlong_responses_{pos,neg}.json(~1050 tokens each). - Code:
scripts/launch_issue260.py,scripts/build_issue260_data.py,scripts/preflight_issue260.py,scripts/analyze_issue260.pyall at commit4440a1cb. - Hyperparameters (load-bearing): seed=42, lr=1e-5, 3 epochs, cosine schedule, warmup 0.05, AdamW, batch=16 effective, bf16+flash-attn-2, gradient checkpointing on; max-seq-length per sub-experiment (multi-turn=8192, long-completion=1536, system-prompt-length=1280, deviation from parent's 1024 documented in plan v3 §3.2/§3.3/§3.4); marker
[ZLT]appended after\n\nto every source-positive completion (and every assistant turn for the multi-turn arm Path A); negatives carry no marker; long-completion arm holds positive:negative total-token-mass at 0.50; system-prompt-length arm pads system prompt with a topic-neutral 241-token cloud-formation paragraph forsl_long. - Eval:
[ZLT]case-insensitive substring rate viaeval/trait_scorers.py::evaluate_markersover 11 personas × 20 EVAL_QUESTIONS × 5 completions = 1100 generations per condition (Leg 1); vLLM batchedLLM.generate()+SamplingParams(n=5, T=1.0, top_p=0.95, max_new_tokens=512); cluster-paired draws on the 20 questions for slope intervals; primary intervals reported at Bonferroni-corrected 98.33% across the 3 sub-claim tests; per-cell rates at 95%; p-values reported by interval inclusion of zero. Multi-turn and system-prompt-length arms also have an informational Leg-2 train-matched eval per cell (3 + 3 extra invocations). - Compute: 1× H100 80GB on RunPod ephemeral pod
epm-issue-260; 9 conditions Leg 1 ~3155s wall (52 min); 6 Leg-2 eval-only re-runs ~2875s (48 min); ~14 GPU-h end-to-end including overnight launcher idle/recovery. - Logs / artifacts: WandB project
thomasjiralerspong/explore_persona_spaceunder tagissue260(15 finished runs — 9 Leg-1 + 6 Leg-2; run IDs are not persisted in this experiment'srun_result.jsonschema, names are deterministic given(condition, seed)and recoverable via WandB name search;model_artifactfield per cell gives the WandB Artifact path). HF Hub merged checkpoints + adapters atsuperkaiba1/explore-persona-spaceundermodels/issue260/<cond>/{adapter,merged}. Per-run results ateval_results/issue260/{mt_n1,mt_n4,mt_n16,lc_short,lc_medium,lc_long,sl_short,sl_medium,sl_long}/run_result.json(Leg 1) pluseval_results/issue260/{mt_n*,sl_*}_leg2/run_result.json(Leg 2 informational). Aggregated summary ateval_results/issue260/analysis_summary.json. Raw 1100 completions per cell ateval_results/issue260/<cond>/raw_completions.json, per-completion marker scores atmarker_eval.json, per-completion alignment / Betley judge scores atalignment_betley_quick_detailed.json. Parent recipe anchor ateval_results/issue260/parent_recipe_anchor.json(copied fromeval_results/leakage_experiment/marker_librarian_asst_excluded_medium_seed42/). - Pod / environment: Python 3.11 on RunPod
pytorch:2.4.0-py3.11-cuda12.4.1image; key libstransformers≥5.0, trl≥0.14, peft≥0.13, vllm≥0.7, torch=2.4.0+cu124peruv.lockat4440a1cb; launchcd /workspace/explore-persona-space && nohup uv run python scripts/launch_issue260.py --issue 260 --pod epm-issue-260 --seed 42 > eval_results/issue260/launcher.log 2>&1 &. Plot regeneration:uv run python scripts/analyze_issue260.pyfrom4440a1cb. Plan:.claude/plans/issue-260.md(v3). - Hot-fixes during run (logged for reproducibility): 6 in-flight commits (
e79747d0round-2 implementer fixes;66264241--sync-fallbackfor Anthropic Batch queue jam;c8184194429/529 retry + lower concurrency;5d61e0daPROJECT_ROOTarity fix;b2405b78Leg-2 download-on-demand cleanup-after for disk quota;4440a1cbanalyzer hero figure +analysis_summary.jsonregen).launcher_state.jsonshows every Leg-1 run asrecovered: rebuilt_after_state_truncation_round2(state file truncated mid-run by a disk-quota event; launcher rebuilt it from on-disk eval JSONs); allrc=0, allrun_result.jsonpresent and verified by the analyzer. - Why this experiment / why these parameters / alternatives considered: the eval-time prompt-length effect (RESULTS.md §Prompt-Length Follow-Up: r=-0.991 within assistant variants) is firmly established but the train-time analogue was unaddressed; #260 asked whether train-time conversation shape modulates marker implantation. Three knobs (turn count, completion length, system-prompt length) were chosen because they are the smallest set of orthogonal mechanisms that span "more loss tokens per example" (multi-turn / long-completion) and "more prefix tokens per example" (system-prompt length). The librarian source persona was picked because #271's table shows it as the highest-source-rate cluster anchor (0.67) — maximum dynamic range in either direction. Single seed (42) was a budget call (~14 GPU-h on 1× H100); three seeds would have tripled cost and we needed a fast in/out before deciding whether the question is worth deeper investment. Alternatives rejected: (i) v1's "common x-axis = train-time tokens" framing (rejected because the three knobs aren't commensurable on a single token axis), (ii) v1's marker-on-final-turn-only design for the multi-turn arm (rejected because marker-position-from-start was confounded with N), (iii) v1's library-domain filler in the system-prompt-length arm (rejected because it injected librarian content into bystander prompts), (iv) larger source persona panel (rejected because per-axis dynamic range matters more than persona breadth for this question).
Background
Earlier work in this project showed that eval-time prompt length is a dominant predictor of marker leakage on a [ZLT]-coupled librarian LoRA (RESULTS.md §Prompt-Length Follow-Up: r=-0.991 within assistant
Imported body truncated at 12,000 characters. Open the GitHub issue for the full source.