Notesoop-STT-Ko-v2

Model

Language Speedup CER Audio Encoder VRAM Training Data Platform License

Download on the App Store  Get it on Google Play

Notesoop-STT-Ko-v2๋Š” ๋…ธํŠธ์ˆฒ(Notesoop)์ด ๊ฐœ๋ฐœํ•œ ์ฐจ์„ธ๋Œ€ ํ•œ๊ตญ์–ด ์˜จ๋””๋ฐ”์ด์Šค ์Œ์„ฑ์ธ์‹(ASR) ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด Notesoop-STT-Ko-v1์„ ๋Œ€ํญ ๋ฐœ์ „ยทํ™•์žฅํ•œ ๋ชจ๋ธ์ด๋ฉฐ, Apple Silicon(PyTorch MPS), NVIDIA CUDA GPU, ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU์—์„œ ๋ชจ๋‘ ๊ณ ์† ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Google EmbeddingGemma-2์˜ ์˜ค๋””์˜ค ์ธ์ฝ”๋” ํ‘œํ˜„(MRL 256์ฐจ์›) ์œ„์— ๊ฒฝ๋Ÿ‰ Conformer ์Œํ–ฅ ๋ฆฌ๋”, 2,048 BPE ์ดˆ๊ตฌ๋ฉด ์ฝ”์‚ฌ์ธ CTC ํ—ค๋“œ, ์„œ๋ธŒ๋ฐ€๋ฆฌ์ดˆ(< 1ms) ๋„ค์ดํ‹ฐ๋ธŒ C++17 ๋น” ์„œ์น˜์™€ 5-Gram KenLM ์–ธ์–ด ๋””์ฝ”๋”๋ฅผ ๊ฒฐํ•ฉํ•œ ๋น„์ž๊ธฐํšŒ๊ท€(Non-Autoregressive) ๋‹จ์ผ ํŒจ์Šค ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค.

V1์ด ๋Œ€ํ•™ ์ „๊ณต ๊ฐ•์˜์— ํŠนํ™”๋˜์–ด ์žˆ์—ˆ๋‹ค๋ฉด, V2๋Š” 300GB ๊ฐ•์˜ ์Œ์„ฑ์— 230GB ์ž์œ  ๋Œ€ํ™” ์Œ์„ฑ์„ ๋”ํ•œ ์ด 530GB ์ฝ”ํผ์Šค๋กœ ํ•™์Šตํ•˜์—ฌ ๊ฐ•์˜๋ฟ ์•„๋‹ˆ๋ผ ์ผ์ƒ ๋Œ€ํ™”, ์ธํ„ฐ๋ทฐ, ํšŒ์˜ ๋“ฑ ์ผ๋ฐ˜ ํ•œ๊ตญ์–ด ์Œ์„ฑ ์ „๋ฐ˜์—์„œ ์ •ํ™•๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ ํฌ๊ฒŒ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์„ฑ๊ณผ

Apple M1 Pro 16GB, PyTorch MPS ์‹ค์ธก ๊ธฐ์ค€

์‹ค์ „ ๊ฐ•์˜ (41๋ถ„ 43์ดˆ, Field Test)

์ง€ํ‘œ ๊ฒฐ๊ณผ Whisper-large-v3 ๋Œ€๋น„
์ฒ˜๋ฆฌ ์‹œ๊ฐ„ 59.3์ดˆ (42.2๋ฐฐ์†, RTF 0.0237) 11.9๋ฐฐ ๋น ๋ฆ„
CER 21.19% 4.36%p ๋‚ฎ์Œ
VRAM 1.4GB 4.5๋ฐฐ ์ ์Œ

ํ‘œ์ค€ ๋ฒค์น˜๋งˆํฌ (Zeroth-Korean, V1 โ†’ V2)

์ง€ํ‘œ V1 V2 ๊ฐœ์„ 
CER 15.88% 10.47% -5.41%p
WER 45.28% 35.07% -10.21%p
์ถ”๋ก  ์†๋„ 20.3x 28.5x +40.4%
Host RAM 2,639MB 1,405MB -46.7%

๐Ÿ“„ ์ปค์Šคํ…€ Apple Metal Compute Shader ํ•™์Šต ์—”์ง„, Zero-Disk 530GB ์ŠคํŠธ๋ฆฌ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ, ์ˆ˜์‹ ๋ถ„์„์€ TECHNICAL_REPORT_v2.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋ชฉ์ฐจ

  1. Background & Design Goals
  2. Model Specifications
  3. What's New in V2
  4. Benchmark
  5. Quickstart
  6. Repository Structure
  7. License & Citation

Background & Design Goals

