funasr_onnx streaming Paraformer returns inconsistent structures for empty results

Geschlossen Anfängerfreundlich
#3,791 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@ychy7001 arbeitet bereits daran.

Seit 24.10.2026.

  • #3792 von @ychy7001 — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
68/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python
Bereich
api

Rechercherichtung

Lies funasr_onnx/paraformer_online_bin.py, insbesondere das Chunking des final calls um die Zeilen 172-186, wo die Ergebnisse in res = {} zusammengeführt werden, und vergleiche die Empty-Result-Rückgaben des nicht-finalen infer-Pfads und des Single-Chunk-Final-Pfads. Das Issue enthält bereits ein Repro-Skript mit Silence-Input und chunk_size=[5, 10, 5]; führe es aus, um alle drei Return-Shapes zu sehen. Beachte, dass der exakte Return-Contract von den Maintainern noch nicht bestätigt ist (das Issue fragt danach), daher ist ein Kommentar, der das Ziel-Shape ([]) bestätigt, vor dem Senden des PR mit einem Regressionstest der sichere Weg zum Abschluss.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Description

funasr_onnx.paraformer_online_bin.Paraformer.__call__ returns different structures when there is no recognition result, depending on which path is taken:

case return value
non-final call, no tokens (infer → asr_res = []) []
final call handled as one chunk, decoder runs but text is empty [{'preds': ['', []]}]
final call split into two chunks, neither chunk has a result (lines 172-186 merge into res = {}) [{}]

The last case means callers that read res[0]["preds"] after checking if res: hit KeyError: 'preds'; they have to check for an empty dict as well.

Reproduction

main (fbbfe01), iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online v2.0.5 exported to ONNX, onnxruntime 1.20.1, CPU. Silence is enough to trigger it; chunk_size=[5, 10, 5] (the package default) is used, so this is unrelated to #3789.

import numpy as np
from funasr_onnx.paraformer_online_bin import Paraformer

model = Paraformer(model_dir, batch_size=1, chunk_size=[5, 10, 5], quantize=False)
for n_final in (9600, 16000):
    cache = {}
    r1 = model(np.zeros(9600, np.float32), param_dict={"cache": cache, "is_final": False})
    r2 = model(np.zeros(n_final, np.float32), param_dict={"cache": cache, "is_final": True})
    print(n_final, r1, r2)

Output:

9600 [] [{'preds': ['', []]}]
16000 [] [{}]

Question

What is the intended return value when there is no result? Returning [] in the split-final path, consistent with the non-final path, looks simplest, but I am not sure whether existing callers rely on [{}] or on [{'preds': ['', []]}]. If you confirm the expected contract, I can send a small PR with a regression test.

Vorherrschende Sprache
Python
Sterne
20.9k
Forks
2.1k
Ø Merge
1 T. 3 Std.
Gemergte PRs (30 T.)
46

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus modelscope/FunASR

Alle Issues in modelscope/FunASR

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.