模型简介
模型特点
模型能力
使用案例
🚀 Phi-4-mm-inst-asr-singlish
Phi-4-multimodal-instruct-asr-singlish 致力于解决像微软的 Phi-4 这类大型多模态语言模型(LMM)普遍存在的一个关键问题:对区域方言的支持不足。新加坡英语(Singlish)独特的语码转换和韵律特征常常让通用模型难以准确处理。
不过,Phi-4 经过了大规模的预训练,已经掌握了复杂的语言结构,相比像 Whisper 这样的小型自动语音识别(ASR)系统,它具有更好的泛化能力。对 Phi-4-multimodal-instruct (Phi-4-mm-inst)进行有针对性的微调,标志着我们朝着构建一个能够自然聆听、理解和响应的统一模型迈出了重要一步,为在单一语境框架下实现具备推理、翻译和代码生成能力的语音优先智能体奠定了基础。
✨ 主要特性
- 针对新加坡英语进行微调,显著降低了单词错误率(WER)。
- 结合了接近最先进水平的自动语音识别能力和完整的生成式大语言模型功能。
- 学习到了特定任务的停止机制,避免了不必要的输出。
📦 安装指南
首次使用时,你可能需要安装以下额外的库:
!pip install backoff
!sudo apt-get install -y cmake ninja-build
!pip install wheel
from pkg_resources import get_distribution, DistributionNotFound
package_name = 'flash_attn'
try:
dist = get_distribution(package_name)
print(f"'{package_name}' version {dist.version} is already installed.")
except DistributionNotFound:
!MAX_JOBS=8 pip install flash-attn --no-build-isolation
💻 使用示例
基础用法
可以按照以下方式加载模型:
import torch
import soundfile
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
model_path = "mjwong/Phi-4-mm-inst-asr-singlish"
kwargs = {}
kwargs['torch_dtype'] = torch.bfloat16
processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_path,
trust_remote_code=True,
torch_dtype='auto',
_attn_implementation='flash_attention_2',
).cuda()
generation_config = GenerationConfig.from_pretrained(model_path, 'generation_config.json')
user_prompt = '<|user|>'
assistant_prompt = '<|assistant|>'
prompt_suffix = '<|end|>'
speech_prompt = "Based on the attached audio, generate a comprehensive text transcription of the spoken content."
prompt = f'{user_prompt}<|audio_1|>{speech_prompt}{prompt_suffix}{assistant_prompt}'
高级用法
你可以对任意长度的音频进行转录。例如,音频文件 ignite.wav
可以从 此链接 下载:
audio = soundfile.read('./ignite.wav')
inputs = processor(text=prompt, audios=[audio], return_tensors='pt').to('cuda:0')
generate_ids = model.generate(
**inputs,
max_new_tokens=1200,
generation_config=generation_config,
num_logits_to_keep=1,
)
generate_ids = generate_ids[:, inputs['input_ids'].shape[1] :]
response = processor.batch_decode(
generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)[0]
print(response)
📚 详细文档
模型详情
- 开发者:Ming Jie Wong
- 基础模型:microsoft/Phi-4-multimodal-instruct
- 模型类型:带有视觉/语音适配器的仅解码器 Transformer
- 评估指标:单词错误率(WER)
- 支持语言:英语(重点支持新加坡英语)
- 许可证:MIT
描述
本项目通过利用 66,900 对音频 - 转录示例,对 Phi-4-mm-inst 进行监督微调(SFT),以实现新加坡英语的自动语音识别。数据集完全来自 新加坡资讯通信媒体发展管理局(IMDA)的国家语音语料库(NSC) 中的第三部分“同室环境近讲麦克风录音”。
我们没有重新训练模型的所有参数,而是选择性地解冻了 audio_embed
模块,特别是其编码器和音频投影层,同时保持其余权重固定。在训练过程中,每个音频片段都与对应的真实转录文本配对,并在转录文本末尾添加一个专用的转录结束标记 (<|end|><|endoftext|>
)。然后,我们对令牌序列优化标准的交叉熵损失,训练模型将音频特征转录为文本,并在转录结束时生成结束标记。这种有针对性、基于数据的方法将计算资源集中在使模型的音频处理适应新加坡英语独特的语音、韵律和语码转换特征上,而不改变其核心语言理解能力。
国家语音语料库的原始第三部分包含约 1000 小时来自约 1000 名当地英语使用者的对话语音,以两人对话的形式录制。这些对话涵盖了日常话题,包括基于互动游戏的对话。录音在两种环境中进行:
- 同室环境:说话者在同一房间内,使用近讲麦克风和边界麦克风进行录制。
- 分隔房间环境:每个说话者单独使用站立式麦克风和电话(交互式语音应答系统,IVR)进行录制。
内部数据集的音频片段是根据以下标准提取的:
- 最小单词数:10 个单词。选择这个阈值是为了确保每个音频片段包含足够的语言上下文,以便模型更好地理解新加坡英语的指令。较短的片段可能会使模型偏向于特定的话语或短语,限制其整体理解能力。
- 最大时长:20 秒。选择这个阈值是为了在提供足够的转录上下文的同时,减少较长音频片段的噪声和计算复杂度。
- 采样率:所有音频片段都下采样到 16kHz。
完整的实验细节将尽快添加。
微调详情
我们在单个 A100-80GB GPU 上进行了微调。
训练超参数
使用了以下超参数:
- 学习率:0.0001
- 训练批次大小:8
- 评估批次大小:8
- 随机种子:42
- 优化器:
- 名称:ADAMW_TORCH
- 贝塔系数:(0.9, 0.99)
- epsilon:1e-07
- 优化器参数:无额外的优化器参数
- 学习率调度器类型:余弦
- 学习率调度器热身比例:0.1
- 训练轮数:1
🔧 技术细节
基准性能
我们在以下数据集上对 Phi-4-mm-inst-asr-singlish 进行了评估:
- SASRBench-v1:一个用于评估新加坡英语自动语音识别性能的基准数据集。
- AMI:一个广泛用于会议转录和说话人分离任务的数据集。本项目特别使用了其中的个人头戴式麦克风(IHM)录音。
- GigaSpeech:一个大规模的开源数据集,包含多种类型的英语音频,涵盖朗读、对话和即兴演讲。
模型性能
数据集 | 模型 | 相对实时因子(Rel. RTFx) | 单词错误率(WER) |
---|---|---|---|
SASRBench-v1 | microsoft/Phi-4-multimodal-instruct | 1.00 | 33.00% |
SASRBench-v1 | mjwong/Phi-4-mm-inst-asr-singlish | 1.03 | 13.16% |
SASRBench-v1 | mjwong/whisper-large-v3-singlish | 2.60 | 16.41% |
SASRBench-v1 | mjwong/whisper-large-v3-turbo-singlish | 6.13 | 13.35% |
SASRBench-v1 | mjwong/whisper-large-v3-singlish + DRAFT | 5.72 | 14.84% |
AMI | microsoft/Phi-4-multimodal-instruct | 1.00 | 14.74% |
AMI | mjwong/Phi-4-mm-inst-asr-singlish | 1.11 | 20.23% |
AMI | mjwong/whisper-large-v3-singlish | 1.14 | 23.72% |
AMI | mjwong/whisper-large-v3-turbo-singlish | 1.75 | 16.99% |
AMI | mjwong/whisper-large-v3-singlish + DRAFT | 2.59 | 22.06% |
GigaSpeech | microsoft/Phi-4-multimodal-instruct | 1.00 | 24.65% |
GigaSpeech | mjwong/Phi-4-mm-inst-asr-singlish | 1.20 | 10.34% |
GigaSpeech | mjwong/whisper-large-v3-singlish | 2.03 | 13.15% |
GigaSpeech | mjwong/whisper-large-v3-turbo-singlish | 3.97 | 11.54% |
GigaSpeech | mjwong/whisper-large-v3-singlish + DRAFT | 4.81 | 12.81% |
实验观察
基础模型与微调模型的行为差异
- 基础模型:Phi-4 的通用设计允许基于指令的转录,但缺乏可靠的停止标准。当被要求生成固定数量的令牌时,它常常会在音频结束后继续生成,重复或编造令牌,直到达到
max_new_tokens
限制或遇到隐式的序列结束信号。 - 微调模型:通过在训练过程中关联转录结束标记,模型学会了特定任务的停止机制。即使设置了较高的
max_new_tokens
,它也能在完成实际转录后立即可靠地生成<|end|><|endoftext|>
,避免了多余的输出。
对长音频片段的处理
输出长度始终受 max_new_tokens
限制,与输入音频的时长无关。对于所需令牌数少于限制的音频片段,微调模型会在标记处干净利落地停止。对于较长的音频片段,它会生成一个截断但格式良好的转录,直到达到令牌限制,不会出现失败或崩溃的情况。
结论
对 Phi-4-mm-inst 进行微调后,其在新加坡英语上的单词错误率从 33% 降至 13.16%,缩小并略微超过了与我们表现最佳的微调模型 Whisper-large-v3-turbo-singlish 之间的差距。虽然相对于 Whisper 的优势并不显著,但 Phi-4 的真正价值在于它将接近最先进水平的自动语音识别能力与完整的生成式大语言模型功能集成在一个模型中。对于新加坡英语使用者来说,这意味着有一个单一的模型可以自然地聆听、理解和响应,为无需切换上下文即可进行推理、翻译或生成代码的语音优先智能体铺平了道路。
📄 许可证
本模型使用 MIT 许可证。
⚠️ 免责声明
尽管该模型已经过微调以更好地识别新加坡英语,但用户可能会遇到不准确、有偏差或意外的输出,特别是在具有挑战性的音频条件下或说话者使用非标准变体时。使用此模型需自行承担风险;开发者和分发者不对其使用产生的任何后果负责。在任何敏感或生产环境中部署之前,请务必验证结果。
📞 联系我们
如需更多信息,请联系 mingjwong@hotmail.com。