๋…ธํŠธ์ˆฒ์€ "ํ•™์Šต์˜ ๋น„ํšจ์œจ์„ ์ค„์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ๋„๊ตฌ๊ฐ€ ์•„๋‹Œ ๋ฐฐ์›€์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝํ—˜์„ ๋งŒ๋“ ๋‹ค" ๋Š” ๋ฏธ์…˜ ์•„๋ž˜ ์˜จ๋””๋ฐ”์ด์Šค AI ์Œ์„ฑ ๊ธฐ์ˆ ์„ ์—ฐ๊ตฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. V1์ด ๊ธด ๊ฐ•์˜์—์„œ์˜ ์˜จ๋””๋ฐ”์ด์Šค ๊ณ ์† ์ „์‚ฌ ๊ฐ€๋Šฅ์„ฑ์„ ์ž…์ฆํ–ˆ๋‹ค๋ฉด, V2๋Š” ๋‹ค์–‘ํ•œ ๋ฐœํ™” ํ™˜๊ฒฝ๊ณผ ํ•˜๋“œ์›จ์–ด์—์„œ ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฒ”์šฉ ํ•œ๊ตญ์–ด ์ธ์‹๋ ฅ (General Domain ASR): ์ •์ œ๋œ ๊ฐ•์˜ยท๋ฐœํ‘œ๋ฟ ์•„๋‹ˆ๋ผ ์ผ์ƒ ๋Œ€ํ™”, ๋น ๋ฅธ ๋ฐœํ™”, ์ถ”์ž„์ƒˆ, ์ธํ„ฐ๋ทฐ ๋“ฑ ๋น„์ •ํ˜• ๊ตฌ์–ด์ฒด์—์„œ๋„ ๋†’์€ ์ •ํ™•๋„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ค์งˆ์ ์ธ ์˜จ๋””๋ฐ”์ด์Šค ์†๋„ (Non-Autoregressive Efficiency): ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ์™€ GPU-CPU ๋น„๋™๊ธฐ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ธด ์˜ค๋””์˜ค๋„ ์‹ค์‹œ๊ฐ„ ๋Œ€๋น„ ์ˆ˜์‹ญ ๋ฐฐ ๋น ๋ฅด๊ฒŒ ์ „์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ดˆ๊ฒฝ๋Ÿ‰ ๋ฆฌ์†Œ์Šค (Low Memory Footprint): ์•ฝ 1.3~1.4GB์˜ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธํ˜• ๋งฅ๋ถ(8GB/16GB)๊ณผ ๋ชจ๋ฐ”์ผยท์—ฃ์ง€ ํ™˜๊ฒฝ์—์„œ๋„ PDF ์—ด๋žŒยทํ•„๊ธฐ ์•ฑ๊ณผ ํ•จ๊ป˜ ์พŒ์ ํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ํฌ๋กœ์Šคํ”Œ๋žซํผ & ์˜คํ”ˆ ์ƒํƒœ๊ณ„: Apple MPS, NVIDIA CUDA(bfloat16), CPU ๋ฐฑ์—”๋“œ์™€ macOS/Linux/Windows์šฉ C++ ๋น” ์„œ์น˜ ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ์ถ”๋ก  ์—”์ง„ ์ „์ฒด๋ฅผ Apache-2.0 ๋ผ์ด์„ ์Šค๋กœ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค.

Model Specifications

16kHz Mono Audio
  โ””โ”€โ–ถ 128-Bin Log-Mel (20ms Win / 10ms Hop)
        โ””โ”€โ–ถ Frozen EmbeddingGemma-2 Backbone (MRL 256-dim, L2-Norm)
              โ””โ”€โ–ถ 10-Layer Conformer Reader (d=384, h=6, k=15)
                    โ””โ”€โ–ถ Spherical Cosine CTC Head (2,048 BPE)
                          โ””โ”€โ–ถ C++17 Rolling-Hash Beam Search (< 1ms) + 5-Gram KenLM (80.2MB)
                                โ””โ”€โ–ถ Overlap Deduplication & Clean Transcript
ํ•ญ๋ชฉ ์ƒ์„ธ ์‚ฌ์–‘
Model Name Notesoop-STT-Ko-v2 (์‹ ๊ทœ ๋ชจ๋ธ)
Audio Backbone google/embeddinggemma-2 (Frozen, 16kHz Mono, 128-Mel, MRL 256-dim)
Acoustic Reader ๊ฒฝ๋Ÿ‰ ํ•œ๊ตญ์–ด Conformer Reader (10-Layer, 34.3M params, d=384, h=6, k=15)
Vocabulary / Tokenizer 2,048 BPE SentencePiece (ko_bpe_2048.model)
Language Rescoring KenLM 5-Gram ํ•œ๊ตญ์–ด ์–ธ์–ด ๋ชจ๋ธ (320๋งŒ ๋ฌธ์žฅ, 80.2MB)
Beam Search Engine Native C++17 Rolling-Hash CTC Beam Search (< 1ms / chunk, Python Fallback ์ง€์›)
Supported Backends PyTorch MPS (bfloat16), NVIDIA CUDA (bfloat16), Multi-core CPU
Training Data ์ด 530GB (AI Hub ๊ฐ•์˜ ์Œ์„ฑ 300GB + ์ž์œ  ๋Œ€ํ™” ์Œ์„ฑ 230GB)
Domain Coverage ์ „๊ณต ๊ฐ•์˜, ํ•™์ˆ  ๋ฐœํ‘œ, ์ผ์ƒ ๋Œ€ํ™”, ์ธํ„ฐ๋ทฐ, ํšŒ์˜ ๋“ฑ
License Apache-2.0

