JOTO
Contact us
← AI 智库
模型训练

藏语ASR | 藏语语音识别 | Qwen3-ASR识别藏语

2026 年 9 月 11 日

本文记录基于阿里开源Qwen3-ASR-1.7B模型微调藏语语音识别系统的完整过程,涵盖藏语数据集准备(10+小时自采)、JSONL格式转换脚本、CUDA环境配置(需≥24GB显存GPU)、分布式训练命令及效果验证。训练后模型可输出藏文文本,显著优于原始模型输出中文的失效状态。

藏语ASR缺失现状与微调动因

在众多的开源模型中基本上没有可以准确识别藏语的语音识别模型,无论是国外开源的Whisper,还是国内阿里开源的Qwen3-ASR,均无法识别藏语,这个你们可以自行测试。如果我们需要本地化私有化部署一个可以识别藏语的语音识别项目,那么就需要使用大量的藏语数据集来训练模型。这里记录一位客户找到我训练藏语语音识别模型的过程,供你们参考学习。

首先我使用基于FunASR这个依赖使用Paraformer和SenseVoiceSmall都训练过,但是效果不理想,后面客户要求使用Qwen3-ASR来训练藏语语音识别模型,下面主要记录基于阿里开源的Qwen3-ASR-1.7B这个大模型来训练藏语语音识别模型的过程。

藏语数据集构建与格式转换

首先需要准备数据集,这里客户提供了10多个小时的藏语数据集,这些数据均是客户自己安排人员采集制作的。数据集要符合一定的格式要求,需要整理为jsonl格式文件,分为两个jsonl文件,一个是train.jsonl文件,这是训练集,还有一个是验证集val.jsonl。

{"audio": "/data/corpus/2026-08-11/converted/1000.wav", "text": "language Tibetanརང་ཉིད་ངལ་རྩོལ་གྲལ་རིམ་གྱི་བསམ་བློ་བཡིན་རློམ་བྱེད་བཞིན་དུ།"}

其中这个audio是指音频所在的绝对路径,然后这个text是音频对应的文字内容,当然前面还添加了语种标识language Tibetan,如果不想要语种标识,可以不添加这个,可以直接写音频对应的文字内容即可。

这里由于先做的paraformer训练,我这里编写了一个python脚本直接把paraformer_train.jsonl这样的数据转为这个Qwen3-ASR训练用的数据,下面是这个脚本代码。

#!/usr/bin/env python
# _*_ coding utf-8 _*_
# @Time: 2026/8/24 14:51
# @Author: Luke Ewin
# @Blog: https://blog.lukeewin.top
# 转换 paraformer 的训练的 jsonl 格式为符合 Qwen3-ASR 训练的格式
import json
import sys 

def convert_jsonl(input_file, output_file):
    """
    将原始JSONL转换为目标格式:
    - 原 'source' -> 新 'audio'
    - 原 'target' -> 新 'text',并在最前面添加 "language Tibetan"
    """
    with open(input_file, 'r', encoding='utf-8') as fin, \
         open(output_file, 'w', encoding='utf-8') as fout:
        for line in fin:
            line = line.strip()
            if not line:
                continue
            try:
                data = json.loads(line)
            except json.JSONDecodeError as e:
                print(f"跳过无效JSON行: {e}", file=sys.stderr)
                continue   # 提取所需字段
            audio_path = data.get('source')
            target_text = data.get('target')   # 如果缺少必要字段,跳过该行(也可选择报错)
            if audio_path is None or target_text is None:
                print("跳过缺少 'source' 或 'target' 的行", file=sys.stderr)
                continue   # 构建新记录
            new_record = {
                "audio": audio_path,
                "text": f"language Tibetan{target_text}"
            }   # 写入输出文件
            fout.write(json.dumps(new_record, ensure_ascii=False) + '\n')

