davanstrien/apollo-11-diarized
Apollo 11 Mission Audio — Diarized Transcripts Machine-generated transcripts with speaker diarization and timestamps for 103 tapes (175 hours) of Apollo 11 mission audio from the Internet Archive's Apollo11Audio collection (NASA recordings, public domain). Generated in a single Hugging Face Job with OpenMOSS-Team/MOSS-Transcribe-Diarize (0.9B, Apache 2.0) — joint transcription + speaker attribution + timestamps in one generation pass per clip. Configs segments… See the full description on the dataset page: https://huggingface.co/datasets/davanstrien/apollo-11-diarized.
Apollo 11 Mission Audio — Diarized Transcripts
Machine-generated transcripts with speaker diarization and timestamps for 103 tapes (175 hours) of Apollo 11 mission audio from the Internet Archive's Apollo11Audio collection (NASA recordings, public domain).
Generated in a single Hugging Face Job with OpenMOSS-Team/MOSS-Transcribe-Diarize (0.9B, Apache 2.0) — joint transcription + speaker attribution + timestamps in one generation pass per clip.
Configs
- `segments` (45355 rows):
tape,part,start,end,speaker,text. Timestamps are seconds from tape start. - `tapes` (103 rows): per-tape duration, transcript coverage, parts, speaker sets.
- `embeddings` (45355 rows): the
segmentscolumns plus a 768-d EmbeddingGemma-300m vector per utterance (normalized, document prompt) — see below.
Semantic search (embeddings config)
Every utterance embedded so the transcripts can be searched by meaning, not just keywords ("trouble with the radio signal" finds "We have loss of signal now"). Try it in the search Space, or query the vectors directly with DuckDB — no download, straight over hf://:
import duckdb
from sentence_transformers import SentenceTransformer
q = SentenceTransformer("google/embeddinggemma-300m").encode(
["trouble with the radio signal"], prompt_name="query", normalize_embeddings=True
)[0].tolist()
duckdb.execute("""
SELECT text, tape, start,
array_cosine_similarity(embeddings::FLOAT[768], ?::FLOAT[768]) AS sim
FROM 'hf://datasets/davanstrien/apollo-11-diarized/embeddings/*.parquet'
ORDER BY sim DESC LIMIT 10
""", [q]).df()Generated with one more Job — the `generate-embeddings.py` recipe from uv-scripts: 45,355 utterances in 261 s on a `t4-small`, $0.03.
hf jobs uv run --flavor t4-small -s HF_TOKEN \
https://huggingface.co/datasets/uv-scripts/embeddings/raw/main/generate-embeddings.py \
davanstrien/apollo-11-diarized <output-dataset> \
--config segments --column text --model google/embeddinggemma-300mKnown limitations
- ASR quality: this is scratchy 1969 radio audio; expect mishearings (e.g. "Apollo eleven" sometimes transcribed as "Follow eleven").
- Degenerate output filtered: on long non-speech stretches (static, carrier hiss, Quindar tones — and some tapes in the source collection are entirely empty transfers) the model hallucination-loops. Segments that are empty, dots-only, malformed, internally repetitive (zlib compression-ratio > 2.4, the Whisper heuristic), or identical to >2 preceding segments were dropped; compare
num_segmentsvsnum_segments_rawin thetapesconfig. Raw unfiltered output is preserved in the generation bucket. - Speaker labels (
S01,S02, ...) are anonymous and consistent only within a part: tapes longer than ~55 min are processed in clips and the labels reset between them (thepartcolumn). Labels are not linked across tapes either. - Coverage: the model occasionally stops early; the pipeline continues from the last timestamp, but per-tape
coverage_sin thetapesconfig shows any remaining gaps (170/175 h covered overall).
Reproduction
Generated with the `moss-transcribe-diarize-server.py` recipe from uv-scripts. The recipe serves the model with sglang-omni inside the job and transcribes files concurrently (37.8x realtime aggregate on a100-large). Run it yourself:
hf jobs run --detach --flavor a100-large -s HF_TOKEN --timeout 8h \
-v hf://buckets/user/audio-files:/input:ro \
-v hf://buckets/user/transcripts:/output \
lmsysorg/sglang:nightly-dev-cu13-20260709-074bb928 -- \
bash -c "pip install -q uv; git clone --depth 1 https://github.com/sgl-project/sglang-omni.git && cd sglang-omni && uv venv .venv -p 3.12 && . .venv/bin/activate && uv pip install . && (sgl-omni serve --model-path OpenMOSS-Team/MOSS-Transcribe-Diarize --host 0.0.0.0 --port 8000 --max-running-requests 16 --mem-fraction-static 0.80 &) && uv run https://huggingface.co/datasets/uv-scripts/transcription/raw/main/moss-transcribe-diarize-server.py /input /output --concurrency 6 --emit-txt"