这是一段 Python 代码用来微调 Whisper 模型实现方言语音转写成标准普通话文本相当于把识别和翻译合并成一步。python# train_dialect_asr.py# 方言语音 - 普通话文本端到端识别翻译# pip install torch transformers datasets librosa soundfile evaluate jiwer accelerate peftimport jsonimport torchimport librosafrom dataclasses import dataclassfrom typing import Any, Dict, Listfrom datasets import Dataset, Audiofrom transformers import (WhisperProcessor,WhisperForConditionalGeneration,Seq2SeqTrainingArguments,Seq2SeqTrainer,EarlyStoppingCallback,)import evaluateMODEL_NAME openai/whisper-small # 数据多可换 medium / large-v3LANG zh # Whisper 的语言 tokenTRAIN_JSONL data/train.jsonlVALID_JSONL data/valid.jsonlOUTPUT_DIR ./whisper-dialectdevice cuda if torch.cuda.is_available() else cpu# ---------------------------------------------------------------------------# 1. 数据加载# 每行 JSONL 格式# {audio: data/audio/001.wav, target: 你好吗}# target 写“标准普通话文本” → 模型直接学会 方言语音→普通话# 若想保留方言原文再加一列 dialect_texttarget 换成它即可# ---------------------------------------------------------------------------def load_jsonl(path: str) - Dataset:rows [json.loads(line) for line in open(path, encodingutf-8) if line.strip()]ds Dataset.from_list(rows)# 统一重采样到 16kWhisper 要求ds ds.cast_column(audio, Audio(sampling_rate16000))return ds# ---------------------------------------------------------------------------# 2. 特征提取# ---------------------------------------------------------------------------processor WhisperProcessor.from_pretrained(MODEL_NAME, languageLANG, tasktranscribe)def prepare_dataset(batch):audio batch[audio]batch[input_features] processor.feature_extractor(audio[array], sampling_rateaudio[sampling_rate]).input_features[0]batch[labels] processor.tokenizer(batch[target]).input_idsreturn batch# ---------------------------------------------------------------------------# 3. 动态 padding# ---------------------------------------------------------------------------dataclassclass DataCollatorSpeechSeq2SeqWithPadding:processor: Anydef __call__(self, features: List[Dict[str, Any]]) - Dict[str, torch.Tensor]:# 音频特征input_features [{input_features: f[input_features]} for f in features]batch self.processor.feature_extractor.pad(input_features, return_tensorspt)# 标签label_features [{input_ids: f[labels]} for f in features]labels_batch self.processor.tokenizer.pad(label_features, return_tensorspt)# padding 位置置 -100不参与 losslabels labels_batch[input_ids].masked_fill(labels_batch.attention_mask.ne(1), -100)# 去掉开头的 BOSTrainer 会自己加 decoder_start_token_idif (labels[:, 0] self.processor.tokenizer.bos_token_id).all().cpu().item():labels labels[:, 1:]batch[labels] labelsreturn batch# ---------------------------------------------------------------------------# 4. 评估指标中文用 CER字错率# ---------------------------------------------------------------------------cer_metric evaluate.load(cer)def compute_metrics(pred):pred_ids pred.predictionslabel_ids pred.label_ids.copy()label_ids[label_ids -100] processor.tokenizer.pad_token_idpred_str processor.tokenizer.batch_decode(pred_ids, skip_special_tokensTrue)label_str processor.tokenizer.batch_decode(label_ids, skip_special_tokensTrue)cer cer_metric.compute(predictionspred_str, referenceslabel_str)return {cer: cer}# ---------------------------------------------------------------------------# 5. 训练# ---------------------------------------------------------------------------def main():train_ds load_jsonl(TRAIN_JSONL).map(prepare_dataset, remove_columns[audio, target], num_proc4)valid_ds load_jsonl(VALID_JSONL).map(prepare_dataset, remove_columns[audio, target], num_proc4)model WhisperForConditionalGeneration.from_pretrained(MODEL_NAME)# 关键固定解码语言和任务否则模型可能输出英文model.generation_config.language LANGmodel.generation_config.task transcribemodel.generation_config.forced_decoder_ids None# 只在中文数据上微调可把其他语言的 embedding 冻结省显存model.config.forced_decoder_ids Nonedata_collator DataCollatorSpeechSeq2SeqWithPadding(processorprocessor)args Seq2SeqTrainingArguments(output_dirOUTPUT_DIR,per_device_train_batch_size8,per_device_eval_batch_size8,gradient_accumulation_steps2,learning_rate1e-5,warmup_steps200,num_train_epochs10,gradient_checkpointingTrue,fp16torch.cuda.is_available(),bf16False,eval_strategysteps, # 老版本 transformers 用 evaluation_strategyeval_steps200,save_steps200,logging_steps50,predict_with_generateTrue,generation_max_length225,save_total_limit3,load_best_model_at_endTrue,metric_for_best_modelcer,greater_is_betterFalse,report_to[tensorboard],remove_unused_columnsFalse,)trainer Seq2SeqTrainer(modelmodel,argsargs,train_datasettrain_ds,eval_datasetvalid_ds,data_collatordata_collator,compute_metricscompute_metrics,tokenizerprocessor.feature_extractor,callbacks[EarlyStoppingCallback(early_stopping_patience3)],)trainer.train()trainer.save_model(OUTPUT_DIR)processor.save_pretrained(OUTPUT_DIR)print(f训练完成模型保存在 {OUTPUT_DIR})# ---------------------------------------------------------------------------# 6. 推理方言音频 - 普通话文本# ---------------------------------------------------------------------------def transcribe(audio_path: str, model_dir: str OUTPUT_DIR):_processor WhisperProcessor.from_pretrained(model_dir)_model WhisperForConditionalGeneration.from_pretrained(model_dir).to(device).eval()speech, _ librosa.load(audio_path, sr16000)inputs _processor(speech, sampling_rate16000, return_tensorspt).input_features.to(device)with torch.no_grad():ids _model.generate(inputs,languageLANG,tasktranscribe,max_new_tokens225,num_beams5,)return _processor.batch_decode(ids, skip_special_tokensTrue)[0]if __name__ __main__:import sysif len(sys.argv) 1:# python train_dialect_asr.py 音频路径print(识别结果, transcribe(sys.argv[1]))else:main()方言识别与翻译的训练流程拆解从训练到推理这段代码把方言语音转普通话的流程串了起来。您可以按这几个模块来理解· 数据准备训练数据用 JSONL 格式每行包含音频路径和对应的普通话文本。音频会自动重采样到 16kHz并提取成 Whisper 需要的特征。· 模型训练基于 openai/whisper-small 微调冻结解码语言为中文使用 CER字错率作为评估指标。训练时动态 padding并自动保存验证集上表现最好的模型。· 推理调用训练完成后可以直接用命令行传入方言音频路径模型会输出普通话文本。推理时用 beam search 解码识别结果更稳定。---优化建议 如果手头的音频是方言原文标注可以把 JSONL 里的 “target” 列改成对应的普通话文本模型就会直接学习“方言语音 → 普通话”的映射。仅参考学习用
企业数字化 ERP 产品动态
相关推荐
【Dify】Excel数据基于Agent的ECharts与智能可视化自动化 数据可视化已成为数据分析和报告的重要环节,自动化处理流程为日常办公和学习带来极大便利。针对Excel表格数据的可视化需求,ECharts与智能Agent结合实现了一条高效、低门槛的处理路径。
本文介绍了如何利用工作流自动完成Excel数据的读取、结构化提取、智能解析和ECharts图表… · 2026/9/24 13:31:37
【Coze】【视频】火柴人心理学工作流 今天给大家演示一个 火柴人心理学 Coze 工作流。该工作流的设计目标是通过多模态生成与合成技术,快速产出带有画面、配音、字幕和特效的视频内容。整体流程结合了代码逻辑处理、批量图像生成、音频合成以及视频草稿管理,从而实现自动化的视频制作。通过效果演示,大家可以直观… · 2026/9/24 13:31:37
【企业智能体开发】从业务需求定义企业服务台智能体 上午九点,培训讲师小林走进会议室,发现投屏设备没有画面。九点半,二十多位新同事就要入场。她打开企业服务台,输入:“A301 会议室投屏没反应,培训马上开始,怎么办?”
如果系统只返回一篇长长的设备说明,小林还得自己判断哪一段适用;如果系统直接说“已安排人员处理”… · 2026/9/24 13:31:37
2026儿童遥控飞机选购指南:安全、教育与飞行性能的硬核标准 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:59:18
B550M主板内存插法指南:A2+B2双通道正确插槽与兼容性避坑 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:59:06
Erlang/OTP ssl 应用 TLS 加固指南:算法选择、协议版本与证书验证的完整实战 编程语言语言运行时标准库编译器并发编程 【免费下载链接】otp Erlang/OTP 项目地址: https://gitcode.com/gh_mirrors/ot/otp 点击查看 免费下载 导读
本文基于 Erlang/OTP 官方文档《TLS Hardening Guide》(见 lib/ssl/doc/guides/ssl_hardening.md&… · 2026/9/24 13:59:06
硬件看门狗电路的类型与应用 目录:
1、什么是看门狗
2、555定时器组成的看门狗
3、4060计数器组成的看门狗
4、使用专用看门狗芯片 下续:死机检测电路的分析与设计 1、什么是看门狗
顾名思义即可以看门的狗子,可若不给其食物,它就会叫唤。根据“百度百科… · 2026/9/24 13:59:06
AI 请求里的敏感数据怎么脱敏才不误伤 "把这段客服记录总结一下"——工程师随手把一段包含手机号和身份证号的文本丢给了模型。请求发出去了,数据也出去了。事后追责时才发现,没有任何一层拦过它。这是企业用 AI 最常见的合规漏洞:不是模型不安全,而是数据在… · 2026/9/24 13:59:06
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44