ํŒŒ๋ผ๋ฏธํ„ฐ ๊ตฌ์„ฑ

๋ฐฐํฌ ์ฒดํฌํฌ์ธํŠธ (checkpoints/NoteSoop_stt_v2_best.pt, 133MB)

๋ชจ๋“ˆ ํŒŒ๋ผ๋ฏธํ„ฐ
AudioToVectorReader 34.3M (34,281,601)
CosineCTCHead 0.53M (526,594)
ํ•ฉ๊ณ„ (ํ•™์Šต ํŒŒ๋ผ๋ฏธํ„ฐ) 34.8M (34,808,195)
  • BatchNorm ํ†ต๊ณ„ ๋ฒ„ํผ๋ฅผ ํฌํ•จํ•œ state_dict๋Š” 34,815,875 ์›์†Œ์ž…๋‹ˆ๋‹ค.

๋™๊ฒฐ ๋ฐฑ๋ณธ (google/embeddinggemma-2, ํŠน์ง• ์ถ”์ถœ ๋‹จ๊ณ„์—์„œ MRL 256์ฐจ์› ํ‘œํ˜„ ์ถ”์ถœ)

๋ชจ๋“ˆ ํŒŒ๋ผ๋ฏธํ„ฐ
audio_tower 304.8M
embed_audio 0.8M
language_model 271.0M
ํ•ฉ๊ณ„ 576.6M (576,613,664)
  • ๋ฏธ์‚ฌ์šฉ embed_vision(0.39M) ํฌํ•จ ์‹œ 577.0M์ž…๋‹ˆ๋‹ค.

What's New in V2

๊ตฌ๋ถ„ Notesoop-STT-Ko-v1 Notesoop-STT-Ko-v2 (New) ํ•ต์‹ฌ ๊ฐœ์„  ํšจ๊ณผ
ํ•™์Šต ์ฝ”ํผ์Šค ์•ฝ 300GB (๊ฐ•์˜ ์Œ์„ฑ) ์ด 530GB (๊ฐ•์˜ 300GB + ์ž์œ  ๋Œ€ํ™” 230GB) ๊ตฌ์–ด์ฒดยท์ผ์ƒ ๋Œ€ํ™” ๋ฐ ์ฆ‰ํฅ ๋ฐœํ™” ๋Œ€์‘ ๊ฐ•ํ™”
ํ† ํฌ๋‚˜์ด์ € 25,000 ํ˜•ํƒœ์†Œยท์Œ์ ˆ ์‚ฌ์ „ 2,048 SentencePiece BPE ์ถœ๋ ฅ ์ฐจ์› 12.2๋ฐฐ ์ถ•์†Œ, OOV ๋Œ€์‘๋ ฅ ํ–ฅ์ƒ, RAM 47% ์ ˆ๊ฐ
์–ธ์–ด ๋ชจ๋ธ KenLM 3-Gram (82.7MB) KenLM 5-Gram (320๋งŒ ๋ฌธ์žฅ, 80.2MB) ์žฅ๊ฑฐ๋ฆฌ ์กฐ์‚ฌยท์–ด๋ฏธ ํ˜ธ์‘ ๋ฐ ๋„์–ด์“ฐ๊ธฐ ์ •ํ™•๋„ ํ–ฅ์ƒ
๋น” ์„œ์น˜ / ๋ณ‘ํ•ฉ ๊ธฐ๋ณธ C++ / Python ๋น” ์„œ์น˜ C++17 Rolling-Hash (< 1ms) + Fuzzy LCS ๋ณ‘ํ•ฉ ๋””์ฝ”๋”ฉ ๋ณ‘๋ชฉ ์ œ๊ฑฐ, ์ฒญํฌ ๊ฒฝ๊ณ„ ์ค‘๋ณต ์–ต์ œ
์ง€์› ํ”Œ๋žซํผ Apple Silicon MPS ์ค‘์‹ฌ Apple MPS ยท NVIDIA CUDA ยท Multi-core CPU ์žฅ์น˜ ์ž๋™ ๊ฐ์ง€, Linux/macOS/Windows ์ž๋™ ๋นŒ๋“œ

