本文涉及到的详细测试代码和测试步骤放置于:
https://github.com/xinyuwei-david/david-share.git下的:Multimodal-Models/STT-SFT
本文中不再赘述代码实现。欢迎给repo点亮Star,您的点赞是作者持续创作的动力。
在这篇文章中,我们将探讨如何使用Huggingface上的一个专门的医疗语音识别数据集,微调OpenAI的Whisper语音转文字模型(STT)。我们将展示如何使Whisper更好地理解和转录医疗术语,从而使其在医疗相关的语音识别中更有用。本文的步骤不适用于任何形式的临床使用、医疗诊断或患者护理,也不提供或支持任何商业用途。
微调过程概述
选择合适的数据集
微调Whisper模型
评估微调后的模型
使用Web应用展示模型
第0步:准备环境
在开始微调过程之前,请确保你具备以下条件:
硬件要求:
GPU:微调必需,建议24GB或以上显存。
软件和账户:Huggingface账户:访问模型和数据集所需。
Weights & Biases (wandb)账户:推荐用于实验跟踪。
第1步:选择数据集
我们将使用Huggingface上的一个特定医疗语音识别数据集:
数据集名称:
yashtiwari/PaulMooney-Medical-ASR-Data
数据集特点:包含音频录音及其对应的转录文本,内容集中在医疗术语。
ASR组件概述
ASR涉及三个主要组件:
特征提取器(Feature Extractor):处理原始音频输入。
Tokenizer:将模型输出后处理为文本。
Model:执行序列到序列的映射。
微调步骤
特征提取器:准备音频数据,期望16kHz采样率,将音频转换为log-Mel频谱图。
分词器:处理文本,将文本转为模型可理解的token ID。
数据准备:使用WhisperProcessor简化特征提取器和分词器的使用。
数据整理:使用自定义数据整理器准备训练数据。
评估指标:使用词错误率(WER)评估模型性能。
训练设置:定义训练参数并启动训练。
训练和评估
我们将使用Seq2SeqTrainer进行训练,并在训练过程中定期评估模型性能。训练完成后,可以将模型推送到Huggingface Hub,方便共享和使用。
训练中资源开销
训练中的损失函数
词错误率(WER) 是衡量自动语音识别(ASR)系统性能的一个指标。它计算的是系统生成的转录文本与参考文本之间的差异。WER的计算公式如下:
WER = (替换的词数 + 删除的词数 + 插入的词数) / 参考文本中的总词数
具体来说:
替换的词数:系统转录的词与参考文本中的词不匹配的数量。
删除的词数:参考文本中有,但系统转录中缺失的词的数量。
插入的词数:系统转录中有,但参考文本中没有的词的数量。
参考文本中的总词数:参考文本中的总词数。
WER的值越低,表示模型的转录准确率越高。图片中的WER值显示了在不同训练步骤(Step)下模型的词错误率。
从上图可以看出,在训练过程中,损失函数(Training Loss和Validation Loss)和词错误率(WER)之间的关系并不总是线性的。以下是一些可能的原因,解释为什么损失函数降低了,但WER却升高了:
过拟合(Overfitting):模型在训练集上表现得很好(损失函数降低),但在验证集上表现不佳(WER升高)。这可能是因为模型过度拟合训练数据,无法很好地泛化到未见过的数据。
损失函数与评估指标的差异:损失函数和WER是不同的评估标准。损失函数通常是基于模型的预测概率,而WER是基于最终的转录结果。模型可能在优化损失函数时没有直接优化WER。
数据集不平衡:训练数据和验证数据可能存在不平衡,导致模型在某些特定类型的数据上表现较好,而在其他类型的数据上表现较差。
随机性和波动:在训练的不同阶段,模型的性能可能会有波动。即使总体趋势是损失函数降低,WER也可能在某些步骤中暂时升高。
超参数设置:学习率、批量大小等超参数的设置可能影响模型的训练过程。如果学习率过高,模型可能会在训练过程中出现不稳定的情况。
为了进一步分析,可以考虑以下措施:
检查训练和验证数据集的分布,确保它们的一致性。
调整超参数,如学习率和批量大小。
使用早停(Early Stopping)策略,防止过拟合。
监控更多的评估指标,以全面了解模型的性能。
实验结果还不错:
参考:https://medium.com/@mahendra0203/fine-tuning-an-ai-speech-to-text-model-for-medical-transcription-b05397e0e1e1