ko-finance-asr-corrections
Frequency-annotated Korean ASR confusion pairs from finance/stock YouTube — dataset + benchmark.
한국어 금융·주식 유튜브 자동자막에서 실측한 ASR 오인식→교정 쌍 데이터셋과 벤치마크.
모든 쌍에 관측 빈도와 검증 메타데이터(2-LLM 합의 감사, 3단 승격 티어)가 붙어 있습니다.
This data is produced and verified by the live pipeline of
껄무새 (Ggulmuse) — a Korean stock-YouTube claim-tracking
archive. The pairs here are the byproduct of correcting real YouTube auto-captions at scale.
Why this exists
- Korean ASR error-correction data is scarce: the public sets are KEBAP (2.5K pairs,
error-type labels, frozen since 2023) and DasanCallDial (2026, call-centre STT output paired
with corrected sentences, non-commercial licence). Neither is finance-domain and neither
carries observed frequencies.
- No public "confusion pair dictionary with observed frequencies" exists in any language
(as of our 2026-08 survey). Frequency is what makes a pair list actionable: it tells you
which errors dominate real traffic (e.g.
펀더멘탈→펀더멘털 ×3,272,
변합기→변압기 ×1,691,
FMC→FOMC ×3,913 — full scan of a
9,184-video caption corpus).
- Every pair carries provenance: how it was mined, which auditor models independently agreed,
and its promotion tier (human-approved / registry-verified).
What's inside
| Path | Contents |
|---|
data/ | Confusion pairs (JSON/CSV): wrong, right, observed_count, tier, verification metadata. Stock names and finance terms, plus a small labelled tail of ordinary Korean the same pipeline verified (category) — no person names, no source sentences. |
benchmark/ | Mini benchmark v0.8: pure-stdlib scorer, a 1,193-item synthetic evaluation set (no caption text), a mechanical trap-risk miner, and three dictionary baselines. Fixes and over-corrections are scored together — see benchmark/README.md. |
docs/SCHEMA.md | Field-by-field schema. |
docs/METHODOLOGY.md | The no-gold-label verification loop: 2 independent LLM auditors → consensus-only adoption → external registry check → 3-tier promotion → instant rollback. |
How often does the ASR actually get it wrong?
Each pair carries both counts — the misrecognized form and the verified one — from the same
scan, so a pair states an error rate rather than just a frequency. This is the part no one
outside the pipeline can produce: it takes the corpus, not the dictionary.
| Pair | Wrong | Right | Error rate |
|---|
엔트로픽 → 앤트로픽 | 3,059 | 403 | 88.4% |
장기체 → 장기채 | 1,191 | 220 | 84.4% |
FMC → FOMC | 3,913 | 1,713 | 69.6% |
휴먼노이드 → 휴머노이드 | 1,419 | 268 | 84.1% |
15 pairs have right_count: 0 , which is a stronger statement than a high rate:
across 9,184 videos the auto-captions never once produced the correct spelling.
보스턴 다이내믹스 is in that group.
The corpus behind those rates:
- 9,184 videos
- 69 channels — a count, not a list; the profile describes the
corpus without identifying its sources
- 3,676.0 hours of speech, averaging 24.0 minutes a video
Read the rates as this corpus, this ASR system: the denominator is Korean finance YouTube
auto-captions, not Korean speech in general. And corpus_count counts a surface form, not a
confirmed error — see Known limitations.
Using it as ASR biasing vocabulary
data/biasing-list.txt is the verified forms alone, ordered by how badly each is
misrecognized — a phrase list for contextual biasing, a Whisper initial_prompt, or a
rescoring lexicon. Recent work in this area synthesizes plausible pronunciation variants to
build such lists; here the variants are the wrong column, observed rather than generated,
with counts attached. Regenerate it with scripts/make_biasing_list.py; the validator fails
if it drifts from data/pairs.json.
What was taken back out
data/withdrawn.json lists pairs that shipped and were later removed — five so far, all after
a full-corpus recheck found sentences they damaged. Two were dropped outright (하스 → 하이닉스
fires inside 하이퍼스케일러들; SPB means both SPV and S&P) and three were narrowed rather
than dropped, with the replacement keys named in the file. The newest, 삼성자 → 삼성전자, is
the expensive kind: it was right 1,180 times out of 1,215 and still went, because the 35
remaining fire inside 삼성자산운용 and Korean gives the replacer no boundary to stop at. Five
particle-suffixed keys took over and reach 236 of those matches.
A withdrawal does not mean every application was wrong. 바위 → 바이오 was correct 34 times
out of 71 — the rest were the ordinary word for rock — which is exactly why it became
제약 바위 → 제약 바이오 instead of disappearing. If you copied an earlier snapshot, this file
is the list of keys to stop applying, and what to apply instead.
The benchmark in one table
Task: fix the misrecognition, change nothing else. Three ways of using the dataset itself as
a correction system, scored on 1,193 synthetic items (no caption text),
of which 54 are traps — ordinary sentences a blind replacement damages. Net score is fixes minus over-corrections,
over error items.
This is the beginning of the README. Read the rest at the original. Read the full README ↗