1. 230GB ์ž์œ  ๋Œ€ํ™” ์Œ์„ฑ ์ถ”๊ฐ€ ํ•™์Šต (์ด 530GB)

์ „๊ณต ์šฉ์–ด์™€ ๊ฒฉ์‹์ฒด ์ค‘์‹ฌ์˜ 300GB ๊ฐ•์˜ ์Œ์„ฑ์—, ๋‹ค์–‘ํ•œ ์„ฑ๋ณ„ยท์—ฐ๋ น๋Œ€์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ตฌ์–ด์ฒด๊ฐ€ ๋‹ด๊ธด 230GB ์ž์œ  ๋Œ€ํ™” ์Œ์„ฑ์„ ๊ฒฐํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ๊ทœ์น™ํ•œ ๋ฐœํ™” ์†๋„, ์ถ”์ž„์ƒˆ, ๊ตฌ์–ด์ฒด ์ถ•์•ฝ, ๊ฐ•์˜ ์ค‘ ์ฆ‰ํฅ ์„ค๋ช… ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ ์Œํ–ฅ ๊ฐ•๊ฑด์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2. 2,048 BPE ํ† ํฌ๋‚˜์ด์ € & 5-Gram KenLM ์–ธ์–ด ๋ชจ๋ธ

ํ˜•ํƒœ์†Œ์™€ ์Œ์ ˆ์„ ๊ท ํ˜• ์žˆ๊ฒŒ ์••์ถ•ํ•˜๋Š” 2,048 ํฌ๊ธฐ SentencePiece BPE ์‚ฌ์ „์œผ๋กœ ํฌ์†Œ ํ† ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด์†Œํ•˜๊ณ  ๋ฏธ๋“ฑ๋ก ์–ดํœ˜(OOV)ยท์™ธ๋ž˜์–ด ๋ณต์›๋ ฅ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— 320๋งŒ ๋ฌธ์žฅ์œผ๋กœ ๊ตฌ์ถ•ํ•œ 5-Gram KenLM(80.2MB) ์„ ๊ฒฐํ•ฉํ•ด ๋ฌธ๋งฅ ์ž์—ฐ์Šค๋Ÿฌ์›€๊ณผ ๋„์–ด์“ฐ๊ธฐ ์™„์„ฑ๋„๋ฅผ ๋Œ์–ด์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค.

3. ํฌ๋กœ์Šคํ”Œ๋žซํผ ๊ณ ์„ฑ๋Šฅ ์ถ”๋ก  & ์ง€๋Šฅํ˜• ์ฒญํฌ ๋ณ‘ํ•ฉ

  • device="auto"๋กœ CUDA / MPS / CPU ์ค‘ ์ตœ์ ์˜ ๋ฐฑ์—”๋“œ๋ฅผ ์ž๋™ ์„ ํƒํ•˜๊ณ  bfloat16 Fastpath๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • GPU ๋ฐฐ์น˜ ํฌ์›Œ๋“œ์™€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ C++ ๋น” ์„œ์น˜๋ฅผ ๋น„๋™๊ธฐ๋กœ ์ค‘์ฒฉ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒญํฌ ์˜ค๋ฒ„๋žฉ ๊ตฌ๊ฐ„์—๋Š” ์ตœ๋Œ€ 8-์–ด์ ˆ ์ •ํ™• ๋งค์นญ, ๋ฌธ์ž ๋‹จ์œ„ Fuzzy LCS ์ •๋ ฌ, ๋ฐ˜๋ณต ๋ฐœํ™” ํ•„ํ„ฐ๋ฅผ ์ˆœ์ฐจ ์ ์šฉํ•˜์—ฌ ๋งค๋„๋Ÿฌ์šด ์žฅ๋ฌธ ์ „์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Benchmark

Notesoop-STT-Ko-v2๋ฅผ (1) ๊ณต์ธ ํ‘œ์ค€ ๋ฒค์น˜๋งˆํฌ(Zeroth-Korean) ์™€ (2) ์‹ค์ œ ๋Œ€ํ•™ ์ „๊ณต ๊ฐ•์˜ ๋กฑํผ ๋…น์Œ(41๋ถ„ 43์ดˆ Field Test) ์œผ๋กœ ํ‰๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์˜จ๋””๋ฐ”์ด์Šค ์ธก์ •์€ Apple M1 Pro (16GB ํ†ตํ•ฉ ๋ฉ”๋ชจ๋ฆฌ, PyTorch MPS bfloat16, KenLM 5-Gram Beam Search ์ตœ์ ํ™” ํŒŒ์ดํ”„๋ผ์ธ) ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.

1. ํ‘œ์ค€ ํ•œ๊ตญ์–ด ๋ฒค์น˜๋งˆํฌ (Zeroth-Korean Test Set, 457๋ฌธ์žฅ)

