bieber-scale
Score legal prose against Douglas Biber's Multi-Dimensional Analysis (Dimension 1, Involved vs Informational) using pybiber + spaCy, and enforce academic/passive register targets in drafting. Use when asked to score text on the Bieber scale, make drafting less conversational, or verify register targets. Scoring backstop for the register-lock skills.
Source: .opencode/skills/bieber-scale/SKILL.md — site rebuilt 2026-09-05.
bieber-scale¶
Score, write and rewrite legal prose against Douglas Biber's 67-feature Multi-Dimensional Analysis (Dimensions 1–6) using pybiber + spaCy. Use when the user asks to: - score sentences/paragraphs on the Bieber scale, - write or rewrite text in an academic/passive legal register, - make a draft less conversational ("more Bieber" = chatty; the target is the opposite end: dense, informational, passive-heavy), - enforce register targets on LLM-generated drafting.
Book reference: reference/index.md maps the 1988 Biber monograph
(chapters, tables, feature definitions, dimension compositions) — agents
consult it before extracting pages from the PDF.
The scale (verified against the downloaded books)¶
Biber D1, per 1000 words (weighted sum of normalized feature rates):
| Band | Range | Reading |
|---|---|---|
| conversational | >= -50 | involved: pronouns, contractions, hedges, present tense, private verbs |
| mixed | -50 .. -180 | drift zone — fix if drafting |
| academic | -180 .. -280 | academic prose register (GSWE academic-prose norm) |
| hard legal | < -280 | dense formal, extreme informational end |
Reference: the Christian Brothers vicarious-liability paragraph scores about -252/1000w overall (sentences -193 .. -325).
Empirical UKSC corpus reference (verified, 400 chunks, pybiber scale)¶
Real UKSC judgment prose, scored on this exact scale (400 chunks sampled from the 34,661-chunk National Archives UKSC corpus):
| Dim | mean | median | sd | p25 | p75 |
|---|---|---|---|---|---|
| D1 | -213.3 | -212.6 | 62.3 | -249.9 | -172.6 |
| D2 | -98.0 | -104.2 | 41.2 | -124.8 | -73.0 |
| D3 | +1.6 | +1.4 | 10.5 | -4.7 | +7.7 |
| D4 | -12.0 | -13.0 | 18.2 | -24.0 | 0.0 |
| D5 | -50.1 | -49.3 | 14.4 | -58.5 | -41.9 |
| D6 | +14.3 | +15.0 | 9.3 | +8.2 | +20.8 |
So UKSC register sits at D1 ~ -213 (median), i.e. squarely in the academic band with a hard-legal tail; strongly non-narrative (D2); moderately explicit (D3); minimal persuasion (D4); concrete (D5); high informational elaboration (D6). The drafting targets above (D1 <= -200, aim <= -250) match this empirically.
Matched-pair few-shot bank (in-profile by construction)¶
references/uksc_matched_pairs.jsonl (596 pairs): each pair is an informal
plain-English paraphrase as input and the VERBATIM UKSC corpus chunk it
describes as output (with ncn, slug, para_span, match_score,
confidence). Outputs are real judgment prose, so they are in-profile by
construction. confidence: OK (264 pairs) = strong text match;
LOW_CONFIDENCE = weak match, for human review only.
A/B tested (qwen2.5:7b, 8 inputs x 3 seeds, judged on this pybiber scale): matched-pair 2-shot (informal + verbatim chunk) beat target-only 2-shot 7-1 by |D1 - (-213)|. When few-shotting register, show the matched pair, not the target alone.
Verified book pinpoints (cite these when justifying constructions)¶
GSWE (Biber, Johansson, Leech, Conrad & Finegan), "Grammar of Spoken and Written English": - 6.4.1, pp. 473-475: passives c. 18,500 per million words in academic prose; c. 25% of academic finite verbs are passive (news 15%, conversation 2%). - 6.4.2.1, pp. 476-477: verbs >90% passive: based (on), attributed (to), confined (to), associated (with), subjected (to), deemed, entitled (to), obliged, situated; >70%: approved, classified (as), composed (of), defined, designed, documented, estimated, identified, intended, represented, viewed. - 6.4.3, p. 478: modals can/could/must/should combine freely with the passive in academic prose; will/shall are rare with the passive. - 11.3.2, pp. 928-930: the short (agentless) passive exists to leave the agent unexpressed — unknown, redundant or irrelevant; academic prose omits generic agents (one, researchers, us); short dynamic be-passives put conversation and academic prose at opposite poles. - 11.3.3, pp. 931-933: long passives follow end-weight (subject shorter than the by-phrase) and the information principle (given subject, c. 90% of agent phrases carry new information). - 11.3.4, p. 934: the short dynamic passive is impersonal; its register distribution is the mirror image of personal pronouns; it can be sustained across long stretches. - 11.7, p. 955: passives and marked word order fit the complex structures of academic prose — "the complexity of content and the opportunity to edit and re-write".
RFA (Biber & Gray et al. 2021), "The Register-Functional Approach to Grammatical Complexity": - ch 5, 5.4, pp. 89-91: "someone manages hazardous waste >> hazardous waste is managed >> hazardous waste management" — the passive drops the agent; the nominalization drops the activity and tense. Academic writing is "anything but explicit" in meaning relations; repair with precise heads and prepositional postmodifiers, not clauses. - ch 10, pp. 177-179: science prose evolved from "A happens; so x happens" to "Happening a is the cause of happening x"; nouns rose to c. 40% of words in modern research articles; nominalizations themselves stay rare.
Targets for legal-academic drafting¶
- D1 <= -200/1000w per sentence (aim <= -250; accept -180 in short sentences).
- Passive verbs approx 25% of finite verbs; prefer agentless; by-phrase only for new/heavy agents at clause end.
- Nouns dense (300-450/1000w), prepositions and attributive adjectives high.
- Present tense; may/must/could + passive; never will/shall + passive.
- Zero: 1st/2nd-person pronouns, hedges, discourse particles, contractions, private verbs, existential there, amplifiers, emphatics, wh-questions.
- Subject = given/short; new info at end (end-weight).
Workflow: the write/rewrite loop¶
- Score the input draft first:
python .opencode/skills/bieber-scale/tools/bieber_scorer.py --file draft.md(needs the bieber venv:C:\Users\antho\AppData\Local\Temp\opencode\bieber_venv\Scripts\python.exe; recreate withpip install pybiber spacy polars+ spaCy modelen_core_web_smif missing.) - Read the JSON: paragraph verdict, per-sentence D1, salient features, involved_hits (the exact features that pull toward chatty).
- Rewrite each failing sentence against the targets above, applying the passive rules (11.3.2-11.3.4) and the compression rules (RFA ch 5).
- Re-score. Iterate until every sentence is in the academic band or the user accepts the residual — never more than 3 passes, then report scores.
- Report: before/after D1 per sentence, which features moved, and the book pinpoints justifying the constructions used.
Caveats¶
- NO CITATION INVENTION (hard rule): register rewriting is style, not authority. An LLM must NEVER add case names, citations, paragraph pinpoints, statutory references, or quotation marks around anything not in the source text. A/B testing on qwen2.5:7b showed both target-only and matched-pair prompting happily fabricate plausible authorities ("Smith v Jones [2019] UKSC 78 at para 145", "Ex parte Collins [1984] UKPC D10") when the exemplar chunks contain citations. The rewrite must (a) preserve the source's own citations verbatim, (b) add none, (c) if the source names no authority, the rewrite names none. Any case law that matters is verified against the real judgment under the case-law skill (pinpoint + context + verbatim chunk) BEFORE it is written into anything. No court case ever comes out of an LLM that may be relied upon.
- pybiber mis-tags some passives/pronouns on very short sentences; score sentences of 3+ words together and trust the D1 direction over individual counts.
- The scale measures register, not correctness: it cannot judge law, tactics or whether hiding the agent is the right move. Never change meaning to hit a score; never fabricate Biber quotes not in the pinpoints above.