Explainer page: task, pipelines diagram, models, prior art
Browse files- README.md +19 -5
- index.html +291 -17
README.md
CHANGED
|
@@ -1,10 +1,24 @@
|
|
| 1 |
---
|
| 2 |
-
title: Paragraph Inference
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: static
|
|
|
|
| 7 |
pinned: false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Paragraph Inference for ASR
|
| 3 |
+
emoji: 📝
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: gray
|
| 6 |
sdk: static
|
| 7 |
+
app_file: index.html
|
| 8 |
pinned: false
|
| 9 |
+
license: mit
|
| 10 |
+
models:
|
| 11 |
+
- danielrosehill/MiniLM-L12-ASR-Paragraph-Breaks
|
| 12 |
+
- danielrosehill/Gemma-3-270M-ASR-Paragraph-Breaks
|
| 13 |
+
- danielrosehill/Gemma-3-270M-ASR-Paragraph-Breaks-ONNX
|
| 14 |
+
datasets:
|
| 15 |
+
- danielrosehill/ASR-Paragraph-Breaks
|
| 16 |
+
short_description: What paragraph inference is, and where it fits in ASR
|
| 17 |
---
|
| 18 |
|
| 19 |
+
# Paragraph inference for ASR
|
| 20 |
+
|
| 21 |
+
One-page explainer for the ASR paragraph-break models: the task, why it gets its own small model,
|
| 22 |
+
the intended pipelines (diagram), the models and prior art. Static HTML (`index.html`), no build step.
|
| 23 |
+
|
| 24 |
+
Source: [`explainer/`](https://github.com/danielrosehill/ASR-Paragraph-Breaks/tree/main/explainer).
|
index.html
CHANGED
|
@@ -1,19 +1,293 @@
|
|
| 1 |
<!doctype html>
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
</html>
|
|
|
|
| 1 |
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 6 |
+
<title>Paragraph inference for ASR</title>
|
| 7 |
+
<style>
|
| 8 |
+
:root {
|
| 9 |
+
--bg: #ffffff; --fg: #1f2328; --muted: #59636e; --line: #d1d9e0; --card: #f6f8fa;
|
| 10 |
+
--accent: #2563eb; --accent-bg: #e8f0fe; --dim: #8c959f;
|
| 11 |
+
}
|
| 12 |
+
@media (prefers-color-scheme: dark) {
|
| 13 |
+
:root {
|
| 14 |
+
--bg: #0d1117; --fg: #e6edf3; --muted: #9198a1; --line: #3d444d; --card: #161b22;
|
| 15 |
+
--accent: #6ea8fe; --accent-bg: #15233d; --dim: #6e7681;
|
| 16 |
+
}
|
| 17 |
+
}
|
| 18 |
+
* { box-sizing: border-box; }
|
| 19 |
+
body { margin: 0; background: var(--bg); color: var(--fg);
|
| 20 |
+
font: 16px/1.6 system-ui, -apple-system, "Segoe UI", sans-serif; }
|
| 21 |
+
main { max-width: 860px; margin: 0 auto; padding: 48px 24px 80px; }
|
| 22 |
+
h1 { font-size: 2rem; line-height: 1.2; margin: 0 0 8px; }
|
| 23 |
+
h2 { font-size: 1.3rem; margin: 48px 0 12px; padding-top: 8px; border-top: 1px solid var(--line); }
|
| 24 |
+
h3 { font-size: 1.05rem; margin: 24px 0 6px; }
|
| 25 |
+
p, li { color: var(--fg); }
|
| 26 |
+
.lede { color: var(--muted); font-size: 1.1rem; margin: 0 0 16px; }
|
| 27 |
+
.tag { display: inline-block; font-size: .78rem; font-weight: 600; letter-spacing: .02em;
|
| 28 |
+
padding: 2px 10px; border-radius: 999px; background: var(--accent-bg); color: var(--accent); }
|
| 29 |
+
a { color: var(--accent); }
|
| 30 |
+
code { font: .88em ui-monospace, SFMono-Regular, Menlo, monospace; background: var(--card);
|
| 31 |
+
padding: 1px 5px; border-radius: 4px; }
|
| 32 |
+
table { border-collapse: collapse; width: 100%; font-size: .93rem; margin: 12px 0; }
|
| 33 |
+
th, td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--line); vertical-align: top; }
|
| 34 |
+
th { color: var(--muted); font-weight: 600; }
|
| 35 |
+
.compare { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 16px 0; }
|
| 36 |
+
.compare figure { margin: 0; }
|
| 37 |
+
.compare figcaption { font-size: .82rem; font-weight: 600; color: var(--muted); margin-bottom: 6px; }
|
| 38 |
+
.text { background: var(--card); border: 1px solid var(--line); border-radius: 8px; padding: 14px 16px;
|
| 39 |
+
font-size: .86rem; line-height: 1.55; white-space: pre-wrap; max-height: 460px; overflow: auto; }
|
| 40 |
+
@media (max-width: 700px) { .compare { grid-template-columns: 1fr; } }
|
| 41 |
+
.diagram { margin: 16px 0 8px; overflow-x: auto; }
|
| 42 |
+
.diagram svg { width: 100%; min-width: 640px; height: auto; display: block; }
|
| 43 |
+
svg .box { fill: var(--card); stroke: var(--line); stroke-width: 1.5; }
|
| 44 |
+
svg .box.hi { fill: var(--accent-bg); stroke: var(--accent); stroke-width: 2; }
|
| 45 |
+
svg .box.ghost { fill: none; stroke: var(--dim); stroke-dasharray: 5 4; }
|
| 46 |
+
svg .t { fill: var(--fg); font: 600 13px system-ui, sans-serif; }
|
| 47 |
+
svg .s { fill: var(--muted); font: 11px system-ui, sans-serif; }
|
| 48 |
+
svg .lane { fill: var(--muted); font: 700 11px system-ui, sans-serif; letter-spacing: .06em; }
|
| 49 |
+
svg .arrow { stroke: var(--muted); stroke-width: 1.5; fill: none; marker-end: url(#ah); }
|
| 50 |
+
svg .ah { fill: var(--muted); }
|
| 51 |
+
ul.art { padding-left: 20px; }
|
| 52 |
+
ul.art li { margin: 6px 0; }
|
| 53 |
+
.kind { font-size: .75rem; color: var(--muted); }
|
| 54 |
+
footer { margin-top: 56px; font-size: .85rem; color: var(--muted); }
|
| 55 |
+
</style>
|
| 56 |
+
</head>
|
| 57 |
+
<body>
|
| 58 |
+
<main>
|
| 59 |
+
|
| 60 |
+
<span class="tag">Prototype · experimental</span>
|
| 61 |
+
<h1>Paragraph inference for ASR</h1>
|
| 62 |
+
<p class="lede">Small models that do one thing to speech-to-text output: decide where the paragraphs go,
|
| 63 |
+
and change nothing else.</p>
|
| 64 |
+
|
| 65 |
+
<h2>The task</h2>
|
| 66 |
+
<p>Modern speech recognition already handles punctuation and capitalisation well, and sentence boundary
|
| 67 |
+
detection is a widely adopted, well-understood step. What most engines still return is one unbroken
|
| 68 |
+
block of text. For a two-minute voice note that block is hard to read, and the fix is not more
|
| 69 |
+
punctuation: it is paragraphs.</p>
|
| 70 |
+
<p><strong>Paragraph inference</strong> takes flat, punctuated text and inserts paragraph breaks.
|
| 71 |
+
It is meant to be deterministic in the sense that matters for a pipeline: the words, punctuation and
|
| 72 |
+
casing that go in are exactly the words that come out. Only whitespace changes.</p>
|
| 73 |
+
|
| 74 |
+
<div class="compare">
|
| 75 |
+
<figure>
|
| 76 |
+
<figcaption>Input: Parakeet-style ASR output (one block)</figcaption>
|
| 77 |
+
<div class="text">Hi Mr. Delgado, this is Priya Raman in unit 4B. Calling about the lease renewal, and I'll keep this short. Need to confirm one thing before I sign. I've been taking evening classes in Portuguese since March. Three nights a week, Lisbon Language Hub on Calder Street. Reason I'm bringing it up: my work schedule is changing. Starting June 3rd I'll be working from home two days a week, and I'll be doing a lot of calls with a team in São Paulo. So I'll be on the apartment's Wi-Fi during business hours more than before. Is that okay under the lease? Clause 14 says no running a business from the unit. I don't think this counts, it's just employment. But I'd rather ask than guess. Also, the study thing. I'll need a quiet corner for flashcards and recordings, mostly weeknights, after nine. Nothing loud. No parties, no music. Just saying so in case you hear me reciting verb conjugations through the wall. Which, honestly, you probably will. Two questions. One, does the renewal stay at the current rate? Two, can I get a copy of the updated building rules before the 15th? I want to read them properly. Call me back at 555-0148 or email. Thanks. Priya</div>
|
| 78 |
+
</figure>
|
| 79 |
+
<figure>
|
| 80 |
+
<figcaption>Output: MiniLM-L12 paragraph model (actual output)</figcaption>
|
| 81 |
+
<div class="text">Hi Mr. Delgado, this is Priya Raman in unit 4B.
|
| 82 |
+
|
| 83 |
+
Calling about the lease renewal, and I'll keep this short. Need to confirm one thing before I sign.
|
| 84 |
+
|
| 85 |
+
I've been taking evening classes in Portuguese since March. Three nights a week, Lisbon Language Hub on Calder Street.
|
| 86 |
+
|
| 87 |
+
Reason I'm bringing it up: my work schedule is changing. Starting June 3rd I'll be working from home two days a week, and I'll be doing a lot of calls with a team in São Paulo. So I'll be on the apartment's Wi-Fi during business hours more than before. Is that okay under the lease? Clause 14 says no running a business from the unit. I don't think this counts, it's just employment. But I'd rather ask than guess.
|
| 88 |
+
|
| 89 |
+
Also, the study thing.
|
| 90 |
+
|
| 91 |
+
I'll need a quiet corner for flashcards and recordings, mostly weeknights, after nine. Nothing loud. No parties, no music. Just saying so in case you hear me reciting verb conjugations through the wall. Which, honestly, you probably will.
|
| 92 |
+
|
| 93 |
+
Two questions.
|
| 94 |
+
|
| 95 |
+
One, does the renewal stay at the current rate? Two, can I get a copy of the updated building rules before the 15th? I want to read them properly.
|
| 96 |
+
|
| 97 |
+
Call me back at 555-0148 or email.
|
| 98 |
+
|
| 99 |
+
Thanks.
|
| 100 |
+
|
| 101 |
+
Priya</div>
|
| 102 |
+
</figure>
|
| 103 |
+
</div>
|
| 104 |
+
|
| 105 |
+
<h2>Why a dedicated model?</h2>
|
| 106 |
+
<p>ASR post-processing models are already very good. Superwhisper's
|
| 107 |
+
<a href="https://huggingface.co/superwhisper/s1-mini">S1 Mini</a>, for example, is a 0.6B normaliser that
|
| 108 |
+
removes fillers, resolves self-corrections, punctuates and writes numbers and dates in written form.
|
| 109 |
+
A general LLM cleanup pass can do all of that and paragraphing too.</p>
|
| 110 |
+
<p>The idea here is narrower: a <strong>very small module that does only paragraph inference</strong>,
|
| 111 |
+
so that it can be</p>
|
| 112 |
+
<ul>
|
| 113 |
+
<li><strong>dropped into an ASR pipeline</strong> as its own step, before a deterministic or LLM
|
| 114 |
+
post-processing stage, or as the last step;</li>
|
| 115 |
+
<li><strong>tested and tuned in isolation</strong>, with its own metric (break-position precision and
|
| 116 |
+
recall) instead of being one behaviour buried inside a larger rewrite;</li>
|
| 117 |
+
<li><strong>safe by construction</strong>: it cannot drop, add or reword anything, so the step after
|
| 118 |
+
it (or the reader) gets exactly what the ASR model heard.</li>
|
| 119 |
+
</ul>
|
| 120 |
+
<p>This is a prototype. The models are trained on synthetic English voice memos in one person's
|
| 121 |
+
paragraphing style, and they are published to test the idea, not as finished components.</p>
|
| 122 |
+
|
| 123 |
+
<h2>Where it fits: intended pipelines</h2>
|
| 124 |
+
<div class="diagram">
|
| 125 |
+
<svg viewBox="0 0 900 400" role="img" aria-labelledby="dgt dgd">
|
| 126 |
+
<title id="dgt">Intended usage patterns</title>
|
| 127 |
+
<desc id="dgd">Pattern A: audio to Parakeet ASR to the paragraph model to readable text. Pattern B:
|
| 128 |
+
audio to Parakeet to the paragraph model to a generic cleanup step that does not paragraph, to final
|
| 129 |
+
text. For contrast: audio to ASR to one all-in-one post-processor that does everything.</desc>
|
| 130 |
+
<defs>
|
| 131 |
+
<marker id="ah" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
| 132 |
+
<path class="ah" d="M0,0 L10,5 L0,10 z"/>
|
| 133 |
+
</marker>
|
| 134 |
+
</defs>
|
| 135 |
+
|
| 136 |
+
<!-- Pattern A -->
|
| 137 |
+
<text class="lane" x="0" y="22">A · ASR + PARAGRAPHS</text>
|
| 138 |
+
<rect class="box" x="0" y="36" width="110" height="64" rx="8"/>
|
| 139 |
+
<text class="t" x="55" y="64" text-anchor="middle">Audio</text>
|
| 140 |
+
<text class="s" x="55" y="82" text-anchor="middle">voice note</text>
|
| 141 |
+
<path class="arrow" d="M112,68 H150"/>
|
| 142 |
+
<rect class="box" x="152" y="36" width="190" height="64" rx="8"/>
|
| 143 |
+
<text class="t" x="247" y="60" text-anchor="middle">Parakeet (ASR)</text>
|
| 144 |
+
<text class="s" x="247" y="77" text-anchor="middle">punctuated, cased</text>
|
| 145 |
+
<text class="s" x="247" y="91" text-anchor="middle">no newline token: one block</text>
|
| 146 |
+
<path class="arrow" d="M344,68 H382"/>
|
| 147 |
+
<rect class="box hi" x="384" y="36" width="200" height="64" rx="8"/>
|
| 148 |
+
<text class="t" x="484" y="60" text-anchor="middle">Paragraph model</text>
|
| 149 |
+
<text class="s" x="484" y="77" text-anchor="middle">inserts breaks only</text>
|
| 150 |
+
<text class="s" x="484" y="91" text-anchor="middle">words unchanged</text>
|
| 151 |
+
<path class="arrow" d="M586,68 H624"/>
|
| 152 |
+
<rect class="box" x="626" y="36" width="160" height="64" rx="8"/>
|
| 153 |
+
<text class="t" x="706" y="64" text-anchor="middle">Readable text</text>
|
| 154 |
+
<text class="s" x="706" y="82" text-anchor="middle">verbatim, paragraphed</text>
|
| 155 |
+
|
| 156 |
+
<!-- Pattern B -->
|
| 157 |
+
<text class="lane" x="0" y="152">B · ASR + PARAGRAPHS + CLEANUP</text>
|
| 158 |
+
<rect class="box" x="0" y="166" width="110" height="64" rx="8"/>
|
| 159 |
+
<text class="t" x="55" y="194" text-anchor="middle">Audio</text>
|
| 160 |
+
<text class="s" x="55" y="212" text-anchor="middle">voice note</text>
|
| 161 |
+
<path class="arrow" d="M112,198 H150"/>
|
| 162 |
+
<rect class="box" x="152" y="166" width="150" height="64" rx="8"/>
|
| 163 |
+
<text class="t" x="227" y="194" text-anchor="middle">Parakeet (ASR)</text>
|
| 164 |
+
<text class="s" x="227" y="212" text-anchor="middle">one block</text>
|
| 165 |
+
<path class="arrow" d="M304,198 H340"/>
|
| 166 |
+
<rect class="box hi" x="342" y="166" width="170" height="64" rx="8"/>
|
| 167 |
+
<text class="t" x="427" y="194" text-anchor="middle">Paragraph model</text>
|
| 168 |
+
<text class="s" x="427" y="212" text-anchor="middle">structure only</text>
|
| 169 |
+
<path class="arrow" d="M514,198 H550"/>
|
| 170 |
+
<rect class="box" x="552" y="166" width="190" height="64" rx="8"/>
|
| 171 |
+
<text class="t" x="647" y="190" text-anchor="middle">Generic cleanup</text>
|
| 172 |
+
<text class="s" x="647" y="207" text-anchor="middle">rules or LLM: fillers, numbers</text>
|
| 173 |
+
<text class="s" x="647" y="221" text-anchor="middle">keeps the breaks it is given</text>
|
| 174 |
+
<path class="arrow" d="M744,198 H780"/>
|
| 175 |
+
<rect class="box" x="782" y="166" width="118" height="64" rx="8"/>
|
| 176 |
+
<text class="t" x="841" y="194" text-anchor="middle">Final text</text>
|
| 177 |
+
<text class="s" x="841" y="212" text-anchor="middle">clean, paragraphed</text>
|
| 178 |
+
|
| 179 |
+
<!-- Contrast -->
|
| 180 |
+
<text class="lane" x="0" y="292">FOR CONTRAST · ONE POST-PROCESSOR DOES EVERYTHING</text>
|
| 181 |
+
<rect class="box ghost" x="0" y="306" width="110" height="64" rx="8"/>
|
| 182 |
+
<text class="t" x="55" y="342" text-anchor="middle">Audio</text>
|
| 183 |
+
<path class="arrow" d="M112,338 H150"/>
|
| 184 |
+
<rect class="box ghost" x="152" y="306" width="150" height="64" rx="8"/>
|
| 185 |
+
<text class="t" x="227" y="342" text-anchor="middle">ASR</text>
|
| 186 |
+
<path class="arrow" d="M304,338 H340"/>
|
| 187 |
+
<rect class="box ghost" x="342" y="306" width="400" height="64" rx="8"/>
|
| 188 |
+
<text class="t" x="542" y="330" text-anchor="middle">All-in-one post-processor (S1 Mini, an LLM prompt)</text>
|
| 189 |
+
<text class="s" x="542" y="348" text-anchor="middle">cleanup, formatting and any paragraphing in one rewrite:</text>
|
| 190 |
+
<text class="s" x="542" y="362" text-anchor="middle">capable, but paragraphing can't be measured or tuned on its own</text>
|
| 191 |
+
<path class="arrow" d="M744,338 H780"/>
|
| 192 |
+
<rect class="box ghost" x="782" y="306" width="118" height="64" rx="8"/>
|
| 193 |
+
<text class="t" x="841" y="342" text-anchor="middle">Final text</text>
|
| 194 |
+
</svg>
|
| 195 |
+
</div>
|
| 196 |
+
<p><strong>A</strong> is the minimal deployment: Parakeet does not emit a newline token, so its output
|
| 197 |
+
is always one block, and the paragraph model is the only step after it. The transcript stays verbatim.</p>
|
| 198 |
+
<p><strong>B</strong> adds a generic cleanup step afterwards that tidies the text (fillers, numbers,
|
| 199 |
+
formatting) without doing its own paragraph inference, so each stage owns one job and can be swapped
|
| 200 |
+
or evaluated separately.</p>
|
| 201 |
+
|
| 202 |
+
<h2>The models</h2>
|
| 203 |
+
<p>Three repos, two models. All score break-position precision and recall on the same 26 held-out,
|
| 204 |
+
hand-reviewed synthetic memos (290 breaks).</p>
|
| 205 |
+
<table>
|
| 206 |
+
<thead><tr><th>Model</th><th>Type</th><th>Size</th><th>F1</th><th>Notes</th></tr></thead>
|
| 207 |
+
<tbody>
|
| 208 |
+
<tr><td><a href="https://huggingface.co/danielrosehill/MiniLM-L12-ASR-Paragraph-Breaks">MiniLM-L12-ASR-Paragraph-Breaks</a></td>
|
| 209 |
+
<td>Token classifier</td><td>33M · 32 MB int8 ONNX</td><td>0.85</td>
|
| 210 |
+
<td>Recommended. Labels each word as a paragraph start or not, so it <em>cannot</em> change the
|
| 211 |
+
text. ~0.65 s for a 340-word memo on a laptop CPU.</td></tr>
|
| 212 |
+
<tr><td><a href="https://huggingface.co/danielrosehill/Gemma-3-270M-ASR-Paragraph-Breaks">Gemma-3-270M-ASR-Paragraph-Breaks</a></td>
|
| 213 |
+
<td>Generative</td><td>270M</td><td>0.78</td>
|
| 214 |
+
<td>First attempt. Retypes the text, so every output is checked and falls back to the input if
|
| 215 |
+
anything but whitespace changed (2 of 26).</td></tr>
|
| 216 |
+
<tr><td><a href="https://huggingface.co/danielrosehill/Gemma-3-270M-ASR-Paragraph-Breaks-ONNX">Gemma-3-270M-ASR-Paragraph-Breaks-ONNX</a></td>
|
| 217 |
+
<td>ONNX export</td><td>1.66 GB fp32 · 417 MB int8</td><td>–</td>
|
| 218 |
+
<td>ONNX Runtime build of the Gemma model; the int8 quant is experimental.</td></tr>
|
| 219 |
+
</tbody>
|
| 220 |
+
</table>
|
| 221 |
+
<p>Baseline for comparison: SaT <code>segment-any-text/sat-3l-sm</code> in paragraph mode scores F1 0.65
|
| 222 |
+
(precision 0.48, recall 1.00) on the same set.</p>
|
| 223 |
+
<p>Data: <a href="https://huggingface.co/datasets/danielrosehill/ASR-Paragraph-Breaks">danielrosehill/ASR-Paragraph-Breaks</a> ·
|
| 224 |
+
Try it: <a href="https://huggingface.co/spaces/danielrosehill/ASR-Paragraph-Breaks-Demo">demo Space</a> ·
|
| 225 |
+
Code: <a href="https://github.com/danielrosehill/ASR-Paragraph-Breaks">GitHub</a> ·
|
| 226 |
+
Write-up: <a href="https://blog.danielrosehill.com/posts/asr-paragraph-breaks-gemma-3-270m-85hckk/">blog post</a></p>
|
| 227 |
+
|
| 228 |
+
<h2>Prior art and related work</h2>
|
| 229 |
+
<p>Paragraph segmentation of speech isn't a new idea. This is a short, non-exhaustive map of what's
|
| 230 |
+
already out there, collected 2026-10-25.</p>
|
| 231 |
+
|
| 232 |
+
<h3>Closest to this project</h3>
|
| 233 |
+
<ul class="art">
|
| 234 |
+
<li><a href="https://arxiv.org/abs/2512.24517">Paragraph Segmentation Revisited: Towards a Standard Task for Structuring Speech</a>
|
| 235 |
+
<span class="kind">· paper · Retkowski & Waibel, LREC 2026</span><br>
|
| 236 |
+
Makes the same case: ASR transcripts arrive as unstructured streams, and paragraphing is the missing step.
|
| 237 |
+
Introduces the TEDPara and YTSegPara benchmarks, constrained decoding so LLMs insert breaks without
|
| 238 |
+
altering the transcript, and a compact model (MiniSeg).</li>
|
| 239 |
+
<li><a href="https://github.com/segment-any-text/wtpsplit">Segment Any Text (SaT) / wtpsplit</a>
|
| 240 |
+
<span class="kind">· models + library · 2024</span><br>
|
| 241 |
+
Multilingual sentence segmentation models that predict newline probability, with
|
| 242 |
+
<code>do_paragraph_segmentation=True</code> for paragraphs. The baseline used above
|
| 243 |
+
(<a href="https://huggingface.co/segment-any-text/sat-3l-sm">sat-3l-sm</a>).
|
| 244 |
+
Papers: <a href="https://arxiv.org/abs/2305.18893">WtP</a> (2023),
|
| 245 |
+
<a href="https://arxiv.org/abs/2406.16678">SaT</a> (2024).</li>
|
| 246 |
+
<li><a href="https://huggingface.co/superwhisper/s1-mini">superwhisper/s1-mini</a>
|
| 247 |
+
<span class="kind">· model · 2026</span><br>
|
| 248 |
+
A 0.6B ASR normaliser (fillers, self-corrections, punctuation, inverse text normalisation). It isn't
|
| 249 |
+
built for paragraph inference. Its card mentions blank lines only for a greeting, body and sign-off
|
| 250 |
+
in email context.</li>
|
| 251 |
+
</ul>
|
| 252 |
+
|
| 253 |
+
<h3>ASR API features</h3>
|
| 254 |
+
<ul class="art">
|
| 255 |
+
<li><a href="https://developers.deepgram.com/docs/paragraphs">Deepgram <code>paragraphs=true</code></a>
|
| 256 |
+
<span class="kind">· API feature</span>: paragraphs from punctuation, speaker changes (with
|
| 257 |
+
diarization) and channel changes.</li>
|
| 258 |
+
<li><a href="https://www.assemblyai.com/docs/api-reference/transcripts/get-paragraphs">AssemblyAI paragraphs endpoint</a>
|
| 259 |
+
<span class="kind">· API feature</span>: returns a finished transcript split into paragraphs.</li>
|
| 260 |
+
</ul>
|
| 261 |
+
|
| 262 |
+
<h3>Text and topic segmentation</h3>
|
| 263 |
+
<ul class="art">
|
| 264 |
+
<li><a href="https://arxiv.org/abs/2004.14535">Text Segmentation by Cross Segment Attention</a>
|
| 265 |
+
<span class="kind">· paper · Lukasik et al., EMNLP 2020</span>: Cross-segment BERT.</li>
|
| 266 |
+
<li><a href="https://arxiv.org/abs/1803.09337">Text Segmentation as a Supervised Learning Task</a>
|
| 267 |
+
<span class="kind">· paper · Koshorek et al., 2018</span>: introduces the
|
| 268 |
+
<a href="https://huggingface.co/datasets/saeedabc/wiki727k">Wiki-727K</a> dataset.</li>
|
| 269 |
+
<li><a href="https://arxiv.org/abs/2107.09278">Self-Adaptive Sliding Window for Spoken Document Segmentation</a>
|
| 270 |
+
<span class="kind">· paper · 2021</span>: segmentation aimed at spoken documents and ASR output.</li>
|
| 271 |
+
<li><a href="https://huggingface.co/dennlinger/bert-wiki-paragraphs">dennlinger/bert-wiki-paragraphs</a>
|
| 272 |
+
<span class="kind">· model · 2021</span>: BERT that decides whether adjacent paragraphs belong together
|
| 273 |
+
(<a href="https://arxiv.org/abs/2012.03619">paper</a>,
|
| 274 |
+
<a href="https://huggingface.co/datasets/dennlinger/wiki-paragraphs">dataset</a>).</li>
|
| 275 |
+
<li><a href="https://aclanthology.org/W04-3210/">Automatic Paragraph Identification</a>
|
| 276 |
+
<span class="kind">· paper · Sporleder & Lapata, 2004</span>: early work on paragraph boundaries
|
| 277 |
+
across languages and domains.</li>
|
| 278 |
+
<li><a href="https://www.nltk.org/api/nltk.tokenize.texttiling.html">TextTiling</a> (Hearst, 1997) and
|
| 279 |
+
<a href="https://aclanthology.org/A00-2004/">C99</a> (Choi, 2000)
|
| 280 |
+
<span class="kind">· classical</span>: unsupervised topic-shift detection from lexical cohesion.</li>
|
| 281 |
+
</ul>
|
| 282 |
+
|
| 283 |
+
<h3>Adjacent step</h3>
|
| 284 |
+
<ul class="art">
|
| 285 |
+
<li><a href="https://huggingface.co/oliverguhr/fullstop-punctuation-multilang-large">oliverguhr/fullstop-punctuation-multilang-large</a>
|
| 286 |
+
<span class="kind">· model</span>: punctuation restoration for unpunctuated ASR. This is the step
|
| 287 |
+
before paragraphing, for engines that don't punctuate.</li>
|
| 288 |
+
</ul>
|
| 289 |
+
|
| 290 |
+
<footer>Prototype, English only, trained on synthetic memos. Updated 2026-10-25.</footer>
|
| 291 |
+
</main>
|
| 292 |
+
</body>
|
| 293 |
</html>
|