Bingsu/zeroth-korean ํ…Œ์ŠคํŠธ ์„ธํŠธ(457๊ฐœ ๋ฐœํ™”, 1์‹œ๊ฐ„ 11๋ถ„ 27์ดˆ / 4,287์ดˆ) ์ „์ˆ˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ๋ช… ์†Œ์š” ์‹œ๊ฐ„ โฑ๏ธ RTF ์‹ค์‹œ๊ฐ„ ๋ฐฐ์† โšก Host RAM MPS VRAM ๐Ÿ–ฅ๏ธ CER ๐ŸŽฏ WER
Notesoop-STT-Ko-v2 (2K BPE + 5-Gram KenLM) ๐Ÿš€ 150.21์ดˆ (2๋ถ„ 30์ดˆ) 0.0350 28.5x 1,405.5 MB 1,376.1 MB 10.47% 35.07%
Notesoop-STT-Ko-v1 (Notesoop MPS) 211.12์ดˆ (3๋ถ„ 31์ดˆ) 0.0492 20.3x 2,639.2 MB 1,469.4 MB 15.88% 45.28%
๊ฐœ์„ ํญ (V1 โ†’ V2) -60.91์ดˆ (-28.8%) -0.0142 +40.4% ๊ฐ€์† -46.7% -6.3% -5.41%p -10.21%p
  • CER 5.41%p ๊ฐœ์„  (15.88% โ†’ 10.47%): ์ž์œ  ๋Œ€ํ™” ์Œ์„ฑ ์ถ”๊ฐ€ ํ•™์Šต๊ณผ 2K BPE ๋„์ž…์œผ๋กœ ์˜ค์ฐจ์œจ์„ ์ƒ๋Œ€ ๊ธฐ์ค€ ์•ฝ 34.1% ์ค„์˜€์Šต๋‹ˆ๋‹ค.
  • WER 10.21%p ๊ฐœ์„  (45.28% โ†’ 35.07%): 5-Gram KenLM ๊ฒฐํ•ฉ์œผ๋กœ ์–ด์ ˆ ๊ฒฝ๊ณ„์™€ ๋„์–ด์“ฐ๊ธฐ ์ •ํ™•๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”๋ก  ์†๋„ 40.4% ํ–ฅ์ƒ (20.3x โ†’ 28.5x): 1์‹œ๊ฐ„ 11๋ถ„ ๋ถ„๋Ÿ‰์„ ๋‹จ 2๋ถ„ 30์ดˆ์— ์ „์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • Host RAM 46.7% ์ ˆ๊ฐ (2,639.2MB โ†’ 1,405.5MB): ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ ์ ์œ ์œจ์ด ์ ˆ๋ฐ˜ ๊ฐ€๊นŒ์ด ์ค„์–ด 8GB/16GB ๊ธฐ๊ธฐ์—์„œ๋„ ์—ฌ์œ ๋กญ๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

2. ์‹ค์ „ ์ „๊ณต ๊ฐ•์˜ ๋กฑํผ ๋…น์Œ (41๋ถ„ 43์ดˆ, Field Test)

๋ฐฐ๊ฒฝ ์†Œ์Œ, ๋ง๋”๋“ฌ, ์ž”ํ–ฅ์ด ํฌํ•จ๋œ ์‹ค์ œ ๋Œ€ํ•™ ์ „๊ณต ๊ฐ•์˜ ๋…น์Œ(2,503.34์ดˆ)์— ๋Œ€ํ•œ ์‹ค์ธก ๋น„๊ต์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ๋ช… ๋””๋ฐ”์ด์Šค / ๋ฐฑ์—”๋“œ ์ „์‚ฌ ์†Œ์š” ์‹œ๊ฐ„ โฑ๏ธ ์ฒด๊ฐ ์†๋„ โšก RTF CER ๐ŸŽฏ WER MPS VRAM ๐Ÿ–ฅ๏ธ
Notesoop-STT-Ko-v2 (์ตœ์ ํ™” ํŒŒ์ดํ”„๋ผ์ธ) ๐Ÿš€ Apple MPS (bf16) 59.3์ดˆ (59.32s) 42.2x 0.0237 21.19% 37.77% 1,394 MB
Notesoop-STT-Ko-v1 (๊ณต์‹ README ๊ธฐ์ค€) Apple MPS (bf16) 1๋ถ„ 2์ดˆ (62.70s) 39.9x 0.0251 22.46% 39.25% 1,537 MB
Whisper-medium (OpenAI) Apple MPS 4๋ถ„ 11์ดˆ (251.5s) 10.0x 0.1005 26.68% 45.82% 3,467 MB
Whisper-large-v3 (OpenAI) Apple MPS 11๋ถ„ 45์ดˆ (704.9s) 3.6x 0.2816 25.55% 42.10% 6,325 MB
  • 1๋ถ„ ๋ฒฝ ๋ŒํŒŒ (42.2x): 41๋ถ„ 43์ดˆ ๋ถ„๋Ÿ‰์˜ ๊ฐ•์˜๋ฅผ 59.32์ดˆ์— ์ „์‚ฌํ•˜์—ฌ Whisper-large-v3(704.9์ดˆ) ๋Œ€๋น„ ์•ฝ 11.9๋ฐฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ๋Œ€ํ˜• ๋ชจ๋ธ ๋Œ€๋น„ ๋†’์€ ์ •ํ™•๋„: CER 21.19% ๋กœ V1(22.46%) ๋Œ€๋น„ 1.27%p ํ–ฅ์ƒ๋˜์—ˆ๊ณ , Whisper-large-v3(25.55%) ๋Œ€๋น„ 4.36%p ๋‚ฎ์Šต๋‹ˆ๋‹ค.
  • ์ดˆ๊ฒฝ๋Ÿ‰ ๋ฉ”๋ชจ๋ฆฌ (VRAM 1,394MB): Whisper-large-v3(6,325MB) ๋Œ€๋น„ ์•ฝ 4.5๋ฐฐ ์ ์€ VRAM์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ๋‹ค๋ฅธ ์ž‘์—…๊ณผ ๋™์‹œ์— ์‹คํ–‰ํ•ด๋„ ์Šค์™€ํ•‘์ด๋‚˜ ๋ณ‘๋ชฉ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

