CoolFace
Datasetpublic

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.

sourceHugging Facecc0-1.0updated 2mo agoView on Hugging Face
3likes52downloads
Dataset Card

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 segments columns 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://:

python
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.

bash
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-300m

Known 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_segments vs num_segments_raw in the tapes config. 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 (the part column). Labels are not linked across tapes either.
  • Coverage: the model occasionally stops early; the pipeline continues from the last timestamp, but per-tape coverage_s in the tapes config 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:

bash
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"