[ad_1]
Khám phá các trường hợp sử dụng có thể có của Phi-3-Imaginative and prescient, một MLLM nhỏ nhưng mạnh mẽ có thể chạy cục bộ (với các ví dụ về mã)
Microsoft gần đây đã phát hành Phi-3, một mô hình ngôn ngữ mạnh mẽ, với biến thể Imaginative and prescient-Language mới có tên Phi-3-vision-128k-instruct. Mô hình tham số 4B này đã đạt được kết quả ấn tượng trên các điểm chuẩn công khai, thậm chí vượt qua GPT-4V trong một số trường hợp và vượt trội hơn Gemini 1.0 Professional V về tất cả ngoại trừ MMMU.
Bài đăng trên weblog này sẽ khám phá cách bạn có thể sử dụng Phi-3-vision-128k-instruct làm mô hình văn bản và hình ảnh mạnh mẽ trong bộ công cụ khoa học dữ liệu của bạn. Chúng tôi sẽ chứng minh khả năng của nó thông qua các trường hợp sử dụng khác nhau, bao gồm:
- Nhận dạng ký tự quang học (OCR)
- Chú thích hình ảnh
- Phân tích bảng
- Hiểu biết về hình
- Đọc hiểu trên tài liệu được quét
- Nhắc nhở về bộ điểm
Chúng tôi sẽ bắt đầu bằng cách cung cấp một đoạn mã đơn giản để chạy mô hình này cục bộ bằng cách sử dụng máy biến áp và bitandbyte. Sau đó, chúng tôi sẽ giới thiệu một ví dụ cho từng trường hợp sử dụng được liệt kê ở trên.
Chạy mô hình cục bộ:
Tạo môi trường Conda Python và cài đặt đèn pin cũng như các phần phụ thuộc python khác:
conda set up pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
pip set up git+https://github.com/huggingface/transformers.git@60bb571e993b7d73257fb64044726b569fef9403 pillow==10.3.0 chardet==5.2.0 flash_attn==2.5.8 speed up==0.30.1 bitsandbytes==0.43.1
Sau đó, chúng ta có thể chạy tập lệnh này:
# Instance impressed from https://huggingface.co/microsoft/Phi-3-vision-128k-instruct# Import vital libraries
from PIL import Picture
import requests
from transformers import AutoModelForCausalLM
from transformers import AutoProcessor
from transformers import BitsAndBytesConfig
import torch
# Outline mannequin ID
model_id = "microsoft/Phi-3-vision-128k-instruct"
# Load processor
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
# Outline BitsAndBytes configuration for 4-bit quantization
nf4_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.bfloat16,
)
# Load mannequin with 4-bit quantization and map to CUDA
mannequin = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cuda",
trust_remote_code=True,
torch_dtype="auto",
quantization_config=nf4_config,
)
# Outline preliminary chat message with picture placeholder
messages = (image_1)
# Obtain picture from URL
url = "https://pictures.unsplash.com/photo-1528834342297-fdefb9a5a92b?ixlib=rb-4.0.3&q=85&fm=jpg&crop=entropy&cs=srgb&dl=roonz-nl-vjDbHCjHlEY-unsplash.jpg&w=640"
picture = Picture.open(requests.get(url, stream=True).uncooked)
# Put together immediate with picture token
immediate = processor.tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
# Course of immediate and picture for mannequin enter
inputs = processor(immediate, (picture), return_tensors="pt").to("cuda:0")
# Generate textual content response utilizing mannequin
generate_ids = mannequin.generate(
**inputs,
eos_token_id=processor.tokenizer.eos_token_id,
max_new_tokens=500,
do_sample=False,
)
# Take away enter tokens from generated response
generate_ids = generate_ids(:, inputs("input_ids").form(1) :)
# Decode generated IDs to textual content
response = processor.batch_decode(
generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)(0)
# Print the generated response
print(response)
Mã này sẽ tải mô hình Phi-3 giống như chúng ta làm transfomers
người mẫu. Chúng tôi thêm bitsandbytes
để nó phù hợp với bộ nhớ GPU cấp độ người tiêu dùng.
Chúng tôi sử dụng lời nhắc đơn giản `<|image_1|>nĐiều gì được hiển thị trong hình ảnh này?` nơi chúng tôi tham chiếu hình ảnh và yêu cầu mô tả về nội dung trong đó. Lời nhắc này được xử lý bằng hình ảnh (Hình ảnh giống với hình thu nhỏ của weblog này) và được cung cấp thông qua mô hình. Điều này dẫn đến kết quả đầu ra sau:
Hình ảnh cho thấy một bông hoa màu vàng có thân màu xanh lá cây trên nền xanh lam.
Sau khi tải mô hình, quá trình xử lý và dự đoán mất 2 giây trên RTX3080.
Bây giờ chúng ta đã thiết lập xong, hãy khám phá một số trường hợp sử dụng:
Nhận dạng ký tự quang học (OCR)
Chúng tôi muốn sao chép văn bản từ một hình ảnh. Để làm như vậy, hãy thay đổi thông báo và dòng URL hình ảnh trong đoạn mã trên bằng:
messages = (image_1)
url = "https://i.postimg.cc/fRFvFVyv/Screenshot-from-2024-05-22-20-55-43.png"
Đầu vào:
Đầu ra:
3 THÍ NGHIỆM
Chúng tôi cho thấy Nội suy vị trí có thể mở rộng cửa sổ ngữ cảnh một cách hiệu quả lên tới 32 lần kích thước ban đầu và việc mở rộng như vậy có thể được thực hiện chỉ với vài trăm bước đào tạo. Chúng tôi cho thấy các mô hình thu được là LLM mạnh với các cửa sổ ngữ cảnh dài hoàn toàn hiệu quả. Chúng tôi chứng minh hiệu suất của nó trong một số tác vụ bao gồm mô hình hóa ngôn ngữ, truy xuất mã khóa và tài liệu dài.
tóm tắt ument. Chúng tôi cũng trình bày kết quả điểm chuẩn của các mô hình mở rộng trên điểm chuẩn đánh giá LLaMA ban đầu.
Kết quả đúng như mong đợi! Quá trình sao chép toàn bộ văn bản mất 6 giây, hơi chậm so với OCR thông thường.
Chú thích hình ảnh
Mục tiêu ở đây là chú thích cho một hình ảnh tự nhiên:
messages = (image_1)
url = "https://i.postimg.cc/q7Wjtj3n/Screenshot-from-2024-05-22-20-56-56.png"
Đầu vào:
Đầu ra:
Hình ảnh này cho thấy một món đồ chơi sang trọng giống nhân vật trong loạt phim hoạt hình nổi tiếng. Đồ chơi có thân hình tròn, có mũ trùm đầu và đeo một cặp kính. Khuôn mặt của nhân vật không hiển thị trong hình ảnh.
Hầu hết là đúng (không đeo kính 😞). Tuy nhiên, điều ấn tượng là nó đã nhận ra Kenny trong một loạt phim hoạt hình.
Phân tích bảng
Chúng tôi muốn xem liệu mô hình có thể phân tích bảng thành định dạng mà máy có thể đọc được hay không:
messages = (image_1)
url = "https://i.postimg.cc/W1YwqXk8/Screenshot-from-2024-05-22-21-41-03.png"
Đầu vào:
Đầu ra:
```json
(
{
"Benchmark": "Phi-3 Imaginative and prescient-128K-In1",
"MMMU": 40.2,
"MMBench": 80.5,
"ScienceQA": 90.8
},
{
"Benchmark": "LlaVA-1.6 Vicuna-7B",
"MMMU": 34.2,
"MMBench": 76.3,
"ScienceQA": 70.6
},
{
"Benchmark": "QWEN-VI Chat",
"MMMU": 39.0,
"MMBench": 75.8,
"ScienceQA": 67.2
}
)
```
Nó thực sự có thể trích xuất nội dung của bảng ở định dạng có cấu trúc, trực tiếp từ ảnh chụp màn hình.
Hiểu biết về hình
Chúng tôi nhắc người mẫu mô tả một hình:
messages = (>nWhat is that this determine about? ")
url = "https://i.postimg.cc/Y0sRQR4Q/Screenshot-from-2024-05-22-21-47-39.png"
Đầu vào:
Đầu ra:
Hình này là biểu đồ thanh so sánh hiệu suất của các mô hình học máy khác nhau, trong đó mỗi mô hình được biểu thị bằng một cặp thanh xếp chồng biểu thị hiệu suất của mô hình cơ sở và mô hình được tinh chỉnh.
Ngắn gọn nhưng đúng!
Đọc hiểu trên tài liệu được quét
Mục đích là đặt câu hỏi về văn bản được quét hoặc chụp ảnh. Điều này khác với Nhận dạng ký tự quang học (OCR) ở chỗ chúng tôi không quan tâm đến việc chỉ sao chép văn bản. Thay vào đó, chúng tôi muốn đánh giá xem liệu mô hình có thể hiểu nội dung bằng văn bản và trả lời trực tiếp các câu hỏi về nội dung đó hay không.
messages = (>nWhat is that this e-book about? ")
url = "https://i.postimg.cc/rmHxPbQY/Screenshot-from-2024-05-22-20-56-21.png"
Đầu vào:
Đầu ra:
Hình ảnh là bìa của cuốn sách có tựa đề ‘SAM TALLENT RUNNING THE LIGHT’ với phần tóm tắt mô tả câu chuyện của một diễn viên hài tên là Billy Ray Schafer, người đang phải đối mặt với những thử thách cá nhân và nghề nghiệp. Cuốn sách này dường như là một tác phẩm hư cấu, có thể là một cuốn tiểu thuyết vì nó bao gồm một câu trích dẫn từ DOUG STANHOPE, ICONOCLAST, ca ngợi cuốn sách là sự thể hiện xuất sắc và hư cấu hay nhất của hài kịch.
Tiêu đề cuốn sách sai nhưng MLLM có thể hiểu văn bản trong hình nói về nội dung gì và tóm tắt nó chỉ trong một lần.
Nhắc nhở về bộ điểm
Lời nhắc Set-of-Mark (SoM) sử dụng các mô hình phân đoạn tương tác để chia hình ảnh thành các vùng và đánh dấu chúng bằng các ký hiệu, cho phép các mô hình đa phương thức lớn hiểu rõ hơn và trả lời các câu hỏi có căn cứ trực quan.
Để đơn giản hóa mọi thứ trong ví dụ này, tôi đã đánh dấu các đối tượng theo cách thủ công thay vì sử dụng mô hình và sau đó tham chiếu dấu (4) theo lời nhắc của tôi:
messages = (>nWhat is object quantity 4? ")
url = "https://i.postimg.cc/fy0Lz798/scott-webb-p-0l-WFknspg-unsplash-2.jpg"
Đầu vào:
Đối tượng số 4 là một cây xương rồng có hoa màu cam trong chậu.
MLLM có thể hiểu tài liệu tham khảo của tôi và trả lời câu hỏi của tôi một cách phù hợp.
Vì vậy, bạn có nó! Phi-3-Imaginative and prescient là một mô hình mạnh mẽ để làm việc với hình ảnh và văn bản, có khả năng hiểu nội dung hình ảnh, trích xuất văn bản từ hình ảnh và thậm chí trả lời các câu hỏi về những gì nó nhìn thấy. Mặc dù kích thước nhỏ, chỉ với 4 tỷ tham số, có thể hạn chế khả năng phù hợp với các tác vụ đòi hỏi kỹ năng ngôn ngữ mạnh, nhưng hầu hết các mô hình cùng loại đều có kích thước ít nhất gấp đôi ở tham số 8B trở lên, khiến nó trở nên nổi bật về hiệu quả. Nó tỏa sáng trong các ứng dụng như phân tích cú pháp tài liệu, hiểu cấu trúc bảng và OCR trong thực tế. Bản chất nhỏ gọn của nó khiến nó trở nên lý tưởng để triển khai trên các thiết bị biên hoặc GPU cấp độ người tiêu dùng cục bộ, đặc biệt là sau khi lượng tử hóa. Nó sẽ là mô hình phù hợp của tôi trong tất cả các quy trình phân tích cú pháp và hiểu tài liệu, vì khả năng không bắn của nó khiến nó trở thành một công cụ hữu ích, đặc biệt là đối với kích thước khiêm tốn của nó. Tiếp theo, tôi cũng sẽ làm việc trên một số tập lệnh tinh chỉnh LoRA cho mô hình này để xem tôi có thể đẩy nó đến mức nào đối với các nhiệm vụ chuyên biệt hơn.
Người giới thiệu:
[ad_2]
Source link