Skip to content

Expose confidence estimation / token probabilities (currently always 1.0) #55

Open

Description

@NatakuZ

Description:
I'm running nemotron-3.5-asr-streaming-0.6b via nemo-speech.cpp's /v1/audio/transcriptions endpoint. The confidence field in the response is always exactly 1.0, regardless of whether the transcription is actually correct.

Concrete example: audio saying "chi è Alfonso?" (Italian) is transcribed as "che è alfonso" (wrong word) — still returns confidence: 1.0. It also returns 1.0 on pure silence and on clearly hallucinated/garbled output.

I switched to running the same model through the full NeMo Python toolkit directly (not this C++ port), enabling decoding_cfg.confidence_cfg with the entropy-based method (tsallis entropy, entropy_norm: exp) documented in NeMo's own docs. That gives real, varying per-word confidence values (e.g., 0.02–0.9 depending on the utterance), which is genuinely useful for rejecting hallucinated output — something a flat 1.0 can't do.

Is there a plan to expose this confidence estimation in nemo-speech.cpp's API? The underlying decoder already computes per-token probabilities to pick output tokens, so it seems like this would be a matter of exposing an existing internal computation rather than a fundamental limitation — similar to a related open request on transcribe.cpp (#164) asking for per-token logprobs on Parakeet TDT/Qwen3-ASR.

Happy to share the exact confidence_cfg I used if useful!

Activity

  1. pskrunner14 commented on Sep 30, 2026

    @pskrunner14
    Member

    @NatakuZ agreed this is a useful feature we should expose. Will take this up soon and yes would be great if you can share your cfg and more failure cases!

  2. self-assigned this
    on Sep 30, 2026
  3. NatakuZ commented on Sep 30, 2026

    @NatakuZ
    Author

    cd "$(dirname "$0")/.." || exit 1
    . services/lib.sh

    start() {
    if svc_up "$HEALTH"; then
    pgrep -f -- 'nemo-speech serve' 2>/dev/null | head -1 > "$PIDFILE"
    echo "$NAME: already running"; return 0
    fi
    if [ ! -x "$NEMO_BIN" ]; then
    echo "$NAME: FAILED — $NEMO_BIN not found or not executable"; return 1
    fi
    echo "$NAME: starting..."
    nohup "$NEMO_BIN" serve --host 127.0.0.1 --port 8090 --device cuda:0
    --asr-model nemotron-3.5 \ (if possibile with p)
    --tts-model magpie
    --codec-model nvidia/nemo-nano-codec-22khz-1.89kbps-21.5fps
    --tokenizer-dir nvidia/magpie_tts_multilingual_357m
    --api-key "$(cat ~/.nemo_key)" --no-ui --access-log
    </dev/null >"$LOG" 2>&1 &
    echo $! >"$PIDFILE"
    if wait_health "$HEALTH" 120; then
    echo "$NAME: ready"
    else
    echo "$NAME: FAILED to come up — check $LOG"; return 1
    fi
    }

    stop() { stop_pidfile "$NAME" "$PIDFILE"; }
    status() { if svc_up "$HEALTH"; then echo "$NAME: up ($NEMO_URL)"; else echo "$NAME: down"; return 1; fi; }

    dispatch start stop status "${1:-}"

    for now i am using the python system with Parakeet , before i in the start thinking the issue is from the model, and i swap with nemotron-3.5, b

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions