danielrosehill commited on
Commit
26f7435
·
verified ·
1 Parent(s): 4608f75

Explainer page: task, pipelines diagram, models, prior art

Browse files
Files changed (2) hide show
  1. README.md +19 -5
  2. index.html +291 -17
README.md CHANGED
@@ -1,10 +1,24 @@
1
  ---
2
- title: Paragraph Inference For ASR
3
- emoji: ⚡
4
- colorFrom: green
5
- colorTo: green
6
  sdk: static
 
7
  pinned: false
 
 
 
 
 
 
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
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
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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&nbsp;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&nbsp;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&nbsp;GB fp32 · 417&nbsp;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 &amp; 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 &amp; 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>