Quickstart

1. Installation

์š”๊ตฌ ์‚ฌํ•ญ

  • OS: macOS (Apple Silicon M1 ์ด์ƒ ๊ถŒ์žฅ), Linux/Windows (NVIDIA CUDA GPU ์ง€์›)
  • Python: 3.10 ์ด์ƒ
  • git-lfs: ๋Œ€์šฉ๋Ÿ‰ ๋ชจ๋ธ ํŒŒ์ผ(.pt, .bin, .model) ๋‹ค์šด๋กœ๋“œ
  • ffmpeg: ๋‹ค์–‘ํ•œ ์˜ค๋””์˜ค ํฌ๋งท(.m4a, .mp3, .flac ๋“ฑ) ๋””์ฝ”๋”ฉ
# 1) Git LFS ํ™œ์„ฑํ™” ํ›„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ณต์ œ
git lfs install
git clone https://huggingface.co/Phsoft-ai/Notesoop-STT-Ko-v2
cd Notesoop-STT-Ko-v2

# 2) ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

์ฐธ๊ณ 

  • ffmpeg: macOS๋Š” brew install ffmpeg, Ubuntu/Debian์€ sudo apt install ffmpeg
  • KenLM ์„ค์น˜ ์‹คํŒจ ์‹œ: pip install https://github.com/kpu/kenlm/archive/master.zip
  • ์˜ค๋””์˜ค ์ธ์ฝ”๋”: ์ฒซ ์‹คํ–‰ ์‹œ google/embeddinggemma-2 ๊ฐ€์ค‘์น˜๋ฅผ Hugging Face์—์„œ ์ž๋™์œผ๋กœ ๋‚ด๋ ค๋ฐ›์Šต๋‹ˆ๋‹ค. ์ ‘๊ทผ ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๋จผ์ € huggingface-cli login์„ ์‹คํ–‰ํ•˜์„ธ์š”.

2. CLI Usage

transcribe.py๋กœ ์Œ์„ฑ ํŒŒ์ผ์„ ๋ฐ”๋กœ ์ „์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (.wav, .m4a, .mp3, .flac ๋“ฑ ์ง€์›)

# ๊ธฐ๋ณธ ์‹คํ–‰ (์žฅ์น˜ ์ž๋™ ๊ฐ์ง€, KenLM 5-Gram ํ™œ์„ฑํ™”)
python transcribe.py --audio sample_audio.wav

# NVIDIA CUDA GPU์—์„œ ๋Œ€์šฉ๋Ÿ‰ ๋ฐฐ์น˜ ์ „์‚ฌ (RTX 3090/4090, A100 ๋“ฑ)
python transcribe.py --audio my_audio.wav --device cuda --batch_size 16

# Apple Silicon MPS์—์„œ ์‹คํ–‰
python transcribe.py --audio my_audio.m4a --device mps --batch_size 4

# ์žฅ์‹œ๊ฐ„ ์˜ค๋””์˜ค ์ „์‚ฌ ํ›„ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ €์žฅ
python transcribe.py --audio lecture.m4a --output result.txt

