模型概述
模型特點
模型能力
使用案例
🚀 Phi-4
Phi-4 是一系列多模態模型,涵蓋了推理、多模態指令等多種能力。它基於之前模型的經驗進行了優化,支持文本、視覺和音頻的輸入輸出,在多語言和多模態任務上表現出色,能夠加速語言和多模態模型的研究,為生成式 AI 功能提供有力支持。
🚀 快速開始
Phi-4 系列已集成在 transformers
的 4.48.2
版本中。可以使用以下命令驗證當前 transformers
版本:
pip list | grep transformers
建議使用 Python 3.10 運行。所需的包示例如下:
flash_attn==2.7.4.post1
torch==2.6.0
transformers==4.48.2
accelerate==1.3.0
soundfile==0.13.1
pillow==11.1.0
scipy==1.15.2
torchvision==0.21.0
backoff==2.2.1
peft==0.13.2
Phi-4-multimodal-instruct 也可在 Azure AI Studio 中使用。
加載本地模型
獲取 Phi-4-multimodal-instruct 模型檢查點後,可使用以下示例代碼進行推理:
點擊查看詳情
import requests
import torch
import os
import io
from PIL import Image
import soundfile as sf
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
from urllib.request import urlopen
# Define model path
model_path = "microsoft/Phi-4-multimodal-instruct"
# Load model and processor
processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
# if you do not use Ampere or later GPUs, change attention to "eager"
_attn_implementation='flash_attention_2',
).cuda()
# Load generation config
generation_config = GenerationConfig.from_pretrained(model_path)
# Define prompt structure
user_prompt = '<|user|>'
assistant_prompt = '<|assistant|>'
prompt_suffix = '<|end|>'
# Part 1: Image Processing
print("\n--- IMAGE PROCESSING ---")
image_url = 'https://www.ilankelman.org/stopsigns/australia.jpg'
prompt = f'{user_prompt}<|image_1|>What is shown in this image?{prompt_suffix}{assistant_prompt}'
print(f'>>> Prompt\n{prompt}')
# Download and open image
image = Image.open(requests.get(image_url, stream=True).raw)
inputs = processor(text=prompt, images=image, return_tensors='pt').to('cuda:0')
# Generate response
generate_ids = model.generate(
**inputs,
max_new_tokens=1000,
generation_config=generation_config,
)
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(f'>>> Response\n{response}')
# Part 2: Audio Processing
print("\n--- AUDIO PROCESSING ---")
audio_url = "https://upload.wikimedia.org/wikipedia/commons/b/b0/Barbara_Sahakian_BBC_Radio4_The_Life_Scientific_29_May_2012_b01j5j24.flac"
speech_prompt = "Transcribe the audio to text, and then translate the audio to French. Use <sep> as a separator between the original transcript and the translation."
prompt = f'{user_prompt}<|audio_1|>{speech_prompt}{prompt_suffix}{assistant_prompt}'
print(f'>>> Prompt\n{prompt}')
# Downlowd and open audio file
audio, samplerate = sf.read(io.BytesIO(urlopen(audio_url).read()))
# Process with the model
inputs = processor(text=prompt, audios=[(audio, samplerate)], return_tensors='pt').to('cuda:0')
generate_ids = model.generate(
**inputs,
max_new_tokens=1000,
generation_config=generation_config,
)
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(f'>>> Response\n{response}')
更多推理示例可查看 此處。
vLLM 推理
可以使用以下命令啟動服務器:
python -m vllm.entrypoints.openai.api_server --model 'microsoft/Phi-4-multimodal-instruct' --dtype auto --trust-remote-code --max-model-len 131072 --enable-lora --max-lora-rank 320 --lora-extra-vocab-size 0 --limit-mm-per-prompt audio=3,image=3 --max-loras 2 --lora-modules speech=<path to speech lora folder> vision=<path to vision lora folder>
語音 LoRA 和視覺 LoRA 文件夾位於 vLLM 下載的 Phi-4-multimodal-instruct 文件夾內,也可以使用以下腳本查找:
from huggingface_hub import snapshot_download
model_path = snapshot_download(repo_id="microsoft/Phi-4-multimodal-instruct")
speech_lora_path = model_path+"/speech-lora"
vision_lora_path = model_path+"/vision-lora"
✨ 主要特性
- 多模態支持:能夠處理文本、圖像和音頻輸入,並生成文本輸出。
- 多語言能力:支持多種語言,包括阿拉伯語、中文、捷克語等。
- 長上下文長度:具有 128K 令牌的上下文長度。
- 高性能表現:在語音識別、翻譯、視覺理解等任務上表現出色。
- 指令遵循和函數調用:採用了更好的訓練技術,能夠更好地遵循指令和進行函數調用。
📦 安裝指南
Phi-4 系列已集成在 transformers
的 4.48.2
版本中。可以使用以下命令驗證當前 transformers
版本:
pip list | grep transformers
建議使用 Python 3.10 運行。所需的包示例如下:
flash_attn==2.7.4.post1
torch==2.6.0
transformers==4.48.2
accelerate==1.3.0
soundfile==0.13.1
pillow==11.1.0
scipy==1.15.2
torchvision==0.21.0
backoff==2.2.1
peft==0.13.2
💻 使用示例
基礎用法
import requests
import torch
import os
import io
from PIL import Image
import soundfile as sf
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
from urllib.request import urlopen
# Define model path
model_path = "microsoft/Phi-4-multimodal-instruct"
# Load model and processor
processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map="cuda",
torch_dtype="auto",
trust_remote_code=True,
# if you do not use Ampere or later GPUs, change attention to "eager"
_attn_implementation='flash_attention_2',
).cuda()
# Load generation config
generation_config = GenerationConfig.from_pretrained(model_path)
# Define prompt structure
user_prompt = '<|user|>'
assistant_prompt = '<|assistant|>'
prompt_suffix = '<|end|>'
# Part 1: Image Processing
print("\n--- IMAGE PROCESSING ---")
image_url = 'https://www.ilankelman.org/stopsigns/australia.jpg'
prompt = f'{user_prompt}<|image_1|>What is shown in this image?{prompt_suffix}{assistant_prompt}'
print(f'>>> Prompt\n{prompt}')
# Download and open image
image = Image.open(requests.get(image_url, stream=True).raw)
inputs = processor(text=prompt, images=image, return_tensors='pt').to('cuda:0')
# Generate response
generate_ids = model.generate(
**inputs,
max_new_tokens=1000,
generation_config=generation_config,
)
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(f'>>> Response\n{response}')
# Part 2: Audio Processing
print("\n--- AUDIO PROCESSING ---")
audio_url = "https://upload.wikimedia.org/wikipedia/commons/b/b0/Barbara_Sahakian_BBC_Radio4_The_Life_Scientific_29_May_2012_b01j5j24.flac"
speech_prompt = "Transcribe the audio to text, and then translate the audio to French. Use <sep> as a separator between the original transcript and the translation."
prompt = f'{user_prompt}<|audio_1|>{speech_prompt}{prompt_suffix}{assistant_prompt}'
print(f'>>> Prompt\n{prompt}')
# Downlowd and open audio file
audio, samplerate = sf.read(io.BytesIO(urlopen(audio_url).read()))
# Process with the model
inputs = processor(text=prompt, audios=[(audio, samplerate)], return_tensors='pt').to('cuda:0')
generate_ids = model.generate(
**inputs,
max_new_tokens=1000,
generation_config=generation_config,
)
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(f'>>> Response\n{response}')
高級用法
# 高級場景說明:使用 vLLM 進行推理
python -m vllm.entrypoints.openai.api_server --model 'microsoft/Phi-4-multimodal-instruct' --dtype auto --trust-remote-code --max-model-len 131072 --enable-lora --max-lora-rank 320 --lora-extra-vocab-size 0 --limit-mm-per-prompt audio=3,image=3 --max-loras 2 --lora-modules speech=<path to speech lora folder> vision=<path to vision lora folder>
📚 詳細文檔
輸入格式
文本聊天格式
用於一般對話和指令:
<|system|>You are a helpful assistant.<|end|><|user|>How to explain Internet for a medieval knight?<|end|><|assistant|>
啟用工具的函數調用格式
當用戶希望模型根據給定工具提供函數調用時使用。用戶應在系統提示中提供可用工具,用 <|tool|> 和 <|/tool|> 令牌包裹。工具應使用 JSON 格式指定:
<|system|>You are a helpful assistant with some tools.<|tool|>[{"name": "get_weather_updates", "description": "Fetches weather updates for a given city using the RapidAPI Weather API.", "parameters": {"city": {"description": "The name of the city for which to retrieve weather information.", "type": "str", "default": "London"}}}]<|/tool|><|end|><|user|>What is the weather like in Paris today?<|end|><|assistant|>
視覺 - 語言格式
用於與圖像的對話:
<|user|><|image_1|>Describe the image in detail.<|end|><|assistant|>
對於多張圖像,用戶需要在提示中插入多個圖像佔位符:
<|user|><|image_1|><|image_2|><|image_3|>Summarize the content of the images.<|end|><|assistant|>
語音 - 語言格式
用於各種語音和音頻任務:
<|user|><|audio_1|>{task prompt}<|end|><|assistant|>
任務提示因任務而異:
- 自動語音識別:
<|user|><|audio_1|>Transcribe the audio clip into text.<|end|><|assistant|>
- 自動語音翻譯:
<|user|><|audio_1|>Translate the audio to {lang}.<|end|><|assistant|>
- 帶有思維鏈的自動語音翻譯:
<|user|><|audio_1|>Transcribe the audio to text, and then translate the audio to {lang}. Use <sep> as a separator between the original transcript and the translation.<|end|><|assistant|>
- 語音查詢問答:
<|user|><|audio_1|><|end|><|assistant|>
視覺 - 語音格式
用於與圖像和音頻的對話,音頻可能包含與圖像相關的查詢:
<|user|><|image_1|><|audio_1|><|end|><|assistant|>
對於多張圖像,用戶需要在提示中插入多個圖像佔位符:
<|user|><|image_1|><|image_2|><|image_3|><|audio_1|><|end|><|assistant|>
視覺:
- 支持任何常見的 RGB/灰度圖像格式(如 ".jpg", ".jpeg", ".png", ".ppm", ".bmp", ".pgm", ".tif", ".tiff", ".webp")。
- 分辨率取決於 GPU 內存大小。更高的分辨率和更多的圖像會產生更多的令牌,從而使用更多的 GPU 內存。訓練時支持 64 個裁剪。如果是方形圖像,分辨率約為 (8448 by 8448)。對於多圖像,最多支持 64 幀,但隨著輸入幀數的增加,每個幀的分辨率需要降低以適應內存。
音頻:
- 支持任何可以由 soundfile 包加載的音頻格式。
- 為保持良好性能,建議最大音頻長度為 40 秒。對於總結任務,建議最大音頻長度為 30 分鐘。
模型加載
獲取 Phi-4-multimodal-instruct 模型檢查點後,可使用示例代碼進行推理(見上文加載本地模型部分)。
訓練
微調
分別提供了 語音 和 視覺 的監督微調(SFT)基本示例。 還提供了 如何將語音識別擴展到新語言 的示例。
模型信息
屬性 | 詳情 |
---|---|
架構 | Phi-4-multimodal-instruct 有 56 億個參數,是一個多模態變壓器模型。該模型以預訓練的 Phi-4-Mini-Instruct 作為骨幹語言模型,並配備了先進的視覺和語音編碼器及適配器。 |
輸入 | 文本、圖像和音頻。最適合使用聊天格式的提示。 |
上下文長度 | 128K 令牌 |
GPU | 512 個 A100 - 80G |
訓練時間 | 28 天 |
訓練數據 | 5 萬億個文本令牌、230 萬小時的語音數據和 1.1 萬億個圖像 - 文本令牌 |
輸出 | 對輸入生成的文本響應 |
訓練日期 | 2024 年 12 月至 2025 年 1 月 |
狀態 | 這是一個基於離線數據集訓練的靜態模型,公開可用數據的截止日期為 2024 年 6 月。 |
支持語言 | 文本:阿拉伯語、中文、捷克語、丹麥語、荷蘭語、英語、芬蘭語、法語、德語、希伯來語、匈牙利語、意大利語、日語、韓語、挪威語、波蘭語、葡萄牙語、俄語、西班牙語、瑞典語、泰語、土耳其語、烏克蘭語;視覺:英語;音頻:英語、中文、德語、法語、意大利語、日語、西班牙語、葡萄牙語 |
發佈日期 | 2025 年 2 月 |
訓練數據集
Phi-4-multimodal-instruct 的訓練數據包括多種來源,總計 5 萬億個文本令牌,包括:
- 經過質量過濾的公開可用文檔、精選的高質量教育數據和代碼。
- 為教授數學、編碼、常識推理、世界常識(如科學、日常活動、心智理論等)而新創建的合成“教科書式”數據。
- 高質量的人類標註的聊天格式數據。
- 精選的高質量圖像 - 文本交錯數據。
- 合成和公開可用的圖像、多圖像和視頻數據。
- 帶有強/弱轉錄的匿名內部語音 - 文本對數據。
- 精選的高質量公開可用和匿名內部語音數據,並帶有特定任務的監督。
- 精選的合成語音數據。
- 合成的視覺 - 語音數據。
重點關注可能提高模型推理能力的數據質量,並對公開可用文檔進行過濾,以包含首選的知識水平。例如,英超聯賽某一天的比賽結果可能是大型基礎模型的良好訓練數據,但為了給模型的小尺寸留出更多推理能力,這些信息被從 Phi-4-multimodal-instruct 中移除。數據收集過程涉及從公開可用文檔中獲取信息,重點是過濾掉不良文檔和圖像。為保護隱私,對圖像和文本數據源進行過濾,以從訓練數據中移除或清理潛在的個人數據。去汙過程包括對數據集進行歸一化和分詞,然後在目標數據集和基準數據集之間生成並比較 n-gram。匹配 n-gram 超過閾值的樣本被標記為受汙染並從數據集中移除。生成詳細的汙染報告,總結匹配文本、匹配比例和過濾結果,以便進一步分析。
軟件
硬件
默認情況下,Phi-4-multimodal-instruct 模型使用閃存注意力,需要特定類型的 GPU 硬件才能運行。已在以下 GPU 類型上進行測試:
- NVIDIA A100
- NVIDIA A6000
- NVIDIA H100
如果要在 NVIDIA V100 或更早一代的 GPU 上運行模型,調用 AutoModelForCausalLM.from_pretrained() 時應使用 _attn_implementation="eager"。
🔧 技術細節
模型架構
Phi-4-multimodal-instruct 是一個多模態變壓器模型,以預訓練的 Phi-4-Mini-Instruct 作為骨幹語言模型,並配備了先進的視覺和語音編碼器及適配器。
訓練技術
採用了監督微調(SFT)、直接偏好優化(DPO)和基於人類反饋的強化學習(RLHF)等技術,以提高模型的指令遵循能力和安全性。
數據處理
對訓練數據進行了嚴格的質量過濾和處理,包括去除不良文檔和圖像、保護隱私、去汙等操作。
基準測試
使用多種基準測試評估模型性能,包括視覺、語音和安全等方面的基準。在視覺任務中,與多個模型在多種零樣本基準上進行比較;在語音任務中,評估了自動語音識別、翻譯、問答等能力。
安全評估
採用多種評估技術,包括紅隊測試、對抗性對話模擬和多語言安全評估基準數據集,評估模型在多種語言和風險類別下產生不良輸出的傾向。還對視覺和音頻安全進行了評估。
📄 許可證
該模型根據 MIT 許可證 授權。
附錄 A:基準測試方法
點擊查看詳細說明
我們在此簡要介紹一下方法 - 特別是我們如何考慮優化提示。在理想情況下,我們不會更改基準測試中的任何提示,以確保在比較不同模型時始終進行公平比較。實際上,這是我們的默認方法,並且在迄今為止運行的絕大多數模型中都是如此。
然而,也有一些例外情況。在某些情況下,我們發現模型由於未能遵循輸出格式而在給定評估中表現不如預期。例如:
- 模型可能無故拒絕回答問題,或者在編碼任務中,模型可能在響應前加上 “Sure, I can help with that. …”,這可能會破壞解析器。在這種情況下,我們選擇嘗試不同的系統消息(例如 “You must always respond to a question” 或 “Get to the point!”)。
- 我們觀察到,在某些情況下,少樣本實際上會損害模型性能。在這種情況下,我們允許在所有情況下以零樣本運行基準測試。
- 我們有工具可以在聊天和完成 API 之間進行轉換。在將聊天提示轉換為完成提示時,一些模型有不同的關鍵字,例如 Human 與 User。在這些情況下,我們允許針對模型進行聊天到完成提示的映射。
但是,我們不會:
- 選擇不同的少樣本示例。在比較不同模型時,少樣本始終相同。
- 更改提示格式:例如,如果是 A/B/C/D 多項選擇,我們不會將其調整為 1/2/3/4 多項選擇。
視覺基準測試設置
基準測試設置的目標是衡量普通用戶在使用這些模型進行涉及視覺輸入的任務時的性能。為此,我們選擇了 9 個流行且公開可用的單幀數據集和 3 個多幀基準測試,涵蓋了廣泛的具有挑戰性的主題和任務(例如數學、OCR 任務、圖表理解等),以及一組高質量的模型。 我們的基準測試設置使用零樣本提示,並且每個模型的提示內容相同。我們僅對提示內容進行格式化,以滿足模型的提示 API。這確保了我們的評估在測試的模型集上是公平的。許多基準測試要求模型從提供的選項列表中選擇響應。因此,我們在提示結尾添加了一個指令,引導所有模型選擇他們認為正確答案對應的選項字母。 在視覺輸入方面,我們使用基準測試中的原始數據集圖像。對於需要這種格式的模型(例如 GPTV、Claude Sonnet 3.5、Gemini 1.5 Pro/Flash),我們使用 JPEG 編碼將這些圖像轉換為 base - 64。對於其他模型(例如 Llava Interleave、InternVL2 4B 和 8B),我們使用它們的 Huggingface 接口並傳入 PIL 圖像或本地存儲的 JPEG 圖像。我們沒有對圖像進行任何縮放或預處理。 最後,我們使用相同的代碼提取答案並對每個考慮的模型進行評估。這確保了我們在評估答案質量時是公平的。
語音基準測試設置
此基準測試設置的目標是評估普通用戶在語音和音頻理解任務中使用模型的性能。為實現這一目標,我們選擇了幾個最先進的開源和閉源模型,並在各種公開和內部基準測試中進行了評估。這些基準測試涵蓋了多樣化且具有挑戰性的主題,包括自動語音識別(ASR)、自動語音翻譯(AST)、語音查詢問答(SQQA)、音頻理解(AU)和語音總結。 結果來自對相同測試數據的評估,沒有進行進一步的澄清。所有結果都是在推理過程中不進行採樣的情況下獲得的。為了進行準確比較,我們在不同任務中對模型使用了一致的提示,除了某些模型 API(例如 GPT - 4o)可能會拒絕響應某些任務的特定提示。 最後,我們使用統一的代碼提取答案並對所有考慮的模型進行評估。這種方法通過評估它們的響應質量確保了公平性。
基準測試數據集
該模型在廣泛的公開和內部基準測試中進行了評估,以瞭解其在多個任務和條件下的能力。雖然大多數評估使用英語,但也納入了多語言基準測試以涵蓋特定語言的性能。具體來說:
- 視覺:
- 流行聚合基準:
- MMMU 和 MMMU - Pro:大學水平學科知識和刻意推理的大規模多學科任務。
- MMBench:評估感知和推理能力的大規模基準。
- 視覺推理:
- ScienceQA:科學領域的多模態視覺問答。
- MathVista:視覺數學推理。
- InterGPS:視覺 2D 幾何推理。
- 圖表推理:
- ChartQA:圖表的視覺和邏輯推理。
- AI2D:圖表理解。
- 文檔智能:
- TextVQA:閱讀和推理圖像中的文本以回答相關問題。
- InfoVQA:閱讀和推理高分辨率信息圖圖像,具有任意縱橫比。
- DocVQA:閱讀和推理包含密集文本和手寫文本的文檔圖像。
- OCRBench:測試各種文本相關圖像的 OCR 和問答能力。
- 視覺語音多模態理解:
- s_AI2D:以語音作為問題格式的圖表理解。
- s_ChartQA:以語音作為問題格式的圖表視覺和邏輯推理。
- s_InfoVQA:以語音作為問題格式的高分辨率信息圖圖像閱讀和推理。
- s_DocVQA:以語音作為問題格式的包含密集文本和手寫文本的文檔圖像閱讀和推理。
- RAI 和安全基準:
- VLGuardExt:VLGuard 是一個用於模型安全的視覺 - 語言指令遵循公共數據集,用於解決欺騙、歧視、隱私和危險行為(建議、性、暴力、政治)等安全問題。擴展到了一些內部類別,如兒童安全和選舉關鍵信息。
- RTVLM:用於對視覺 - 語言模型進行紅隊測試的公共基準,涉及模型真實性、隱私、安全和公平性。
- GPTV - RAI:Azure AI 發佈的內部基準,用於衡量有害性(例如性、暴力、仇恨和自我傷害)、隱私、越獄、錯誤信息。
- 流行聚合基準:
- 語音:
- CommonVoice v15 是 Mozilla 開發的開源多語言語音數據集。它包含 133 種語言的超過 33,000 小時的語音數據,由全球志願者貢獻和驗證。評估在八種支持的語言中進行。
- Hugging Face 上的 OpenASR 排行榜旨在對英語 ASR 模型的魯棒性進行基準測試和評估。排行榜中的數據集涵蓋了各種語音領域,包括朗讀語音、對話、會議等。
- CoVoST2 是一個從 Mozilla 的 Common Voice 項目派生的多語言語音到文本翻譯數據集。它是可用於語音翻譯的最大開源數據集之一,支持 X 到英語(X→En)和英語到 X(En→X)的翻譯任務。在測試集上評估了支持語言的翻譯方向。
- FLEURS 是一個多語言語音數據集,旨在評估語音識別和語音到文本翻譯模型在多種語言中的性能。在八種支持的語言中評估了語音識別和翻譯任務的測試集。
- MT Bench(多輪基準)專門用於評估 AI 模型在多輪問答(QA)場景中的對話和指令遵循能力。為支持語音問題,文本被合成為語音。
- MMMLU(多語言大規模多任務語言理解)是一個廣泛的基準,旨在評估 AI 模型在廣泛主題中的常識和推理能力。為支持語音問題,文本被合成為語音。在八種支持的語言中對該測試集評估了模型。
- AIR - Bench Chat(音頻指令和響應基準)是一個全面的評估框架,旨在測試大型音頻語言模型(LALMs)的能力。它包括基礎和聊天基準。選擇聊天基準是因為其用於音頻能力的開放式問答。
- MMAU(大規模多任務音頻理解)是一個全面的數據集,旨在評估多模態模型在基於音頻的理解和推理任務中的能力。測試集採用多項選擇問答形式,涵蓋音樂、聲音和語音類別。
- Golden3 是一個真實世界的會議數據集,包含 108 個會議記錄及相應的轉錄,平均每個記錄 6 分鐘。它在 30 個會議室錄製,有 4 - 8 名與會者。數據集主要為英語,涵蓋廣泛的主題。使用 GPT4 生成總結指令,要求總結部分或整個對話,或控制輸出風格/長度/結構。
- AMI(增強多方交互)是一個全面的會議記錄集合,包含約 100 小時的數據。測試分割包含 20 個會議記錄,平均時長 32 分鐘。在近講版本的音頻上測試了模型。使用 GPT4 生成總結指令,要求總結部分或整個對話,或控制輸出風格/長度/結構。
- 安全和 RAI:
- 單輪可信度評估:
- DecodingTrust:DecodingTrust 是從八個不同角度收集的可信度基準。
- XSTest:XSTest 是一種誇張的安全評估。
- Toxigen:Toxigen 是對抗性和仇恨言論檢測。
- 紅隊測試:
- 對微軟 AI 紅隊提供的提示的響應。
- 單輪可信度評估:
附錄 B:微調韓語語音
點擊查看詳細說明
概述和數據集
Phi-4-multimodal 最初並非為韓語語音到文本任務設計,但可以使用自己的數據或公開的韓語語音數據集對其進行微調。
我們使用以下數據集對 Phi-4-multimodal 模型進行了韓語語音到文本任務的微調:
- kresnik/zeroth_korean
- mozilla-foundation/common_voice_17_0(僅使用韓語語音)
- PolyAI/minds14(僅使用韓語語音)
- 自定義數據集。語音是快速和慢速語音的混合(作者發佈的技術博客內容和演示文稿),使用 audiomentations 和 此腳本 進行了一些調製。
總共 35K 個樣本。每個樣本是韓語語音及其轉錄的一對。數據集採樣率為 16kHz。
您可以從 此處 下載微調後的模型。請參考 演示文件夾 中的 Jupyter 筆記本和視頻剪輯。它們並非生產質量,因為只是為了概念驗證目的進行了微調,但您可以看到,即使母語者說得相當快,它們也能以高精度進行轉錄和翻譯。
要求
基於 Python 3.10,需要以下包,建議使用 A100/H100 GPU:
torch==2.6.0
transformers==4.48.2
accelerate==1.4.0
soundfile==0.13.1
pillow==11.1.0
scipy==1.15.2
torchvision==0.21.0
backoff==2.2.1
peft==0.14.0
datasets==3.3.2
pandas==2.2.3
flash_attn==2.7.4.post1
evaluate==0.4.3
sacrebleu==2.5.1
訓練
使用 microsoft/Phi-4-multimodal-instruct 中的 sample_finetune_speech.py
腳本,在單個 A100 80GB GPU 上以 16 的批量大小訓練了 4 個 epoch。
微調腳本和命令行基本與 此處 相同,但您需要準備自己的數據集。此外,要進行音頻編碼器解凍,請參考以下代碼片段。該代碼片段取自 微調 Colab 筆記本。
with accelerator.local_main_process_first():
processor = AutoProcessor.from_pretrained(
"microsoft/Phi-4-multimodal-instruct",
trust_remote_code=True,
)
model = create_model(
args.model_name_or_path,
use_flash_attention=args.use_flash_attention,
)
def unfreeze_speech_components(model):
"""Directly target verified components from your debug logs"""
# 1. Audio Embed Module (confirmed exists)
audio_embed = model.model.embed_tokens_extend.audio_embed
# 2. Entire Audio Encoder (simplified)
audio_encoder = audio_embed.encoder # Direct access
# 3. Audio Projection (from debug logs)
audio_projection = audio_embed.audio_projection
# Unfreeze ONLY these 3 components
for component in [audio_embed, audio_encoder, audio_projection]:
for param in component.parameters():
param.requires_grad = True
return model
model = unfreeze_speech_components(model)
# Verify unfrozen parameters
trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
print(f"Trainable parameters: {trainable_params:,}")
# After unfreezing
encoder_params = list(model.model.embed_tokens_extend.audio_embed.encoder.parameters())
proj_params = list(model.model.embed_tokens_extend.audio_embed.audio_projection.parameters())
assert any(p.requires_grad for p in encoder_params), "Encoder params frozen!"
assert any(p.requires_grad for p in proj_params), "Projection params frozen!"
print("Components properly unfrozen ✅")
運行微調腳本的示例命令如下:
python main.py
當前上傳的最新版本模型通過 解凍音頻編碼器 進行了微調,與基於基線 LoRA 適配器的微調相比,ASR 性能顯著提高。比較全量微調和 LoRA 微調,在 zeroth - test 集上的字符錯誤率(CER)分別為 1.61% 和 2.72%,詞錯誤率(WER)分別為 3.54% 和 7.19%。更多詳細信息請參考 實驗設置和結果。
實驗設置和結果
此基準測試設置的目的是評估韓語音頻在語音和音頻理解任務中的基本性能。我們對自動語音識別和自動語音翻譯進行了評估,測試數據使用了以下數據集和樣本:
在以下數據集上進行了評估:
- ASR(自動語音識別):在 zeroth - test 集(457 個樣本) 上使用字符錯誤率(CER)和詞錯誤率(WER)進行評估。
- AST(自動語音翻譯):在 fleurs ko <-> en 語音翻譯測試集(270 個樣本) 上使用 BLEU 分數進行評估。
評估腳本取自 此處。
我們使用 Phi-4-mm-inst-zeroth-kor 作為基線來提高性能,因為它在 1 個 epoch 時顯示出顯著的性能提升。請注意,基線使用 22K Zeroth Korean 韓語語音數據 訓練了 1 個 epoch。基於這個有 35K 訓練樣本的基線,我們進行了以下場景的額外實驗:
- [案例 1] LoRA 微調(1 個 epoch):基於 LoRA 適配器的微調,訓練 1 個 epoch。
- [案例 2] LoRA 微調(4 個 epoch):基於 LoRA 適配器的微調,訓練 4 個 epoch。
- [案例 3] 解凍音頻編碼器微調(4 個 epoch):全量微調,訓練 4 個 epoch。
實驗結果如下:
- zeroth - test 集的 CER 和 WER(越低越好):
- 案例 1 的 CER 和 WER 分別為 3.80% 和 11.52%,優於基線(7.02% 和 17.31%)。
- 案例 2 的 CER 和 WER 分別為 2.72% 和 7.19%,優於案例 1。
- 案例 3 的 CER 和 WER 分別為 1.61% 和 3.54%,在所有案例中表現最佳。
- fleurs ko <-> en 語音翻譯測試集的 BLEU 分數(越高越好):
- 案例 1 的結果與基線相比沒有改善。特別是,fleurs - ko2en - cot 的 BLEU 分數比基線有所下降。
- 案例 2 的結果比案例 1 略有改善,在所有案例中表現最佳。
- 案例 3 的結果與基線和案例 2 相比沒有改善。
模型 | zeroth (CER) | zeroth (WER) | fleurs - ko2en | fleurs - ko2en - cot | fleurs - en2ko | fleurs - en2ko - cot |
---|---|---|---|---|---|---|
original | 99.16 | 99.63 | 5.63 | 2.42 | 6.86 | 4.17 |
Ours - speech full finetune (4 epochs) | 1.61 | 3.54 | 7.67 | 8.38 | 12.31 | 9.69 |
LoRA finetune (4 epochs) | 2.72 | 7.19 | 7.11 | 9.95 | 13.22 | 10.45 |
LoRA finetune (1 epoch) | 3.80 | 11.52 | 7.03 | 7.04 | 12.50 | 9.54 |
Phi - 4 - mm - inst - zeroth - kor | 7.02 | 17.31 | 7.07 | 9.19 | 13.08 | 9.35 |
注意事項
請注意,此模型僅用於概念驗證/實驗目的,不打算用於生產環境。需要更多高質量的數據、調優、消融研究和實驗。
Phi-4-multimodal 模型在多模態任務中表現出色,特別是在語音到文本方面,在韓語任務中具有很高的潛力。因此,如果您對韓語語音到文本任務感興趣,這個模型可以是一個很好的起點。
參考資料
- https://huggingface.co/microsoft/Phi-4-multimodal-instruct
- https://huggingface.co/seastar105/Phi-4-mm-inst-zeroth-kor
商標
本項目可能包含項目、產品或服務的商標或標誌。對 Microsoft 商標或標誌的授權使用需遵循並必須遵守 Microsoft 的商標和品牌指南。在本項目的修改版本中使用 Microsoft 商標或標誌不得造成混淆或暗示 Microsoft 的贊助。任何第三方商標或標誌的使用需遵循這些第三方的政策。











