`SentencepiecesTokenizer.ids2tokens` ignores `token_list` - root cause of the paraformer-en gibberish in #3040
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Área
- backend, machine-learning
Línea de trabajo
Empieza en funasr/tokenizer/sentencepiece_tokenizer.py, en SentencepiecesTokenizer.ids2tokens, y sigue cómo Paraformer le pasa los IDs de token. Comprueba cómo se carga token_list y compara su orden con el del modelo SentencePiece para este caso. Actualiza el comportamiento de decodificación para que use la correspondencia de tokens prevista y luego verifica que la muestra en inglés reportada se decodifique correctamente y que los modelos existentes sigan siendo compatibles.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
iic/speech_paraformer-large-vad-punc_asr_nat-en-16k-common-vocab10020 is not mispackaged. The model predicts the right token ids; the text goes wrong at decoding. SentencepiecesTokenizer.ids2tokens ignores the loaded token_list (tokens.json) and decodes the ids with the BPE model's own id order. For this model the two orders differ, so every word is replaced by an unrelated one. Decoding the same ids through tokens.json gives correct English.
Environment
FunASR 1.4.16 (same code on current main), torch 2.14.1, Python 3.11, macOS arm64, CPU.
Root cause
funasr/tokenizer/sentencepiece_tokenizer.py:
def ids2tokens(self, *args, **kwargs):
return self.decode(*args, **kwargs) # -> self.sp.DecodeIds(ids)
Paraformer inference calls tokenizer.ids2tokens(token_int). The ids index tokens.json (10020 entries: <blank>, <s>, </s>, ~, <, ...), but sp.DecodeIds reads them as bpe.model ids (10000 pieces: <unk>, <s>, </s>, ▁the, s, ...). Weights load with "All keys matched successfully" and the decoder output size (10020) equals len(tokens.json).
Repro
from funasr import AutoModel
m = AutoModel(model="iic/speech_paraformer-large-vad-punc_asr_nat-en-16k-common-vocab10020", device="cpu")
tk = m.kwargs["tokenizer"]
cap = {}
orig = type(tk).ids2tokens
def spy(self, ids, **kw):
cap["ids"] = list(ids)
return orig(self, ids, **kw)
type(tk).ids2tokens = spy
print(m.generate(input="https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_en.wav")[0]["text"])
print(tk.sp.DecodePieces([tk.token_list[i] for i in cap["ids"]]))
Output on the official sample:
procedure telegram impatience phuket sleeping danielot pro
he tried to think how it could be
Line 1 is the gibberish reported in #3040; line 2 is the correct transcript from the same ids.
Suggested fix
def ids2tokens(self, integers, **kwargs):
if self.token_list is not None:
return [self.token_list[i] for i in integers]
return self.decode(integers, **kwargs)
Models whose tokens.json already follows bpe.model order decode the same either way.
- Lenguaje dominante
- Python
- Estrellas
- 20.8k
- Forks
- 2.1k
- Merge medio
- 1 d 46 min
- PR fusionados (30 d)
- 36
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de modelscope/FunASR
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
modelscope/FunASR#3762 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Bug: blank lines in wav.scp / jsonl file lists crash prepare_data_iterator (IndexError / JSONDecodeError)Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertoneeds feedback
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
modelscope/FunASR#3757 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
modelscope/FunASR#3730 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
modelscope/FunASR#3704 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
没有vllm时使用fun-asr-nano每次都重新加载模型Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug needs feedback
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
modelscope/FunASR#3401 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de modelscope/FunASR
Issues similares
-
`image_generation`: `max_retries` is ignored for OpenAI-compatible providers (always 2 retries)Posiblemente ocupada @ericz7900 la tomó hoy. Abiertollm translation
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
rheeloaded/paperpull#117 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 65/100
agenda-tech-brasil/agenda-tech-brasil#1619 · 1 comentario ·
-
process
Dificultad 1/5 1-3 horas Aptitud para principiantes 76/100
pyrite-wiki/pyrite#1036 ·
Los mantenedores suelen responder en 1 día