# Greedy ๋””์ฝ”๋”ฉ ๋ชจ๋“œ (KenLM ๋น„ํ™œ์„ฑํ™”, ๊ฐ€์žฅ ๋น ๋ฆ„)
python transcribe.py --audio sample_audio.wav --no_kenlm
์ฃผ์š” CLI ์˜ต์…˜
์˜ต์…˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
--audio sample_audio.wav ์ž…๋ ฅ ์˜ค๋””์˜ค ํŒŒ์ผ ๊ฒฝ๋กœ
--device auto ์—ฐ์‚ฐ ๋””๋ฐ”์ด์Šค (auto, cuda, mps, cpu)
--batch_size 4 ์ฒญํฌ ๋ฐฐ์น˜ ํฌ๊ธฐ (CUDA์—์„œ๋Š” 8~16 ๊ถŒ์žฅ)
--chunk_sec 15.0 ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์ฒญํฌ ๊ธธ์ด(์ดˆ)
--overlap_sec 1.0 ์ฒญํฌ ๊ฐ„ ์ค‘์ฒฉ ๊ธธ์ด(์ดˆ)
--beam_size 16 CTC ๋น” ์„œ์น˜ ํฌ๊ธฐ
--alpha / --beta 0.18 / 0.35 KenLM ์–ธ์–ด ๋ชจ๋ธ ๊ฐ€์ค‘์น˜(alpha) / ์–ด์ ˆ ์‚ฝ์ž… ๋ณด๋„ˆ์Šค(beta)
--no_kenlm False KenLM ๋ฆฌ์Šค์ฝ”์–ด๋ง ๋น„ํ™œ์„ฑํ™” (Greedy ๋””์ฝ”๋”ฉ)
--output None ์ „์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  .txt ํŒŒ์ผ ๊ฒฝ๋กœ

3. C++ Fast Beam Search ๋นŒ๋“œ (์„ ํƒ ์‚ฌํ•ญ)

< 1ms ์ˆ˜์ค€์˜ C++17 CTC Beam Search ์—”์ง„์„ ์ง์ ‘ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

# macOS (.dylib), Linux (.so), Windows (.dll) ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž๋™ ์ปดํŒŒ์ผ
python build_fast_beam.py

macOS์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” src/libfast_beam_search_v3.dylib๋กœ ๊ธฐ๋ณธ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์—†์–ด๋„ transcribe.py ์‹คํ–‰ ์‹œ ์‹œ์Šคํ…œ ์ปดํŒŒ์ผ๋Ÿฌ(g++/clang++)๊ฐ€ ์žˆ์œผ๋ฉด ์ž๋™์œผ๋กœ ์ปดํŒŒ์ผ๋˜๋ฉฐ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์—†์œผ๋ฉด Python Fallback์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.


4. Benchmark Suite

RTF, ์‹ค์‹œ๊ฐ„ ๋ฐฐ์†, Host RAM / GPU VRAM ์ ์œ ์œจ, CER/WER์„ ์ง์ ‘ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ ๋ฒค์น˜๋งˆํฌ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

# ๊ธฐ๋ณธ ๋ฒค์น˜๋งˆํฌ (์žฅ์น˜ ์ž๋™ ๊ฐ์ง€)
python benchmark.py --audio sample_audio.wav

# ์ •๋‹ต ํ…์ŠคํŠธ ๋Œ€๋น„ CER/WER ์ธก์ • ๋ฐ JSON ์ €์žฅ (CUDA ์˜ˆ์‹œ)
python benchmark.py --audio sample_audio.wav --ground_truth reference.txt --device cuda --batch_size 16 --output_json result.json

5. Python API

from transcribe import EmbeddingGemmaSTTV2

# ์ถ”๋ก  ์—”์ง„ ์ดˆ๊ธฐํ™” (CUDA / MPS / CPU ์ž๋™ ๊ฐ์ง€)
stt = EmbeddingGemmaSTTV2(
    device="auto",        # "auto", "cuda", "mps", "cpu"
    use_kenlm=True,
    beam_size=16
)

# ์Œ์„ฑ ์ „์‚ฌ
transcript, rtf = stt.transcribe(
    audio_path="sample_audio.wav",
    chunk_sec=15.0,
    overlap_sec=1.0,
    batch_size=4
)

print(f"์ „์‚ฌ ๊ฒฐ๊ณผ: {transcript}")
print(f"์ฒ˜๋ฆฌ ๋ฐฐ์†: {1.0 / rtf:.1f}x Real-time (RTF: {rtf:.4f})")

Repository Structure

