deck: delete slide 04 (AI mappings), renumber to 14; IT/EN translation pairs on text-analysis slides; Sources = four islands
This commit is contained in:
@@ -79,6 +79,21 @@
|
|||||||
}
|
}
|
||||||
.arit .quote::before { content: '\201C'; position: absolute; left: 22px; top: 10px;
|
.arit .quote::before { content: '\201C'; position: absolute; left: 22px; top: 10px;
|
||||||
font: 700 52px/1 var(--display); color: var(--bordeaux); }
|
font: 700 52px/1 var(--display); color: var(--bordeaux); }
|
||||||
|
|
||||||
|
/* EN translations alongside Italian clinical text */
|
||||||
|
.arit .tr-grid { display: grid; grid-template-columns: 1.12fr 1fr; gap: 24px; align-items: center; }
|
||||||
|
.arit .tr-grid .it, .arit .tr-grid .en { margin: 0; }
|
||||||
|
.arit .tr-grid .en { padding-left: 20px; border-left: 1px solid var(--line-strong);
|
||||||
|
font: 400 14.5px/1.6 var(--sans); color: var(--bordeaux-deep); }
|
||||||
|
.arit .en-tag { display: inline-block; margin-right: 8px; padding: 2.5px 8px; border-radius: 4px;
|
||||||
|
background: var(--bordeaux); color: #fdfcfc; font: 700 9.5px/1 var(--sans); letter-spacing: .12em;
|
||||||
|
vertical-align: 2px; }
|
||||||
|
.arit .points .g { color: var(--bordeaux-deep); }
|
||||||
|
.arit .chipc .g { font-weight: 400; opacity: .78; }
|
||||||
|
.arit .code .en { font: 400 11.5px/1.5 var(--sans); color: var(--bordeaux-deep); }
|
||||||
|
.arit .code .en::before { content: 'EN'; display: inline-block; margin-right: 8px; padding: 2px 6px;
|
||||||
|
border-radius: 3px; background: var(--bordeaux); color: #fdfcfc;
|
||||||
|
font: 700 8.5px/1 var(--sans); letter-spacing: .1em; }
|
||||||
.arit .quote small { display: block; margin-top: 6px; font: 600 11px/1.4 var(--sans); font-style: normal;
|
.arit .quote small { display: block; margin-top: 6px; font: 600 11px/1.4 var(--sans); font-style: normal;
|
||||||
letter-spacing: .06em; text-transform: uppercase; color: var(--ink-muted); }
|
letter-spacing: .06em; text-transform: uppercase; color: var(--ink-muted); }
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<title>AritmoLab — Role of AI in the Analysis of Unstructured Clinical Databases</title>
|
<title>AritmoLab — Role of AI in the Analysis of Unstructured Clinical Databases</title>
|
||||||
<link rel="stylesheet" href="vendor/reveal/dist/reveal.css">
|
<link rel="stylesheet" href="vendor/reveal/dist/reveal.css">
|
||||||
<link rel="stylesheet" href="fonts.css?v=8">
|
<link rel="stylesheet" href="fonts.css?v=8">
|
||||||
<link rel="stylesheet" href="deck.css?v=26">
|
<link rel="stylesheet" href="deck.css?v=27">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="reveal"><div class="slides">
|
<div class="reveal"><div class="slides">
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<p class="event">“Multidimensional Characterization of Cardiac Arrhythmias: Role of Electrocardiology in the Artificial Intelligence Era”</p>
|
<p class="event">“Multidimensional Characterization of Cardiac Arrhythmias: Role of Electrocardiology in the Artificial Intelligence Era”</p>
|
||||||
<p class="event-where">San Donato Milanese, Milan, Italy · 2–3 October 2026</p>
|
<p class="event-where">San Donato Milanese, Milan, Italy · 2–3 October 2026</p>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">01 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">01 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
Good morning everyone, and thank you for being here. I'm Marco Pancotti, and with my colleague Dr. Sara Paratico we work on the clinical data platform of AritmoLab at Policlinico San Donato.
|
Good morning everyone, and thank you for being here. I'm Marco Pancotti, and with my colleague Dr. Sara Paratico we work on the clinical data platform of AritmoLab at Policlinico San Donato.
|
||||||
Today I want to talk about a problem that every hospital knows very well. The most valuable clinical information we have — the diagnosis, the patient's history, the outcome of a test — is written in plain free text, inside systems that were never designed to make that text usable.
|
Today I want to talk about a problem that every hospital knows very well. The most valuable clinical information we have — the diagnosis, the patient's history, the outcome of a test — is written in plain free text, inside systems that were never designed to make that text usable.
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
<p class="hint" style="position:absolute; left:26%; width:48%; bottom:2px; margin:0; text-align:center">▸ click a system: how it was used — and what held it back · click a missing piece: what it would have given</p>
|
<p class="hint" style="position:absolute; left:26%; width:48%; bottom:2px; margin:0; text-align:center">▸ click a system: how it was used — and what held it back · click a missing piece: what it would have given</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">02 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">02 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
Before I show you what we built, let me take you back twenty years. Cardioref, our electrophysiology database, had twenty years of clinical records: as a management tool for patients, daily activity and planning it was — and still is — excellent. But for research it was almost unusable, because most of the clinical knowledge was written in free text, outside the structured fields. The genetic data lived in its own system, which produced Excel sheets, with no connection to Cardioref. Our first Omics Portal was a promising idea, still embryonic and not integrated with anything. And a constellation of ECG subsystems that could only hand you a CSV file, on request. On top of that: no clinical intelligence on the historical data, no single datawarehouse as the source of truth, no ML-ready data for predictive statistics, and no professional portal to bring it all together. Four islands, four missing pieces. Click any system and I'll show you exactly what held it back. And here is what we built.
|
Before I show you what we built, let me take you back twenty years. Cardioref, our electrophysiology database, had twenty years of clinical records: as a management tool for patients, daily activity and planning it was — and still is — excellent. But for research it was almost unusable, because most of the clinical knowledge was written in free text, outside the structured fields. The genetic data lived in its own system, which produced Excel sheets, with no connection to Cardioref. Our first Omics Portal was a promising idea, still embryonic and not integrated with anything. And a constellation of ECG subsystems that could only hand you a CSV file, on request. On top of that: no clinical intelligence on the historical data, no single datawarehouse as the source of truth, no ML-ready data for predictive statistics, and no professional portal to bring it all together. Four islands, four missing pieces. Click any system and I'll show you exactly what held it back. And here is what we built.
|
||||||
</aside>
|
</aside>
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
<span class="pillar"><b>Authentik</b> · auth — GSD LDAP</span>
|
<span class="pillar"><b>Authentik</b> · auth — GSD LDAP</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">03 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">03 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
Here is the whole project on one slide. On the left, what already existed: three hospital data sources — Cardioref, our electrophysiology records; the genetic data coming from the labs; and the ECG signals. On the right, what we built in AritmoLab: a staging replica, an integration layer where the data is cleaned and normalized, a star-schema warehouse, and the research datamarts — delivered through the data warehouse and a management portal.
|
Here is the whole project on one slide. On the left, what already existed: three hospital data sources — Cardioref, our electrophysiology records; the genetic data coming from the labs; and the ECG signals. On the right, what we built in AritmoLab: a staging replica, an integration layer where the data is cleaned and normalized, a star-schema warehouse, and the research datamarts — delivered through the data warehouse and a management portal.
|
||||||
Everywhere you see the brain symbol, that's where AI works for us — click each brain and its contribution card opens, tied to the brain by a red line. At integration, AI reads the clinical text. At the end, AI builds the datamarts on demand from plain-English questions. And the mappings that bring the sources in were themselves drafted by AI, then revised by humans.
|
Everywhere you see the brain symbol, that's where AI works for us — click each brain and its contribution card opens, tied to the brain by a red line. At integration, AI reads the clinical text. At the end, AI builds the datamarts on demand from plain-English questions. And the mappings that bring the sources in were themselves drafted by AI, then revised by humans.
|
||||||
@@ -152,53 +152,6 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
<section class="arit">
|
|
||||||
<header class="head">
|
|
||||||
<img src="logo.png" alt="">
|
|
||||||
<span class="head-org">AritmoLab · Policlinico San Donato</span>
|
|
||||||
</header>
|
|
||||||
<nav class="band">
|
|
||||||
<span class="band-section">AI as co-engineer</span>
|
|
||||||
</nav>
|
|
||||||
<div class="sbody">
|
|
||||||
<div class="kicker">Mappings as code</div>
|
|
||||||
<h2>LLM agents draft it. Humans review it. Git versions it.</h2>
|
|
||||||
<div class="hgap"></div>
|
|
||||||
<div class="split">
|
|
||||||
<div class="left">
|
|
||||||
<ul class="points">
|
|
||||||
<li>Staging → integration mappings are declarative YAML: schema-validated, reviewed, versioned</li>
|
|
||||||
<li>LLM agents authored them from prompts (<code>etl/prompts/fill_integration_yaml.md</code>)</li>
|
|
||||||
<li>The same file wires the runtime text mining: <code>analysis_function</code> + <code>version_function</code> per enrichment</li>
|
|
||||||
<li>Every extracted row records its pattern-library version — reproducible by design</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="right">
|
|
||||||
<div class="code">
|
|
||||||
<div class="code-head"><span>etl/config/integration-map.yaml</span><span>19,764 lines · 42 mappings</span></div>
|
|
||||||
<pre><b>text_cascade_enrichments</b>:
|
|
||||||
- <b>source_columns</b>:
|
|
||||||
- <i>cr_diagnosi</i>
|
|
||||||
- <i>cr_anamnesi_cardio</i>
|
|
||||||
- <i>cr_anamnesi_extra_cardio</i>
|
|
||||||
<b>analysis_function</b>: <i>get_letter_pathologies_cascade</i>
|
|
||||||
<b>version_function</b>: <i>get_letter_pathology_version</i>
|
|
||||||
<b>integration_table</b>: <i>cr_lettera_dimissione_diagnosi</i>
|
|
||||||
<b>output_columns</b>:
|
|
||||||
- <b>column</b>: <i>patologia</i>
|
|
||||||
<b>postgres_type</b>: <i>TEXT NOT NULL</i></pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">04 / 15</span></footer>
|
|
||||||
<aside class="notes">
|
|
||||||
Second role of AI: not reading the data — building the machine that reads it. The mappings between layers are declarative YAML: instructions that say, field by field, where each piece of data comes from and where it lands. 19,764 lines for the integration layer alone. LLM agents drafted them from prompts and schema samples; we reviewed every line, and git keeps every version — any change can be undone.
|
|
||||||
The same file also wires the runtime text mining: which function runs on which columns, and which version stamps the output.
|
|
||||||
</aside>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="arit center-v">
|
<section class="arit center-v">
|
||||||
<header class="head">
|
<header class="head">
|
||||||
<img src="logo.png" alt="">
|
<img src="logo.png" alt="">
|
||||||
@@ -211,12 +164,14 @@
|
|||||||
<div class="kicker">From free text to a research platform</div>
|
<div class="kicker">From free text to a research platform</div>
|
||||||
<h2>The clinical truth lives in unstructured columns</h2>
|
<h2>The clinical truth lives in unstructured columns</h2>
|
||||||
<div class="quote">
|
<div class="quote">
|
||||||
“Il paziente riferisce sincope ricorrente; ECG basale con sopraslivellamento ST in V1–V3;
|
<div class="tr-grid">
|
||||||
test provocativo con flecainide positivo per pattern Brugada.”
|
<p class="it">“Il paziente riferisce sincope ricorrente; ECG basale con sopraslivellamento ST in V1–V3; test provocativo con flecainide positivo per pattern Brugada.”</p>
|
||||||
|
<p class="en"><span class="en-tag">EN</span>“The patient reports recurrent syncope; baseline ECG with ST-segment elevation in V1–V3; flecainide provocation test positive for a Brugada pattern.”</p>
|
||||||
|
</div>
|
||||||
<small>One sentence from a discharge letter (example) — diagnosis, history and test outcome, all in free text</small>
|
<small>One sentence from a discharge letter (example) — diagnosis, history and test outcome, all in free text</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="pipeline">
|
<div class="pipeline">
|
||||||
<div class="stage"><b>Sources</b><span>Cardioref · SQL Server<br>Kokoro · PostgreSQL</span></div>
|
<div class="stage"><b>Sources</b><span>Cardioref · Genetic data<br>Omics Portal · ECG</span></div>
|
||||||
<div class="arrow">→</div>
|
<div class="arrow">→</div>
|
||||||
<div class="stage"><b>Staging</b><span>raw replica</span></div>
|
<div class="stage"><b>Staging</b><span>raw replica</span></div>
|
||||||
<div class="arrow">→</div>
|
<div class="arrow">→</div>
|
||||||
@@ -233,7 +188,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">05 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">04 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
[DRAFT] Here is one real sentence from a discharge letter — in Italian, as the clinicians wrote it. In this single sentence there is a diagnosis (syncope), an ECG finding (ST elevation in V1–V3), and a drug-challenge result (flecainide positive for Brugada pattern). For a human cardiologist this is readable in two seconds. For a database, this is just a blob of text in a column.
|
[DRAFT] Here is one real sentence from a discharge letter — in Italian, as the clinicians wrote it. In this single sentence there is a diagnosis (syncope), an ECG finding (ST elevation in V1–V3), and a drug-challenge result (flecainide positive for Brugada pattern). For a human cardiologist this is readable in two seconds. For a database, this is just a blob of text in a column.
|
||||||
The structured tables — demographics, procedures, dates — only tell half the story. The rest is locked inside these free-text fields, in every hospital system we have.
|
The structured tables — demographics, procedures, dates — only tell half the story. The rest is locked inside these free-text fields, in every hospital system we have.
|
||||||
@@ -260,7 +215,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<p class="stat-note">Every row carries its pattern-library semver (<code>pattern_version</code>) · quality gate: ≥95% accuracy on 100 manual reviews.</p>
|
<p class="stat-note">Every row carries its pattern-library semver (<code>pattern_version</code>) · quality gate: ≥95% accuracy on 100 manual reviews.</p>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">06 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">05 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
[DRAFT — Sara] I'll take you inside these numbers. We read 58,438 discharge letters — every single one, every night. From them the text miner extracted 73,389 pathology records, classified into our clinical ontology. It parsed 10,908 drug-challenge tests, distinguishing the therapy from the actual test. And at the end of the chain: 2,307 patients with a confirmed Brugada pattern — a cohort nobody could have built by hand.
|
[DRAFT — Sara] I'll take you inside these numbers. We read 58,438 discharge letters — every single one, every night. From them the text miner extracted 73,389 pathology records, classified into our clinical ontology. It parsed 10,908 drug-challenge tests, distinguishing the therapy from the actual test. And at the end of the chain: 2,307 patients with a confirmed Brugada pattern — a cohort nobody could have built by hand.
|
||||||
The key word here is deterministic: no black box. Every number can be traced back to the rule that produced it.
|
The key word here is deterministic: no black box. Every number can be traced back to the rule that produced it.
|
||||||
@@ -283,8 +238,8 @@
|
|||||||
<div class="split">
|
<div class="split">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<ul class="points">
|
<ul class="points">
|
||||||
<li><b>Negation</b> — “fibrillazione atriale <i>esclusa</i>”, “<i>non</i> FA”: the rule scans a window around every match before deciding</li>
|
<li><b>Negation</b> — “fibrillazione atriale <i>esclusa</i>”, “<i>non</i> FA” <span class="g">(“AF ruled out”, “no AF”)</span>: the rule scans a window around every match before deciding</li>
|
||||||
<li><b>Family ≠ patient</b> — “padre con FA” is attributed to the family member, not to the patient</li>
|
<li><b>Family ≠ patient</b> — “padre con FA” <span class="g">(“father with AF”)</span> is attributed to the family member, not to the patient</li>
|
||||||
<li><b>Two languages</b> — every pattern matches IT and EN forms: fibrillazione atriale / atrial fibrillation</li>
|
<li><b>Two languages</b> — every pattern matches IT and EN forms: fibrillazione atriale / atrial fibrillation</li>
|
||||||
<li><b>Abbreviations & noise</b> — FA, f.a., “TA 140/90” (blood pressure, not a diagnosis)</li>
|
<li><b>Abbreviations & noise</b> — FA, f.a., “TA 140/90” (blood pressure, not a diagnosis)</li>
|
||||||
<li><b>One field, many statements</b> — the text is split into clauses before matching</li>
|
<li><b>One field, many statements</b> — the text is split into clauses before matching</li>
|
||||||
@@ -294,19 +249,25 @@
|
|||||||
<div class="code">
|
<div class="code">
|
||||||
<div class="code-head"><span>what the rules see</span><span>examples from the corpus</span></div>
|
<div class="code-head"><span>what the rules see</span><span>examples from the corpus</span></div>
|
||||||
<pre>“<i>padre con</i> fibrillazione atriale”
|
<pre>“<i>padre con</i> fibrillazione atriale”
|
||||||
|
<span class="en">“father with atrial fibrillation”</span>
|
||||||
→ patologia: FA · attribuzione: <b>familiare</b>
|
→ patologia: FA · attribuzione: <b>familiare</b>
|
||||||
|
<span class="en">pathology: AF · attribution: family</span>
|
||||||
|
|
||||||
“fibrillazione atriale <i>esclusa</i>”
|
“fibrillazione atriale <i>esclusa</i>”
|
||||||
|
<span class="en">“atrial fibrillation ruled out”</span>
|
||||||
→ patologia: FA · <b>negato</b>
|
→ patologia: FA · <b>negato</b>
|
||||||
|
<span class="en">pathology: AF · negated</span>
|
||||||
|
|
||||||
“test provocativo con flecainide
|
“test provocativo con flecainide
|
||||||
positivo per pattern Brugada”
|
positivo per pattern Brugada”
|
||||||
→ test: flecainide · esito: <b>POSITIVO</b></pre>
|
<span class="en">“flecainide provocation test, positive for Brugada pattern”</span>
|
||||||
|
→ test: flecainide · esito: <b>POSITIVO</b>
|
||||||
|
<span class="en">test: flecainide · outcome: POSITIVE</span></pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">07 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">06 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
[DRAFT — Sara] Why can't we just search for "FA"? Because clinical text lies to naive search. "Fibrillazione atriale esclusa" contains the words of a diagnosis but negates it — so every rule scans a window around the match, looking for negation cues. "Padre con FA" is real atrial fibrillation — but in the father, not the patient: we record it as family history. Letters mix Italian and English, abbreviations collide ("TA" is blood pressure, not a therapy), and one field can contain five different statements — so we split the text into clauses first.
|
[DRAFT — Sara] Why can't we just search for "FA"? Because clinical text lies to naive search. "Fibrillazione atriale esclusa" contains the words of a diagnosis but negates it — so every rule scans a window around the match, looking for negation cues. "Padre con FA" is real atrial fibrillation — but in the father, not the patient: we record it as family history. Letters mix Italian and English, abbreviations collide ("TA" is blood pressure, not a therapy), and one field can contain five different statements — so we split the text into clauses first.
|
||||||
Each of these problems has a specific, versioned solution. Sara to expand with real corpus examples.
|
Each of these problems has a specific, versioned solution. Sara to expand with real corpus examples.
|
||||||
@@ -328,22 +289,22 @@
|
|||||||
<div class="tier">
|
<div class="tier">
|
||||||
<span class="tier-label">TIER 1 · arrhythmic — 11 categories</span>
|
<span class="tier-label">TIER 1 · arrhythmic — 11 categories</span>
|
||||||
<div class="chips">
|
<div class="chips">
|
||||||
<span class="chipc">FA</span><span class="chipc">Brugada</span><span class="chipc">Flutter</span><span class="chipc">TA</span><span class="chipc">TRN</span><span class="chipc">WPW / TPSV</span><span class="chipc">TV</span><span class="chipc">FV</span><span class="chipc">Extrasistolia V.</span><span class="chipc">Sincope</span><span class="chipc">QT lungo</span>
|
<span class="chipc">FA <span class="g">· AF</span></span><span class="chipc">Brugada</span><span class="chipc">Flutter</span><span class="chipc">TA <span class="g">· AT</span></span><span class="chipc">TRN <span class="g">· AVNRT</span></span><span class="chipc">WPW / TPSV <span class="g">· PSVT</span></span><span class="chipc">TV <span class="g">· VT</span></span><span class="chipc">FV <span class="g">· VF</span></span><span class="chipc">Extrasistolia V. <span class="g">· ventricular ectopy</span></span><span class="chipc">Sincope <span class="g">· syncope</span></span><span class="chipc">QT lungo <span class="g">· long QT</span></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tier">
|
<div class="tier">
|
||||||
<span class="tier-label">TIER 2 · structural — 5 categories</span>
|
<span class="tier-label">TIER 2 · structural — 5 categories</span>
|
||||||
<div class="chips">
|
<div class="chips">
|
||||||
<span class="chipc t2">Blocco AV</span><span class="chipc t2">Blocco di branca</span><span class="chipc t2">Cardiomiopatia</span><span class="chipc t2">Scompenso</span><span class="chipc t2">Valvulopatia</span>
|
<span class="chipc t2">Blocco AV <span class="g">· AV block</span></span><span class="chipc t2">Blocco di branca <span class="g">· bundle branch block</span></span><span class="chipc t2">Cardiomiopatia <span class="g">· cardiomyopathy</span></span><span class="chipc t2">Scompenso <span class="g">· heart failure</span></span><span class="chipc t2">Valvulopatia <span class="g">· valvular disease</span></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ul class="points" style="margin-top:24px">
|
<ul class="points" style="margin-top:24px">
|
||||||
<li><b>Order encodes clinical precedence</b> — “Brugada” is matched before “TV”, so “substrato per TV” can't mask a Brugada pattern</li>
|
<li><b>Order encodes clinical precedence</b> — “Brugada” is matched before “TV”, so “substrato per TV” <span class="g">(“substrate for VT”)</span> can't mask a Brugada pattern</li>
|
||||||
<li><b>Synonyms live inline</b> — FA / f.a. / fib. atriale / atrial fibrillation → one canonical label</li>
|
<li><b>Synonyms live inline</b> — FA / f.a. / fib. atriale / atrial fibrillation → one canonical label</li>
|
||||||
<li><b>Versioned like software</b> — semver per pattern library, <code>pattern_version</code> on every extracted row</li>
|
<li><b>Versioned like software</b> — semver for the pattern library, <code>pattern_version</code> on every extracted row</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">08 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">07 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
[DRAFT — Sara] Extraction needs a target vocabulary — that's the ontology. Tier 1 holds the eleven arrhythmological categories that matter most for our research; Tier 2 holds five structural conditions. The order of the rules is itself clinical knowledge: Brugada patterns are tested before TV, because "substrato per TV" often appears in Brugada reports and would otherwise mask the diagnosis.
|
[DRAFT — Sara] Extraction needs a target vocabulary — that's the ontology. Tier 1 holds the eleven arrhythmological categories that matter most for our research; Tier 2 holds five structural conditions. The order of the rules is itself clinical knowledge: Brugada patterns are tested before TV, because "substrato per TV" often appears in Brugada reports and would otherwise mask the diagnosis.
|
||||||
The ontology is versioned like software: a semantic version for the pattern library, stamped on every extracted row. When we add a synonym or fix a rule, the change is traceable — and the data can be rebuilt.
|
The ontology is versioned like software: a semantic version for the pattern library, stamped on every extracted row. When we add a synonym or fix a rule, the change is traceable — and the data can be rebuilt.
|
||||||
@@ -372,7 +333,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<div class="roi"><b class="k">Quality gate</b>An extraction is accepted only after 100 manual reviews confirm the agreed accuracy — the same standard for every new pattern release.</div>
|
<div class="roi"><b class="k">Quality gate</b>An extraction is accepted only after 100 manual reviews confirm the agreed accuracy — the same standard for every new pattern release.</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">09 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">08 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
[DRAFT — Sara] How do we know the extraction is right? Not by faith. Before any pattern release goes to production it passes a gate: on 100 manually reviewed records, procedure classification must reach 95% accuracy, pathology detection 85%. The Brugada cohort itself was reviewed by clinicians on dashboards — and that review fed back into the library: version 1.3.1 alone removed roughly 900 false positives.
|
[DRAFT — Sara] How do we know the extraction is right? Not by faith. Before any pattern release goes to production it passes a gate: on 100 manually reviewed records, procedure classification must reach 95% accuracy, pathology detection 85%. The Brugada cohort itself was reviewed by clinicians on dashboards — and that review fed back into the library: version 1.3.1 alone removed roughly 900 false positives.
|
||||||
And we never throw information away: negated and family findings are stored, only filtered when the research mart needs them. Sara: adjust the numbers/wording to what you are comfortable presenting.
|
And we never throw information away: negated and family findings are stored, only filtered when the research mart needs them. Sara: adjust the numbers/wording to what you are comfortable presenting.
|
||||||
@@ -397,7 +358,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<p class="hint">[MP: 6-7 real screenshots of the portal, anonymized or demo data]</p>
|
<p class="hint">[MP: 6-7 real screenshots of the portal, anonymized or demo data]</p>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">10 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">09 / 14</span></footer>
|
||||||
<aside class="notes">[DRAFT] A quick tour of what AritmoLab looks like today — six screenshots: patient profile, genetics, dashboards, the 360-degree view. What began as four islands is now one platform the Unit uses every day. MP: replace with real screenshots and a spoken tour.</aside>
|
<aside class="notes">[DRAFT] A quick tour of what AritmoLab looks like today — six screenshots: patient profile, genetics, dashboards, the 360-degree view. What began as four islands is now one platform the Unit uses every day. MP: replace with real screenshots and a spoken tour.</aside>
|
||||||
</section>
|
</section>
|
||||||
<!-- ============ 11 · CRISIS ============ -->
|
<!-- ============ 11 · CRISIS ============ -->
|
||||||
@@ -421,7 +382,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<div class="roi"><b class="k">The gap</b>Twenty years of data, one warehouse — and no fast road from a research question to an answer.</div>
|
<div class="roi"><b class="k">The gap</b>Twenty years of data, one warehouse — and no fast road from a research question to an answer.</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">11 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">10 / 14</span></footer>
|
||||||
<aside class="notes">[DRAFT] And here is the crisis of our story. The warehouse holds everything — but it speaks SQL. A clinician cannot query a star schema between two visits, and a researcher cannot build a study on raw tables. What research needs are datamarts: ready-made views for Health Intelligence, and clean cohort tables for multivariate analysis and machine learning. And building them by hand — even with coding agents helping — takes hours of careful, repetitive work for every single study. This is where our story got stuck.</aside>
|
<aside class="notes">[DRAFT] And here is the crisis of our story. The warehouse holds everything — but it speaks SQL. A clinician cannot query a star schema between two visits, and a researcher cannot build a study on raw tables. What research needs are datamarts: ready-made views for Health Intelligence, and clean cohort tables for multivariate analysis and machine learning. And building them by hand — even with coding agents helping — takes hours of careful, repetitive work for every single study. This is where our story got stuck.</aside>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -451,7 +412,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<p class="stat-note">The session is a conversation: refine the question, iterate on the datamart — every step reviewable.</p>
|
<p class="stat-note">The session is a conversation: refine the question, iterate on the datamart — every step reviewable.</p>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">12 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">11 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
[DRAFT] Third role: AI for the analysis itself. This is ThothII, our natural-language layer over the warehouse. A researcher asks "how many Brugada patients had an effective ablation?" in plain English; the AI writes the SQL over the star schema, proposes a datamart, and the researcher reviews the query before it runs. The result lands in Superset as statistics and dashboards.
|
[DRAFT] Third role: AI for the analysis itself. This is ThothII, our natural-language layer over the warehouse. A researcher asks "how many Brugada patients had an effective ablation?" in plain English; the AI writes the SQL over the star schema, proposes a datamart, and the researcher reviews the query before it runs. The result lands in Superset as statistics and dashboards.
|
||||||
The human stays in the loop — the AI proposes, the researcher approves. This is where the demo will go live in a couple of slides.
|
The human stays in the loop — the AI proposes, the researcher approves. This is where the demo will go live in a couple of slides.
|
||||||
@@ -476,7 +437,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<p class="hint">[MP: 6-7 real screenshots of ThothII — ask, review SQL, datamart, dashboard]</p>
|
<p class="hint">[MP: 6-7 real screenshots of ThothII — ask, review SQL, datamart, dashboard]</p>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">13 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">12 / 14</span></footer>
|
||||||
<aside class="notes">[DRAFT] Let me walk you through ThothII: the researcher asks the question in plain English; the AI proposes the SQL; the query is reviewed; the datamart is assembled; the dashboard comes alive. Six screens, a few minutes. MP: real screenshots.</aside>
|
<aside class="notes">[DRAFT] Let me walk you through ThothII: the researcher asks the question in plain English; the AI proposes the SQL; the query is reviewed; the datamart is assembled; the dashboard comes alive. Six screens, a few minutes. MP: real screenshots.</aside>
|
||||||
</section>
|
</section>
|
||||||
<!-- ============ 14 · HAPPY ENDING ============ -->
|
<!-- ============ 14 · HAPPY ENDING ============ -->
|
||||||
@@ -497,7 +458,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<p class="hint">[Illustrative data, modeled on published arrhythmology predictors — Brugada focus]</p>
|
<p class="hint">[Illustrative data, modeled on published arrhythmology predictors — Brugada focus]</p>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">14 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">13 / 14</span></footer>
|
||||||
<aside class="notes">[DRAFT — next step: two SVG charts, illustrative data modeled on real literature] And this is the happy ending. From one datamart, the Unit can run a multivariate analysis — which factors truly drive arrhythmic risk in Brugada patients — and train machine-learning models on the same table. What used to take weeks of manual data preparation now takes minutes. The AI did not replace the researcher: it gave the researcher back their time.</aside>
|
<aside class="notes">[DRAFT — next step: two SVG charts, illustrative data modeled on real literature] And this is the happy ending. From one datamart, the Unit can run a multivariate analysis — which factors truly drive arrhythmic risk in Brugada patients — and train machine-learning models on the same table. What used to take weeks of manual data preparation now takes minutes. The AI did not replace the researcher: it gave the researcher back their time.</aside>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -519,7 +480,7 @@
|
|||||||
<span>Dr. Sara Paratico - I.R.C.C.S. Policlinico San Donato</span>
|
<span>Dr. Sara Paratico - I.R.C.C.S. Policlinico San Donato</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">15 / 15</span></footer>
|
<footer class="foot"><span class="g">Role of AI in the Analysis of Unstructured Clinical Databases</span><span class="g">Dr. Marco Pancotti - MultiPhysixLab</span><span class="g">Dr. Sara Paratico - Gruppo San Donato</span><span class="g">San Donato Milanese, Milan, Italy · 2–3 October 2026</span><span class="g num">14 / 14</span></footer>
|
||||||
<aside class="notes">
|
<aside class="notes">
|
||||||
[DRAFT] Thank you for your attention. If you want to go deeper — the text miner, the mapping agents, ThothII — we are publishing the technical walkthroughs as videos on our Substack; the link is on the final version of this deck. And now, happy to take your questions.
|
[DRAFT] Thank you for your attention. If you want to go deeper — the text miner, the mapping agents, ThothII — we are publishing the technical walkthroughs as videos on our Substack; the link is on the final version of this deck. And now, happy to take your questions.
|
||||||
</aside>
|
</aside>
|
||||||
@@ -549,7 +510,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// jump dropdown — one select per slide, in the red band
|
// jump dropdown — one select per slide, in the red band
|
||||||
const JUMP_TITLES = ['Title', 'Where we started', 'What we wanted to build', 'AI for the mappings',
|
const JUMP_TITLES = ['Title', 'Where we started', 'What we wanted to build',
|
||||||
'The problem', 'What the text miner reads', 'Hard problems of clinical NLP', 'The clinical ontology',
|
'The problem', 'What the text miner reads', 'Hard problems of clinical NLP', 'The clinical ontology',
|
||||||
'Trust the text', 'AritmoLab today', 'All good? Not yet', 'ThothII', 'A tour of ThothII',
|
'Trust the text', 'AritmoLab today', 'All good? Not yet', 'ThothII', 'A tour of ThothII',
|
||||||
'From datamarts to models', 'Thank you'];
|
'From datamarts to models', 'Thank you'];
|
||||||
|
|||||||
Reference in New Issue
Block a user