Clinical Zero-Shot Labeler
A tool for adapting ACES (Automated Cohort and Event Selection) task schemas to zero-shot labeling of clinical sequences.
Overview
The Clinical Zero-Shot Labeler extends ACES task schemas, originally designed for cohort extraction and binary classification tasks, to work with generative models. This allows you to:
- Use existing ACES task definitions for generative tasks
- Control sequence generation using ACES predicates and windows
- Extract labels from generated sequences using ACES criteria
By leveraging the ACES schema, you can define complex clinical tasks like:
- ICU mortality prediction
- Lab value forecasting
- Readmission risk assessment
- etc.
All without needing to modify code or retrain models, and maintaining compatibility with existing ACES configurations.
Installation
pip install clinical-zeroshot-labeler
Quick Start
- Define your task in YAML:
predicates:
hospital_discharge:
code: {regex: HOSPITAL_DISCHARGE//.*}
lab:
code: {regex: LAB//.*}
abnormal_lab:
code: {regex: LAB//.*}
value_min: 2.0
value_min_inclusive: true
trigger: hospital_discharge
windows:
input:
start:
end: trigger
start_inclusive: true
end_inclusive: true
index_timestamp: end
target:
start: input.end
end: start + 4d
start_inclusive: false
end_inclusive: true
has:
lab: (1, None)
label: abnormal_lab
- Set up your metadata mapping:
import polars as pl
# Load a metadata mapping of medical codes to vocabulary indices your generative model generates
metadata_df = pl.DataFrame(
{
"code": [
"PAD",
"HOSPITAL_DISCHARGE//MEDICAL",
"LAB//NORMAL",
"LAB//HIGH",
]
}
).with_row_index("code/vocab_index")
- Process sequences and get labels:
from clinical_zeroshot_labeler import SequenceLabeler
# Initialize labeler
labeler = SequenceLabeler.from_yaml_str(task_config_yaml, metadata_df, batch_size=2)
# Process tokens one at a time
while not labeler.is_finished():
# Get next tokens from your model
tokens, times, values = model.generate_next_token(prompts)
# Update labeler state
status = labeler.process_step(tokens, times, values)
print(
f"Status: {status}"
) # Shows 0=Undetermined, 1=Active, 2=Satisfied, 3=Impossible
# Update your model's prompts as needed
prompts = tokens
# Get final labels
labels = labeler.get_labels()
See the notebooks/tutorial.ipynb to run the SequenceLabeler on a mocked Generator.
API Reference
SequenceLabeler
Main class for processing sequences and extracting labels:
# Create from YAML string
labeler = SequenceLabeler.from_yaml_str(yaml_str, metadata_df, batch_size)
# Create from YAML file
labeler = SequenceLabeler.from_yaml_file(yaml_path, metadata_df, batch_size)
# Process tokens (returns status tensor)
status = labeler.process_step(tokens, times, values)
# Check if finished
is_done = labeler.is_finished()
# Get labels
labels = labeler.get_labels()
The labeler tracks window states for each sequence:
0: Undetermined - Initial state1: Active - Currently processing2: Satisfied - Success/completion3: Impossible - Failed/invalid
Metadata
Release files for clinical-zeroshot-labeler 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| clinical_zeroshot_labeler-0.0.3.tar.gz | 37.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| clinical_zeroshot_labeler-0.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.7 kB
Release files / clinical_zeroshot_labeler-0.0.3.tar.gz
| Download URL | clinical_zeroshot_labeler-0.0.3.tar.gz |
|---|---|
| Size | 37.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3528b8aea4570ab310f1830075768151e6f791c21698c9ae7edd4ffe172cc416
|
|
BLAKE2b-256 checksum How to use checksums |
2f0f33edb2705d879a9bc0273e5b78b1a5e2d767d5d9799bf4b6957eea4949b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.0.1 CPython/3.12.8
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 31, 2024.
Transparency logRelease files / clinical_zeroshot_labeler-0.0.3-py3-none-any.whl
| Download URL | clinical_zeroshot_labeler-0.0.3-py3-none-any.whl |
|---|---|
| Size | 20.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f0f1ecf30d39d5252a6ebf38673b09bec75d27ab03d70dd7634f68b6e3fcfdb7
|
|
BLAKE2b-256 checksum How to use checksums |
9b213cd3523662b41585846bbd1916cee1d1959687d583628ce0fc1478f88e28
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.0.1 CPython/3.12.8
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 31, 2024.
Transparency log