Skip to content

[Fun-ASR-MLT-Nano-2512] Official checkpoint omits CTC weights but still returns invalid timestamps #3208

Description

@cutebug0523

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:

1261
0
0

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:

  1. Publish an MLT checkpoint containing trained ctc_decoder.* and ctc.*
    weights so the documented timestamp feature works for the 31-language model.
  2. 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?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions