Summary
The official ModelScope checkpoint for FunAudioLLM/Fun-ASR-MLT-Nano-2512
contains no trained CTC decoder/head weights. FunASR initializes those layers
randomly, logs missing-key warnings, and still returns structurally valid but
semantically invalid timestamps.
Text transcription itself is accurate for English, Japanese, Korean, and Thai.
The issue is specifically the timestamp contract.
Environment
- FunASR: 1.3.14
- Model:
FunAudioLLM/Fun-ASR-MLT-Nano-2512
- Source: official ModelScope
master checkpoint
model.pt size: 1,971,162,898 bytes
model.pt SHA-256:
f7ddbef5ff8c57254e6a045f0b316501b704fe2b774f962efc6e402364e8fe37
- Device used for reproduction: CPU
- Input: clean TTS speech, approximately 7-11 seconds per sample
Checkpoint inspection
import torch
checkpoint = torch.load(
"model.pt",
map_location="meta",
weights_only=False,
mmap=True,
)
state = checkpoint["state_dict"]
print(len(state))
print(sum(key.startswith("ctc_decoder.") for key in state))
print(sum(key.startswith("ctc.") for key in state))
Output:
During AutoModel(...) initialization, FunASR reports 84 missing
ctc_decoder.* keys and 2 missing ctc.* keys.
Minimal inference path
from funasr import AutoModel
model = AutoModel(
model="FunAudioLLM/Fun-ASR-MLT-Nano-2512",
device="cpu",
disable_update=True,
)
result = model.generate(
input=["clean_tts.wav"],
cache={},
batch_size=1,
language="英文",
itn=True,
)
print(result[0]["text"])
print(result[0]["timestamps"][:3])
Observed results
Transcription similarity against the exact TTS source text:
| Language |
Similarity |
| Japanese |
1.0000 |
| Korean |
0.9792 |
| English |
1.0000 |
| Thai |
0.9947 |
The returned timestamps are not usable:
- Every returned timestamp has
score=0.0.
- Japanese: one character receives a 3.36-second span.
- Korean: one character receives a 7.14-second span.
- English: the token
blush receives a 6.06-second span in a 7.46-second clip.
- Thai: one token receives a 6.18-second span.
- Timestamps remain monotonic and within the audio duration, so a structural
validation alone does not detect the failure.
This is consistent with forced alignment running against a randomly initialized
CTC head.
Checkpoint size comparison
The official ModelScope base checkpoint is substantially larger:
| Checkpoint |
Size |
Fun-ASR-Nano-2512/model.pt |
2,127,426,538 bytes |
Fun-ASR-MLT-Nano-2512/model.pt |
1,971,162,898 bytes |
The difference is 156,263,640 bytes, which appears consistent with the missing
CTC decoder/head parameters.
Expected behavior
One of the following:
- Publish an MLT checkpoint containing trained
ctc_decoder.* and ctc.*
weights so the documented timestamp feature works for the 31-language model.
- If timestamps are not supported by this checkpoint, fail closed instead of
returning timestamps from randomly initialized layers, and document the
limitation.
Could you confirm whether a trained multilingual CTC checkpoint exists or
whether the MLT checkpoint was packaged without those weights?
Summary
The official ModelScope checkpoint for
FunAudioLLM/Fun-ASR-MLT-Nano-2512contains no trained CTC decoder/head weights. FunASR initializes those layers
randomly, logs missing-key warnings, and still returns structurally valid but
semantically invalid
timestamps.Text transcription itself is accurate for English, Japanese, Korean, and Thai.
The issue is specifically the timestamp contract.
Environment
FunAudioLLM/Fun-ASR-MLT-Nano-2512mastercheckpointmodel.ptsize: 1,971,162,898 bytesmodel.ptSHA-256:f7ddbef5ff8c57254e6a045f0b316501b704fe2b774f962efc6e402364e8fe37Checkpoint inspection
Output:
During
AutoModel(...)initialization, FunASR reports 84 missingctc_decoder.*keys and 2 missingctc.*keys.Minimal inference path
Observed results
Transcription similarity against the exact TTS source text:
The returned timestamps are not usable:
score=0.0.blushreceives a 6.06-second span in a 7.46-second clip.validation alone does not detect the failure.
This is consistent with forced alignment running against a randomly initialized
CTC head.
Checkpoint size comparison
The official ModelScope base checkpoint is substantially larger:
Fun-ASR-Nano-2512/model.ptFun-ASR-MLT-Nano-2512/model.ptThe difference is 156,263,640 bytes, which appears consistent with the missing
CTC decoder/head parameters.
Expected behavior
One of the following:
ctc_decoder.*andctc.*weights so the documented timestamp feature works for the 31-language model.
returning timestamps from randomly initialized layers, and document the
limitation.
Could you confirm whether a trained multilingual CTC checkpoint exists or
whether the MLT checkpoint was packaged without those weights?