if __name__ == "__main__":  # 使用方法:python script.py input.jsonl output.jsonl
    if len(sys.argv) != 3:
        print("用法: python convert.py  ", file=sys.stderr)
        sys.exit(1)     
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    convert_jsonl(input_file, output_file)
    print(f"转换完成,结果已保存至 {output_file}")

Qwen3-ASR训练环境搭建

上面准备好了数据集,就可以开始搭建训练的Python环境了,这里使用uv,当然你也可以使用其它的,比如conda。

安装好uv之后,就可以使用下面的命令创建一个python运行环境了。

uv venv --python 3.12

这里使用的python版本指定为3.12版本,其它的版本不知道是否可以。

激活环境:

source .venv/bin/activate

激活之后,就可以安装对应的python依赖了。

uv pip install -e .

这里是通过源码方式安装的qwen-asr依赖,此外,训练还需安装datasets依赖。

uv pip install datasets

需要主要的是一定要安装上这个cuda版本的torch,你执行上面两条安装命令的时候默认会给你安装上这个torch,可以检查一下,是否安装对了。

import torch
torch.cuda.is_available()

如果返回的是True就说明可以使用cuda。

系统安装的CUDA版本是13.2,如果使用的是5090显卡,需要安装的CUDA版本大于等于12.8。这里尽量选择安装最新版本的CUDA和显卡驱动。

训练loss下降曲线图
训练过程中loss值持续下降,表明训练有效

模型微调执行与硬件约束

经过上面的步骤,环境和数据集都做好了,就可以开始训练了,这里为了访问编写一个shell脚本,执行这个脚本就可以开始训练了。

#!/usr/bin/env bash
set -e 

export CUDA_VISIBLE_DEVICES=0 
MODEL_PATH="/opt/asr/Qwen3/models/Qwen3-ASR-1.7B"
TRAIN_FILE="/opt/asr/Qwen3/finetuning/data/train.jsonl"
EVAL_FILE="/opt/asr/Qwen3/finetuning/data/val.jsonl"
OUTPUT_DIR="/opt/asr/Qwen3/output" 

torchrun --nproc_per_node=1 qwen3_asr_sft.py \
  --model_path ${MODEL_PATH} \
  --train_file ${TRAIN_FILE} \
  --eval_file ${EVAL_FILE} \
  --output_dir ${OUTPUT_DIR} \
  --batch_size 2 \
  --grad_acc 4 \
  --lr 2e-5 \
  --epochs 10 \
  --log_steps 10 \
  --save_strategy steps \
  --save_steps 200 \
  --save_total_limit 5 \
  --num_workers 32 \
  --pin_memory 1 \
  --persistent_workers 1 \
  --prefetch_factor 2

需要根据自己的硬件条件修改上面的数值,比如服务器有一张显卡,那么就指定CUDA_VISIBLE_DEVICES=0,如果有多张,就可以使用CUDA_VISIBLE_DEVICES=0,1,这种方式添加多张显卡。还有这个batch_size的值一定要是2的n次方,这个n可以是非负整数。然后这个num_workers的值最大填写你服务器CPU核心数,比如这里有32个核心,就最大可以填写32,这个值也尽量填写2的n次方,同样这个n可以是非负整数。

授予可执行权限。

chmod +x finetun.sh

然后执行这个脚本,开始训练,如果你的显存不够,就可以减小batch_size值。

./finetun.sh

可以看到下面日志中输出的loss值一直在减小,说明训练是有效果的。

GPU显存与利用率监控图
训练需至少24GB显存GPU;10+小时数据集在此配置下稳定运行

微调效果验证与输出对比

经过上面的训练,现在已经完成了训练,我们可以使用下面的python代码测试一下是否真的有效果。

#!/usr/bin/env python
# _*_ coding utf-8 _*_
# @Time: 2025/2/28 1:53
# @Author: Luke Ewin
# @Blog: https://blog.lukeewin.top
import torch
from qwen_asr import Qwen3ASRModel 

