Phi-3-Vision-128K大模型,AI助力OCR,文檔處理更上一層樓
1 Phi-3-Vision-128K-Instruct 簡介
Phi-3-Vision-128K-Instruct 屬于 Phi-3 模型家族,專為多模態數據處理而構建,支持長達 128,000 個令牌的上下文長度。該模型融合了文本和視覺數據,非常適合需要同時解釋文本和圖像的任務。其開發涉及 5000 億個訓練令牌,包括高質量的合成數據和經過嚴格篩選的公開可用資源。此外,通過監督微調和偏好優化等精細訓練手段,Phi-3-Vision-128K-Instruct 被打造成能夠提供精確、可靠且安全的人工智能解決方案。
Phi-3-Vision-128K-Instruct 擁有42億個參數,其架構精巧,集成了圖像編碼器、連接器、投影器以及 Phi-3 Mini 語言模型,使其成為輕量級但功能強大的選擇,適用于廣泛的應用。
2 應用場景
Phi-3-Vision-128K-Instruct 模型的應用范圍廣泛,主要聚焦在以下幾個核心領域:
1). 文檔提取和OCR技術:能夠高效地將圖像中的文字或掃描的文檔轉換成可編輯的格式,尤其擅長處理包含表格、圖表等復雜布局的文檔。這使其成為數字化紙質文檔或自動化數據提取工作流程的有價值工具。
2). 圖像內容理解:該模型能夠解析圖像內容,識別出圖像中的對象,理解場景,并從中提取出有用的信息。
3). 資源受限環境:即使在計算能力或內存受限的環境下,Phi-3-Vision-128K-Instruct 也能夠運行AI任務,確保性能不打折。
4). 實時應用場景:能夠減少實時應用程序中的處理延遲,適用于實時數據流、聊天助手或流媒體內容分析等場景,以提高響應速度。
3 部署 Phi-3-Vision-128K-Instruct
要使用 Phi-3-Vision-128K-Instruct,需要設置所需的庫和工具的開發環境。該模型集成在 Hugging Face transformers 庫的開發版本(4.40.2)中。在深入代碼示例之前,先確保你的 Python 環境配置了這些包:
# 所需包
flash_attn==2.5.8
numpy==1.24.4
Pillow==10.3.0
Requests==2.31.0
torch==2.3.0
torchvision==0.18.0
transformers==4.40.2
要加載模型,可以更新本地 transformers 庫。
模型加載示例
以下是一個 Python 示例,展示了如何初始化模型并進行推理。使用類和函數來保持代碼的清晰性和結構性:
from PIL import Image
import requests
from transformers import AutoModelForCausalLM, AutoProcessor
class Phi3VisionModel:
def __init__(self, model_id="microsoft/Phi-3-vision-128k-instruct", device="cuda"):
"""
Initialize the Phi3VisionModel with the specified model ID and device.
Args:
model_id (str): The identifier of the pre-trained model from Hugging Face's model hub.
device (str): The device to load the model on ("cuda" for GPU or "cpu").
"""
self.model_id = model_id
self.device = device
self.model = self.load_model() # 在初始化期間加載模型
self.processor = self.load_processor() # 在初始化期間加載處理器
def load_model(self):
"""
Load the pre-trained language model with causal language modeling capabilities.
Returns:
model (AutoModelForCausalLM): The loaded model.
"""
print("Loading model...")
# 使用自動設備映射和數據類型調整加載模型
return AutoModelForCausalLM.from_pretrained(
self.model_id,
device_map="auto", # 自動將模型映射到適當的設備
torch_dtype="auto", # 根據設備使用適當的 torch 數據類型
trust_remote_code=True, # 允許執行自定義代碼以加載模型
_attn_implementation='flash_attention_2' # 使用優化的注意力實現
).to(self.device) # 將模型移動到指定的設備
def load_processor(self):
"""
Load the processor associated with the model for processing inputs and outputs.
Returns:
processor (AutoProcessor): The loaded processor for handling text and images.
"""
print("Loading processor...")
# 使用 trust_remote_code=True 加載處理器,以處理任何自定義處理邏輯
return AutoProcessor.from_pretrained(self.model_id, trust_remote_code=True)
def predict(self, image_url, prompt):
"""
Perform a prediction using the model given an image and a prompt.
Args:
image_url (str): The URL of the image to be processed.
prompt (str): The textual prompt that guides the model's generation.
Returns:
response (str): The generated response from the model.
"""
# 從提供的 URL 加載圖像
image = Image.open(requests.get(image_url, stream=True).raw)
# 為模型格式化輸入提示模板
prompt_template = f"<|user|>\n<|image_1|>\n{prompt}<|end|>\n<|assistant|>\n"
# 處理輸入,將提示和圖像轉換為張量格式
inputs = self.processor(prompt_template, [image], return_tensors="pt").to(self.device)
# 設置模型響應生成的生成參數
generation_args = {
"max_new_tokens": 500, # 生成的最大令牌數
"temperature": 0.7, # 生成的采樣溫度,以增加多樣性
"do_sample": False # 禁用采樣以獲得確定性輸出
}
print("Generating response...")
# 使用模型生成輸出 ID,跳過輸入令牌
output_ids = self.model.generate(**inputs, **generation_args)
output_ids = output_ids[:, inputs['input_ids'].shape[1]:] # Ignore the input prompt in the output
# 解碼生成的輸出令牌以獲得響應文本
response = self.processor.batch_decode(output_ids, skip_special_tokens=True)[0]
return response
# 初始化模型
phi_model = Phi3VisionModel()
# 示例預測
image_url = "https://example.com/sample_image.png" # 示例圖像的 URL
prompt = "Extract the data in json format." # 指導模型的提示
response = phi_model.predict(image_url, prompt) # 獲取模型的響應
print("Response:", response) # 打印生成的響應
上述代碼定義了 Phi3VisionModel? 類,它抽象了模型的加載和使用,使其更容易集成到你的應用程序中。predict() 方法展示了如何使用自定義提示進行基于圖像的推理。
4 OCR 功能測試
為了評估 Phi-3-Vision-128K-Instruct 模型的 OCR 性能,我們選取了一些真實掃描的身份證圖像作為測試樣本。這些圖像質量參差不齊,清晰度也各不相同,給模型帶來了不同程度的挑戰。目標是展示模型如何能夠從具有不同特征的文檔中提取文本信息,例如模糊、復雜的背景和不同的文本字體。
圖像 1:一本虛構的護照,上面詳細記錄了個人資料,包括姓名、國籍、出生地、簽發日期和有效期。底部有一個可讀區域。圖像質量高,背景噪音不明顯。
輸出:
{
"Type/Type": "P",
"Country code/Code du pays": "UTO",
"Passport Number/N° de passeport": "L898902C3",
"Surname/Nom": "ERIKSSON",
"Given names/Prénoms": "ANNA MARIA",
"Nationality/Nationalité": "UTOPIAN",
"Date of Birth/Date de naissance": "12 AUGUST/AOUT 74",
"Personal No./N° personnel": "Z E 184226 B",
"Sex/Sexe": "F",
"Place of birth/Lieu de naissance": "ZENITH",
"Date of issue/Date de délivrance": "16 APR/AVR 07",
"Authority/Autorité": "PASSPORT OFFICE",
"Date of expiry/Date d'expiration": "15 APR/AVR 12",
"Holder's signature/Signature du titulaire": "anna maria eriksson",
"Passport/Passeport": "P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<<<<<L898902C36UT07408122F1204159ZE184226B<<<<10"
}
圖像 2:一本荷蘭護照,上面有清晰的持有人照片和整齊格式化的文本。字段包括護照號碼、姓名、出生日期、國籍和有效期。文件以高對比度呈現,文本提取相對直接。底部的可讀區域(MRZ)提供了結構化的數據格式,有助于驗證提取信息的準確性。
輸出:
以下是從護照中提取的完整數據,以 JSON 格式呈現:
{
"passport": {
"issuingCountry": "Netherlands",
"issuingAuthority": "Koninkrijk der Nederlanden",
"passportNumber": "SPEC12014",
"issuingDate": "09 MAR 2014",
"expiryDate": "09 MAR 2024",
"holder": {
"gender": "F",
"nationality": "Netherlands",
"placeOfBirth": "SPECIMEN",
"sex": "WF",
"firstNames": [
"Willem",
"Lieselotte"
]
},
"physicalDescription": {
"height": "1.75 m",
"hairColor": "gray",
"hairLength": "short"
},
"issuingOffice": "Burg. van Stad en Dorp",
"issuingDateAsInt": "14032014",
"expiryDateAsInt": "14032024",
"fieldsExtracted": [
{
"code": "NL",
"dateOfBirth": "10 MAR 1965",
"dateOfIssue": "09 MAR 2014",
"dateOfExpiry": "09 MAR 2024",
"firstNames": [
"Willem",
"Lieselotte"
],
"nationality": "Netherlands",
"passportNumber": "SPEC12014",
"placeOfBirth": "SPECIMEN",
"sex": "WF"
}
]
}
}
5 在線體驗 Phi-3-Vision-128K-Instruct
如果你想親自嘗試 Phi-3-Vision-128K-Instruct 模型,你可以通過以下鏈接來體驗:https://ai.azure.com/explore/models/Phi-3-vision-128k-instruct/version/1/registry/azureml。這個鏈接可以體驗模型的功能,嘗試其 OCR 功能。
6 架構與訓練
Phi-3-Vision-128K-Instruct 模型不單是一個語言模型,它是一個強大的多模態工具,能夠同時處理視覺和文本數據。這個模型經歷了包含5000億個令牌的綜合訓練,涵蓋了文本和圖像數據。其架構巧妙地融合了語言模型和圖像處理模塊,構建了一個能夠理解超過128K令牌上下文的連貫系統,使之能夠應對長篇對話或處理大量內容的文檔。
得益于在如512 H100 GPU這樣的高性能硬件上的訓練,以及采用flash attention技術提高內存效率,Phi-3-Vision-128K-Instruct 模型能夠輕松駕馭大規模任務。它的訓練數據集是合成數據和經過篩選的真實世界數據的混合體,特別強調了數學、編碼、常識推理和一般知識,這使模型具有廣泛的適用性,能夠適應各種不同的應用場景。
7 性能基準
Phi-3-Vision-128K-Instruct 模型的性能已在多個基準測試中進行了測試,這些測試包括 ScienceQA、AI2D、MathVista 和 TextVQA。在涉及文本和視覺信息結合的任務上,該模型的得分普遍超越了眾多現有模型,特別是在以下兩個方面表現突出:
- 文檔理解能力:Phi-3-Vision-128K-Instruct 能夠從復雜的文檔如 PDF 或圖像中抽取關鍵信息。
- 表格和圖表理解:該模型能夠精確解讀圖形數據,并將這些數據轉換成文字描述。
值得一提的是,在 ChartQA 數據集上,Phi-3-Vision-128K-Instruct 達到了 81.4% 的準確率;在 AI2D 數據集上,也取得了 76.7% 的高分。這些成績充分證明了模型在理解數據密集型文檔方面的強勁實力。
結語
Phi-3-Vision-128K-Instruct 代表的不僅僅是多模態人工智能領域的一次進步,它更是引領我們走向一個文檔提取、OCR和AI驅動內容生成無縫銜接、易于操作的未來。得益于其全面的訓練、強大的架構和深思熟慮的設計,這一模型賦予了開發者在各個領域革新數據處理方式的能力。
本文轉載自 ??AI科技論談??,作者: AI科技論談
