funasr_onnx streaming Paraformer returns inconsistent structures for empty results
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 68/100
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
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus modelscope/FunASR
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
modelscope/FunASR#3801 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
modelscope/FunASR#3796 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
`SentencepiecesTokenizer.ids2tokens` ignores `token_list` - root cause of the paraformer-en gibberish in #3040Evtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
modelscope/FunASR#3780 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
modelscope/FunASR#3762 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Bug: blank lines in wav.scp / jsonl file lists crash prepare_data_iterator (IndexError / JSONDecodeError)Evtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offenneeds feedback
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
modelscope/FunASR#3757 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in modelscope/FunASR
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
unionai-oss/pandera#2640 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
JdeRobot/RoboticsInfrastructure#843 ·
Maintainer antworten meist innerhalb von 1 Tag
-
automated endpoint-dead needs-curation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
almanac-data/climate-almanac#122 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:harness enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
evarness-ai/iris-harness#420 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
suitenumerique/find#206 ·
Maintainer antworten meist innerhalb von 2 Tagen