model = Qwen3ASRModel.from_pretrained(
    "/opt/asr/Qwen3/output/checkpoint-12830",
    dtype=torch.bfloat16,
    device_map="cuda:0",
    attn_implementation="flash_attention_2",
    max_inference_batch_size=32, # Batch size limit for inference. -1 means unlimited. Smaller values can help avoid OOM.
    max_new_tokens=256, # Maximum number of tokens to generate. Set a larger value for long audio input.) 

results = model.transcribe(
    audio=input("请输入音频路径:"),
    language=None, # set "English" to force the language)
print(results[0].language)
print(results[0].text)

这个/opt/asr/Qwen3/output/checkpoint-12830是我上面训练输出的模型权重路径,你需要修改你自己保存训练后的模型权重路径,这里最后填写绝对路径。

然后这里还需要说明一下,我这里开启了flash_attention_2,你需要提前安装好这个依赖flash-attn。我这里使用的是whl方式安装的,如果执行下面方式安装,速度会很慢,会编译很长时间,所以这里找了一个编译好的whl文件直接安装。

uv pip install flash-attn --no-build-isolation

我这里下载的这个whl文件是:

aria2c -x 16 -s 16 -c "https://github.com/mjun0812/flash-attention-prebuild-wheels/releases/download/v0.9.47/flash_attn-2.6.3+cu130torch2.13-cp312-cp312-linux_x86_64.whl"

执行上面的python代码,可以看到有输出藏文,相比训练之前来说好很多,训练之前输出的是中文。

微调后模型输出藏文结果截图
微调后模型输出藏文文本,经AI大模型比对,语义与原始音频基本一致
微调前模型输出中文结果截图
原始Qwen3-ASR模型无法识别藏语,输出中文且语义失真,属无效响应

可以对比发现,原先模型不能识别藏语,输出的直接是中文,并且意思也不对,并不是翻译为中文输出,你可以理解为模型胡乱输出了中文来应付我们。然后经过训练之后的模型,可以看到输出了藏文,由于我看不懂藏文,这里我发送给AI大模型分析,这意思和音频对应藏文意思是差不多的。

JOTO 企业落地观察

  • 藏语ASR微调表明:企业部署低资源语种语音识别,核心瓶颈不在模型架构,而在高质量、带语种标记的语音-文本对齐数据供给能力。私有化场景下,数据采集、清洗、标注的闭环效率直接决定交付周期。
  • Qwen3-ASR在10+小时藏语数据上实现可用效果,验证了大模型指令微调对小样本语音任务的有效性,但其24GB显存刚性需求意味着企业需将GPU选型与数据规模绑定规划,无法用通用推理卡低成本启动。
  • 训练脚本中CUDA_VISIBLE_DEVICES、batch_size等参数需人工适配不同客户硬件,反映出当前开源ASR工具链缺乏自动化硬件感知与参数推荐能力,企业智能体工程需前置集成资源调度模块。
  • 效果验证依赖人工将输出送入大模型比对藏文语义,说明企业RAG知识工程尚未建立针对藏语等少数民族语言的轻量评估体系,亟需构建可嵌入CI/CD流程的多语种WER计算工具。

立即咨询 JOTO

JOTO 提供覆盖企业智能体规划与搭建、AI 平台私有化部署、RAG 知识工程、AI 安全治理、FDE 驻场共创及持续运营优化的全周期 AI 落地服务,帮助企业把验证中的 AI 能力转化为安全、可控、可持续迭代的生产力。 联系 JOTO 获取 AI 落地咨询

想把这些做法用到你的业务里?

留下你的场景和痛点,我们帮你判断从哪一步开始。

联系我们
Contact Us

Start your enterprise AI rollout

Tell us your industry, team, and current pain points. We'll get back to you within one business day to help you decide what to tackle first, what data to prepare, and which platform fits.

WeChat
Scan to add us for a 1:1 chat
JOTO WeChat consultation QR code

Tell us what you need

Once we receive your details, we'll be in touch within one business day.