模型概述
模型特點
模型能力
使用案例
🚀 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。









