-
|
训练模型的时候总是报转入的语音是一个字符串类型没有size方法,但是语料在1.2.4版本是可以使用,现在使用的是1.2.7总是会有这个错误!!希望有大佬帮忙看下 |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
|
更正一下上一条回复:FunASR 1.2.x 的标准训练 JSONL 字段是 截图已经给出了关键线索: 这里的 我下载并对比了官方 PyPI 的 FunASR 1.2.4 和 1.2.7 wheel: 先检查实际加载的是哪个 FunASR截图路径是本地源码目录 python -c 'import funasr; print(funasr.__version__); print(funasr.__file__)'扫描训练 JSONL 中不可见的音频路径请在与启动训练相同的工作目录和容器/节点环境中运行: python - /absolute/path/to/train.jsonl <<'PY'
import json
import sys
from pathlib import Path
manifest = Path(sys.argv[1]).resolve()
bad = 0
with manifest.open(encoding="utf-8") as f:
for line_no, line in enumerate(f, 1):
row = json.loads(line)
source = row.get("source")
if not isinstance(source, str):
print(f"line {line_no}: invalid source={source!r}")
bad += 1
continue
if source.startswith(("http://", "https://")):
continue
path = Path(source).expanduser()
# FunASR 1.2.x 按训练进程的 cwd 解析相对路径,不按 JSONL 所在目录解析。
resolved = path if path.is_absolute() else Path.cwd() / path
if not resolved.is_file():
print(f"line {line_no}: missing {source!r} -> {resolved.resolve()}")
bad += 1
print(f"bad sources: {bad}")
raise SystemExit(1 if bad else 0)
PY如果训练参数指向的是“JSONL 文件列表”而不是单个 JSONL,请对列表中的每个 JSONL 分别执行检查。 若使用 DDP 或容器,请在每个节点/容器中检查;“登录节点存在”不代表训练 worker 也能看到。最稳妥的是把 标准行应类似: {"key":"utt001","source":"/absolute/path/utt001.wav","source_len":350,"target":"转写文本","target_len":4}不要手工猜长度,可以用官方转换器从 python -m funasr.datasets.audio_datasets.scp2jsonl \
++scp_file_list='["/absolute/path/wav.scp", "/absolute/path/text"]' \
++data_type_list='["source", "target"]' \
++jsonl_file_out=/absolute/path/train.jsonl其中 当前版本这个旧错误现在已有防护:PR #2981 已合入,FunASR 1.3.14 和当前 因此建议升级到当前版本以得到清晰报错: python -m pip install -U "funasr==1.3.14"如果前面的 升级只能让错误更明确;真正需要修复的仍是 相关源码:当前音频加载保护、 |
Beta Was this translation helpful? Give feedback.

更正一下上一条回复:FunASR 1.2.x 的标准训练 JSONL 字段是
source,不是audio_filepath。截图中的错误也不是 1.2.4 到 1.2.7 的数据格式迁移。截图已经给出了关键线索:
这里的
input本应是音频 Tensor,却仍然是字符串。对于标准AudioDataset,最常见且可以精确复现的原因是:JSONL 中source指向的音频文件对训练进程不可见,例如路径不存在、相对路径基准不对、容器没有挂载该目录,或者某个 DDP 节点看不到文件。我下载并对比了官方 PyPI 的 FunASR 1.2.4 和 1.2.7 wheel:
wav_frontend.py、AudioDataset和IndexDSJsonl三个相关文件逐字节相同,音频加载分支也没有这项格式变化。用同一个真实 WAV 测试时,两版都返回 88,747 点的 Tensor;传入不存在的路径时,两版都会保留字符串,并复现与你截图完全相同的AttributeError: 'str' object has no attribute 'size'。先检查实际加载的是哪个 FunASR
截图路径是本地源码目录
.../FunASR-main/funasr/...,它可能覆盖了pip安装包。请先运行:python -c 'im…