pianissimo-da

KlangAI/pianissimo-da

作者
KlangAI
任务
语音识别
下载量
40
点赞数
5
趋势分
5
许可证
cc-by-4.0
收录时间
2026/11/7

language:

  • da license: cc-by-4.0 pipeline_tag: automatic-speech-recognition library_name: nemo base_model: nvidia/parakeet-tdt-0.6b-v3 base_model_relation: finetune tags:
  • speech
  • audio
  • fastconformer
  • tdt
  • danish metrics:
  • wer

Klang Pianissimo for Danish

Pianissimo-da is our open speech recognition model for Danish. Across three Danish evaluation sets, it achieved 11.8% mean word error rate, the best result among the open and closed models we tested.

Built on NVIDIA Parakeet v3, Pianissimo has 600 million parameters and runs at over 3,600× realtime on one NVIDIA H100, or 500× on one L4. It supports punctuation, capitalization and word-level timestamps. We release it under CC BY 4.0, with versions for servers, laptops and phones so you can run it on your own hardware and keep control of your recordings.

Try Pianissimo or read how we trained it. We also release Pianissimo for Swedish.

Usage

Install PyTorch and nemo_toolkit[asr].

Load the model and transcribe a 16 kHz mono audio file:

import torch
from nemo.collections.asr.models import ASRModel

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = ASRModel.from_pretrained(
    model_name="KlangAI/pianissimo-da",
    map_location=device,
).eval()

with torch.inference_mode():
    hypotheses = model.transcribe(
        audio=["audio.wav"],
        batch_size=1,
        return_hypotheses=True,
    )

print(hypotheses[0].text)

For multiple files, pass a list of paths and increase batch_size to suit your GPU.

Timestamps

Add timestamps=True to obtain word and segment timestamps:

with torch.inference_mode():
    hypotheses = model.transcribe(
        audio=["audio.wav"],
        batch_size=1,
        return_hypotheses=True,
        timestamps=True,
    )

for word in hypotheses[0].timestamp["word"]:
    print(word["start"], word["end"], word["word"])

Vocabulary

NeMo's built-in phrase boosting supports custom vocabulary: list names and terms to help the model spell them correctly. The ONNX and MLX versions support it with our own implementation. The words and phrases are case sensitive.

import copy
from omegaconf import open_dict

decoding = copy.deepcopy(model.cfg.decoding)
with open_dict(decoding):
    decoding.strategy = "greedy_batch"
    decoding.greedy.boosting_tree = {
        "key_phrases_list": [
            "Klang AI", "Pianissimo", "Folketinget", "Aarhus Universitet",
        ],
        "context_score": 1.0,
        "depth_scaling": 2.0,
        "use_triton": False,
    }
    decoding.greedy.boosting_tree_alpha = 1.0
model.change_decoding_strategy(decoding)

Quantized versions

Run Pianissimo on a CPU with ONNX or GGUF, on an Apple silicon GPU with MLX, or on the Apple Neural Engine with CoreML. The table compares word error rates on 200 Danish FLEURS clips (38 minutes); lower is better.

VersionRuns onDownloadWER (%)Speed
Original fp32 (this model)PyTorch and NeMo2.51 GB6.5—
ONNX int8CPU684 MB6.735× (Intel), 74× (Mac)
ONNX int4CPU525 MB7.212× (Intel), 37× (Mac)
ONNX fp16CPU1.46 GB6.518× (Intel), 55× (Mac)
ONNX fp32CPU2.56 GB6.518× (Intel), 55× (Mac)
MLX 8-bitApple silicon GPU759 MB6.6151×
MLX 4-bitApple silicon GPU528 MB7.1126×
MLX bf16Apple silicon GPU1.25 GB6.5140×
MLX fp32Apple silicon GPU2.51 GB6.5173×
GGUF Q8_0CPU or GPU with transcribe.cpp740 MB6.4—
GGUF Q5_K_MCPU or GPU with transcribe.cpp549 MB6.5—
GGUF Q4_K_MCPU or GPU with transcribe.cpp485 MB6.5—
GGUF F16CPU or GPU with transcribe.cpp1.26 GB6.6—
GGUF F32CPU or GPU with transcribe.cpp2.51 GB6.6—
CoreML 8-bitApple Neural Engine632 MB6.9183× (M5)
CoreML fp16Apple Neural Engine1.22 GB7.0174× (M5)

All versions are scored after lowercasing and removing punctuation.

Speed is measured in multiples of realtime (RTFx), with the model loaded. ONNX and MLX timings use the Swedish model with the same architecture and a 30-second clip: an Intel Xeon Platinum 8481C with 4 CPU threads, an Apple M5 Pro with 6 CPU threads, or the M5 Pro GPU for MLX. CoreML timings use the 200 Danish clips on an Apple M5 Neural Engine.

The ONNX versions run on Windows, Linux and Mac, with Intel, AMD or ARM processors:

import onnx_asr  # pip install onnx-asr[cpu,hub]

model = onnx_asr.load_model("KlangAI/pianissimo-da-onnx", quantization="int8")
print(model.recognize("audio.wav"))

The MLX versions run on the GPU of Macs with Apple silicon. They use a small loader file included in each MLX repository; see the MLX 8-bit model card for how to use it.

Quality and speed

Danish speech recognition

We tested Pianissimo on European Parliament speeches, DR television programmes and spontaneous speech from DanPASS: 11.55 hours across 10,933 segments, held out of its fine-tuning. The table shows word error rates (%), with equal weight given to the three sets in the mean. Lower is better.

ModelMeanEU ParliamentDR TVSpontaneous (DanPASS)
Pianissimo-da11.87.918.29.4
ElevenLabs Scribe v2 (closed)12.38.619.19.3
edda-v0.2-duo13.19.220.49.6
brage-v113.29.119.910.7
saga-2-m13.38.820.110.9
hviske-v613.58.421.410.7
Mistral Voxtral Small (closed)13.88.819.113.6
OpenAI GPT Transcribe (closed)14.210.019.912.6
Google Gemini 3.5 Transcribe (closed)14.99.121.114.3
Whisper large-v317.010.522.817.7
Parakeet TDT 0.6B v325.516.332.328.0
  • EU Parliament: Danish parliamentary speeches.
  • DR TV: Danish television programmes.
  • DanPASS: people speaking freely and having conversations.

All models received the same audio and were scored against the same references. See the release article for the full comparison.

Throughput

Pianissimo-da reaches over 3,600× realtime on one NVIDIA H100, or 542× on one NVIDIA L4—1 second to process over one hour of audio on the H100.

Architecture

Pianissimo-da uses a FastConformer encoder and Token-and-Duration Transducer (TDT) decoder, retaining Parakeet v3's architecture and tokenizer.

PropertyValue
ParametersApproximately 600 million
Audio input16 kHz, mono
Features128-band log-mel spectrogram
Encoder24 layers, 8× subsampling
Default attentionLocal, 256 encoder frames on each side per layer
Checkpoint size2.51 GB

Unlike the original Parakeet checkpoint's full attention, Pianissimo-da defaults to local attention with approximately 20.5 seconds of context in each direction per layer. This keeps attention computation linear in recording length and makes long recordings practical.

Training

We fine-tuned Pianissimo-da on approximately 70,000 hours of Danish speech, including public datasets such as CoRal, Common Voice, FLEURS and FT Speech, alongside our own collection of publicly available speech. Training ran in three phases, moving from the broad dataset to its highest-quality subset, for 470,000 steps. Augmentation included reverberation, noise, compression, reduced bandwidth, and gain changes.

License and citation

Pianissimo-da is released under CC BY 4.0.

@misc{klang2026pianissimoda,
  title = {Klang Pianissimo for Danish},
  author = {{Klang}},
  year = {2026},
  howpublished = {Hugging Face model repository},
  url = {https://huggingface.co/KlangAI/pianissimo-da}
}

内容来源:Hugging Face 模型卡

在 Hugging Face 查看