`SentencepiecesTokenizer.ids2tokens` ignores `token_list` - root cause of the paraformer-en gibberish in #3040
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 78/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Domínio
- backend, machine-learning
Direção de pesquisa
Comece em funasr/tokenizer/sentencepiece_tokenizer.py, em SentencepiecesTokenizer.ids2tokens, e acompanhe como o Paraformer passa os IDs dos tokens para ele. Verifique como token_list é carregado e compare sua ordem com a do modelo SentencePiece neste caso. Atualize o comportamento de decodificação para usar o mapeamento de tokens pretendido e, em seguida, verifique se a amostra em inglês relatada é decodificada corretamente e se os modelos existentes continuam compatíveis.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Python
- Estrelas
- 20.8k
- Forks
- 2.1k
- Merge médio
- 23h 48min
- PRs com merge (30d)
- 38
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de modelscope/FunASR
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
modelscope/FunASR#3762 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Bug: blank lines in wav.scp / jsonl file lists crash prepare_data_iterator (IndexError / JSONDecodeError)Talvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Abertaneeds feedback
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
modelscope/FunASR#3757 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
modelscope/FunASR#3730 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
modelscope/FunASR#3704 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
没有vllm时使用fun-asr-nano每次都重新加载模型Talvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Abertabug needs feedback
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
modelscope/FunASR#3401 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de modelscope/FunASR
Issues semelhantes
-
good first issue priority: low size: XS testing
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 86/100
cubrid-lab/cubrid-mcp-server#385 ·
Mantenedores costumam responder em até 1 dia
-
good first issue priority: low size: S testing
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
cubrid-lab/cubrid-cookbook-python#447 ·
Mantenedores costumam responder em até 1 dia
-
Python PointcloudAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
ArduCAM/Arducam_tof_camera#125 ·
-
area:curator enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
CassioDalla/Scrinalia#150 ·
Mantenedores costumam responder em até 1 dia
-
documentation good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100