Notesoop-STT-Ko-v2/
โ”œโ”€โ”€ README.md                            # Model Card ๋ฐ ์‚ฌ์šฉ ์„ค๋ช…์„œ
โ”œโ”€โ”€ TECHNICAL_REPORT_v2.md               # ์•„ํ‚คํ…์ฒ˜ยทMetal ํ•™์Šตยท๋ฒค์น˜๋งˆํฌ ํ…Œํฌ๋‹ˆ์ปฌ ๋ฆฌํฌํŠธ
โ”œโ”€โ”€ LICENSE                              # Apache-2.0 ๋ผ์ด์„ ์Šค
โ”œโ”€โ”€ requirements.txt                     # ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชฉ๋ก
โ”œโ”€โ”€ transcribe.py                        # ํ†ตํ•ฉ ์ „์‚ฌ CLI ๋ฐ Python API (Batched + Async)
โ”œโ”€โ”€ benchmark.py                         # CUDA / MPS / CPU ์„ฑ๋Šฅ(VRAM, RTF, CER/WER) ๋ฒค์น˜๋งˆํฌ
โ”œโ”€โ”€ build_fast_beam.py                   # C++ Fast Beam Search ๋‹ค์ค‘ OS ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ sample_audio.wav                     # ํ…Œ์ŠคํŠธ์šฉ ์ƒ˜ํ”Œ ์˜ค๋””์˜ค
โ”œโ”€โ”€ checkpoints/
โ”‚   โ””โ”€โ”€ NoteSoop_stt_v2_best.pt          # Conformer Reader ๋ชจ๋ธ ๊ฐ€์ค‘์น˜ (133MB)
โ”œโ”€โ”€ lm/
โ”‚   โ””โ”€โ”€ ko_bpe_2048_lm.bin               # 5-Gram KenLM ์–ธ์–ด ๋ชจ๋ธ (80.2MB)
โ”œโ”€โ”€ tokenizer/
โ”‚   โ””โ”€โ”€ ko_bpe_2048.model                # 2,048 BPE SentencePiece ํ† ํฌ๋‚˜์ด์ €
โ””โ”€โ”€ src/
    โ”œโ”€โ”€ model.py                         # Conformer Reader ์‹ ๊ฒฝ๋ง (CUDA bf16 / MPS ๋„ค์ดํ‹ฐ๋ธŒ)
    โ”œโ”€โ”€ dataset.py                       # ํ•œ๊ตญ์–ด 2K BPE ํ† ํฌ๋‚˜์ด์ € ๋ฐ ํ…์ŠคํŠธ ์ •๊ทœํ™”
    โ”œโ”€โ”€ decoder.py                       # KenLM 5-Gram ๋น” ์„œ์น˜ ๋””์ฝ”๋” (๋‹ค์ค‘ OS C++ ์—”์ง„ ๋กœ๋”)
    โ”œโ”€โ”€ fast_beam_search_v3.cpp          # C++17 Rolling-Hash CTC Beam Search ์†Œ์Šค
    โ”œโ”€โ”€ libfast_beam_search_v3.dylib     # macOS ์‚ฌ์ „ ๋นŒ๋“œ ๋ฐ”์ด๋„ˆ๋ฆฌ
    โ”œโ”€โ”€ mps_kernels.py                   # Apple Silicon Metal Compute Shader ํ•™์Šต ์ปค๋„
    โ””โ”€โ”€ step2_extract_features.py        # EmbeddingGemma-2 ์˜ค๋””์˜ค ํŠน์ง• ์ถ”์ถœ๊ธฐ

License & Citation

๋ณธ ๋ชจ๋ธ๊ณผ ์ฝ”๋“œ๋Š” Apache License 2.0 ํ•˜์— ๊ณต๊ฐœ๋˜๋ฉฐ, ์—ฐ๊ตฌ ๋ฐ ์ƒ์—…์  ๋ชฉ์ ์œผ๋กœ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@misc{notesoop2026sttkov2,
  author = {Notesoop AI Team},
  title = {Notesoop-STT-Ko-v2: Advanced Korean On-Device Speech Recognition},
  year = {2026},
  publisher = {Hugging Face},
  howpublished = {\url{https://huggingface.co/Phsoft-ai/Notesoop-STT-Ko-v2}},
  note = {Cross-Platform On-Device Korean STT (Apple Silicon MPS / NVIDIA CUDA / CPU)}
}

Notesoop (๋…ธํŠธ์ˆฒ) โ€” ํ•™์Šต์˜ ๋น„ํšจ์œจ์„ ์ค„์—ฌ, ๋„๊ตฌ๊ฐ€ ์•„๋‹Œ ๋ฐฐ์›€์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝํ—˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
๊ฐ•์˜ ๋…น์Œ, ํ•„๊ธฐ ์—ฐ๋™, ํ•ต์‹ฌ ์š”์•ฝ๋ถ€ํ„ฐ ๋ณต์Šต ํ€ด์ฆˆ๊นŒ์ง€ ํ•˜๋‚˜๋กœ ์ด์–ด์ง€๋Š” ํ•™์Šต ํ™˜๊ฒฝ์„ ๋…ธํŠธ์ˆฒ ์•ฑ์—์„œ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support