Phi-4-multimodal là một mô hình nền tảng đa phương thức gọn nhẹ do Microsoft phát triển. Nó thuộc họ Phi của Microsoft gồm các mô hình đa phương thức và là một phần trong họ mô hình ngôn ngữ nhỏ (SLM) của Microsoft.
Trong hướng dẫn này, tôi sẽ giải thích từng bước cách sử dụng Phi-4-multimodal để xây dựng một gia sư ngôn ngữ đa phương thức có thể làm việc với văn bản, hình ảnh và âm thanh. Các tính năng chính của ứng dụng này gồm:
Học dựa trên văn bản: Cung cấp sửa ngữ pháp theo thời gian thực, dịch ngôn ngữ, tái cấu trúc câu và gợi ý từ vựng theo ngữ cảnh.
Học dựa trên hình ảnh: Trích xuất và dịch văn bản từ hình ảnh, đồng thời tóm tắt nội dung trực quan để hiểu tốt hơn.
Học dựa trên âm thanh: Chuyển giọng nói thành văn bản, đánh giá độ chính xác phát âm và cho phép dịch giọng nói theo thời gian thực sang nhiều ngôn ngữ.
Trước hết, hãy điểm qua nhanh mô hình Phi-4-multimodal, sau đó chúng ta sẽ bắt đầu xây dựng ứng dụng.
Phi-4-Multimodal là gì?
Phi-4-multimodal là một mô hình AI tiên tiến được thiết kế để xử lý văn bản, thị giác và giọng nói. Nó cho phép tích hợp liền mạch nhiều phương thức, rất phù hợp cho các ứng dụng học ngôn ngữ. Một số năng lực chính bao gồm:
Xử lý văn bản: Bao gồm sửa ngữ pháp, dịch và xây dựng câu.
Xử lý thị giác: Phi 4 có thể thực hiện nhận dạng ký tự quang học (OCR), tóm tắt hình ảnh và tương tác đa phương thức.
Xử lý giọng nói: Có thể thực hiện nhận dạng giọng nói tự động (ASR), kèm phản hồi phát âm và dịch giọng nói sang văn bản.
Với độ dài ngữ cảnh 128K token, Phi-4 multimodal được tối ưu cho lập luận hiệu quả và môi trường hạn chế bộ nhớ, rất phù hợp cho học ngôn ngữ thời gian thực sử dụng AI.
Bước 1: Điều kiện tiên quyết
Ứng dụng gia sư ngôn ngữ đa phương thức mà chúng ta sắp xây dựng là một công cụ tương tác dùng AI, hỗ trợ người dùng học ngôn ngữ mới bằng sự kết hợp giữa tương tác văn bản, hình ảnh và âm thanh.
Trước khi bắt đầu, hãy đảm bảo rằng chúng ta đã cài đặt các công cụ và thư viện sau:
Python 3.8+
torch
Transformers
PIL
Soundfile
Gradio
Chạy các lệnh sau để cài đặt các phụ thuộc cần thiết:
pip install gradio transformers torch soundfile pillowĐược hỗ trợ bởi
Chúng ta cũng cần đảm bảo đã cài FlashAttention2 để có hiệu năng tốt hơn:
Lưu ý: Dự án này sử dụng GPU A100 trên sổ tay Google Colab. Nếu bạn dùng GPU cũ hơn (ví dụ NVIDIA V100), bạn có thể cần vô hiệu hóa FlashAttention2 bằng cách đặt _attn_implementation="eager" ở bước khởi tạo mô hình.
Sau khi cài đặt xong các phụ thuộc trên, hãy chạy các lệnh import sau:
import gradio as gr
import torch
import requests
import io
import os
import soundfile as sf
from PIL import Image
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfigĐược hỗ trợ bởi
Bước 2: Nạp Phi-4-Multimodal
Để tận dụng khả năng đa phương thức của Phi-4, trước tiên chúng ta nạp cả mô hình và processor của nó. Đường dẫn mô hình được lấy từ Hugging Face, còn processor xử lý việc token hóa văn bản, thay đổi kích thước và chuẩn hóa hình ảnh, cũng như chuyển đổi dạng sóng âm thanh sang định dạng tương thích với mô hình để xử lý đa phương thức trôi chảy.
# Load model and processor
model_path ="microsoft/Phi-4-multimodal-instruct"
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,
_attn_implementation='flash_attention_2',).cuda()
generation_config = GenerationConfig.from_pretrained(model_path)Được hỗ trợ bởi
Bước khởi tạo mô hình sử dụng hàm 'AutoModelForCausalLM.from_pretrained() để nạp mô hình Phi-4 đã huấn luyện sẵn cho tác vụ mô hình hóa ngôn ngữ nhân quả (CLM) và nạp mô hình lên GPU bằng device_map="cuda".
Một tham số quan trọng ở bước này là _attn_implementation='flash_attention_2'`, sử dụng FlashAttention2 để có cơ chế attention nhanh hơn và tiết kiệm bộ nhớ hơn, đặc biệt cho xử lý ngữ cảnh dài.
Bước 3: Xây dựng các chức năng chính
Giờ khi đã nạp mô hình, hãy xây dựng các chức năng chính.
1. Làm sạch phản hồi
Một khía cạnh quan trọng của bất kỳ dự án dựa trên LLM hay VLM là đảm bảo mô hình tạo ra phản hồi chính xác và phù hợp. Điều này cũng bao gồm việc loại bỏ phần văn bản nhắc lệnh khỏi đầu ra, đảm bảo người dùng nhận được phản hồi gọn gàng, trực tiếp mà không có phần hướng dẫn ban đầu xuất hiện ở đầu.
defclean_response(response, instruction_keywords):"""Removes the prompt text dynamically based on instruction keywords."""for keyword in instruction_keywords:if response.lower().startswith(keyword.lower()):
response = response[len(keyword):].strip()return responseĐược hỗ trợ bởi
Chúng ta đơn giản dùng hàm strip() để lược bỏ phần nhắc lệnh dựa trên các từ khóa hướng dẫn.
2. Xử lý đầu vào
Tiếp theo, hãy xử lý đầu vào có thể là văn bản, hình ảnh hoặc âm thanh, tùy theo đầu vào hay kịch bản của người dùng.
Hàm trên chịu trách nhiệm xử lý đầu vào văn bản, hình ảnh và âm thanh, đồng thời tạo phản hồi bằng mô hình Phi-4-multimodal. Dưới đây là phân tích kỹ thuật của quy trình này:
Xử lý đầu vào hình ảnh: Nếu kiểu đầu vào là "Image", prompt được định dạng với một chỗ dành sẵn cho hình ảnh (<|image_1|>). Hình ảnh sau đó được nạp, và processor sẽ token hóa văn bản đi kèm đồng thời trích xuất đặc trưng thị giác. Các đầu vào đã xử lý được chuyển lên GPU để tính toán tối ưu.
Xử lý đầu vào âm thanh: Nếu kiểu đầu vào là "Audio", prompt được cấu trúc với chỗ dành sẵn cho âm thanh (<|audio_1|>). Tệp âm thanh được đọc bằng hàm sf.read(), trích xuất dạng sóng thô và tần số mẫu. Processor sau đó mã hóa cả âm thanh và văn bản, đảm bảo tích hợp liền mạch cho khả năng hiểu đa phương thức.
Xử lý đầu vào văn bản: Nếu kiểu đầu vào là "Text", văn bản được nhúng trực tiếp vào prompt. Processor token hóa và mã hóa đầu vào, chuẩn bị cho bước xử lý tiếp theo của mô hình.
3. Dịch và sửa ngữ pháp
Tiếp theo, chúng ta xử lý văn bản để dịch và sửa ngữ pháp bằng mô hình Phi-4-multimodal.
defprocess_text_translate(text, target_language):
prompt =f'Translate the following text to {target_language}: "{text}"'return process_input(text,"Text", prompt)defprocess_text_grammar(text):
prompt =f'Check the grammar and provide corrections if needed for the following text: "{text}"'return process_input(text,"Text", prompt)Được hỗ trợ bởi
Hàm process_text_translate() xây dựng động một prompt dịch bằng cách chỉ định ngôn ngữ đích, sau đó truyền văn bản đầu vào và prompt đã cấu trúc tới hàm process_input(), trả về bản dịch.
Tương tự, hàm process_text_grammar() tạo prompt kiểm tra ngữ pháp, gọi hàm process_input() với văn bản và kiểu đầu vào, và trả về phiên bản văn bản đã được chỉnh ngữ pháp. Cả hai hàm đều tận dụng khả năng của mô hình cho tác vụ dịch và sửa ngữ pháp để tinh gọn quá trình xử lý ngôn ngữ.
Bước 4: Xây dựng bản demo đa phương thức với Gradio
Giờ chúng ta đã có các hàm logic chính. Tiếp theo, hãy xây dựng giao diện tương tác với Gradio.
Đoạn mã trên tổ chức giao diện Gradio thành ba tab tương tác, gồm học dựa trên văn bản, học dựa trên hình ảnh và học dựa trên âm thanh, mỗi tab được thiết kế cho các chức năng học ngôn ngữ khác nhau.
Người dùng có thể nhập văn bản để dịch hoặc kiểm tra ngữ pháp, tải hình ảnh để trích xuất văn bản và tóm tắt, hoặc cung cấp âm thanh để phiên âm và dịch.
Mỗi chức năng được kích hoạt bằng phương thức click() của Gradio, gọi các hàm xử lý như process_text_translate(), process_text_grammar() và process_input() như đã nêu ở trên, bằng cách truyền các đầu vào cần thiết và cập nhật đầu ra động.
Clear được bao gồm ở mỗi tab để đặt lại đầu vào và đầu ra, đảm bảo trải nghiệm mượt mà. Cuối cùng, giao diện được khởi chạy bằng demo.launch(debug=True) giúp nhà phát triển dễ dàng gỡ lỗi mọi lỗi trong ứng dụng.
Bước 5: Kiểm thử ứng dụng
Dưới đây là một vài thử nghiệm của tôi với ứng dụng này.
Dịch và kiểm tra ngữ pháp
Đối với tác vụ dịch và kiểm tra ngữ pháp, tôi cung cấp văn bản "Hello world" và yêu cầu mô hình dịch sang tiếng Pháp và xác minh ngữ pháp (lưu ý các nút khác nhau cho dịch và kiểm tra ngữ pháp).
Dịch văn bản trong hình ảnh
Trong ví dụ này, tôi cung cấp một hình ảnh biển báo dừng bằng tiếng Tây Ban Nha yêu cầu người đi bộ không đi vào lối nhất định. Mô hình đã diễn giải chính xác ý nghĩa của biển báo và tạo phản hồi: "Không đi bộ trên đường ray."
Phiên âm và dịch âm thanh
Đối với phiên âm âm thanh, tôi cung cấp một tệp âm thanh tiếng Anh và yêu cầu mô hình phiên âm lời nói rồi dịch bản phiên âm sang tiếng Pháp.
Kết luận
Trong hướng dẫn này, chúng ta đã xây dựng một gia sư ngôn ngữ đa phương thức sử dụng mô hình Phi-4 multimodal, cho phép học ngôn ngữ dựa trên văn bản, hình ảnh và âm thanh. Chúng ta đã khai thác các khả năng thị giác, giọng nói và văn bản tiên tiến của Phi-4 để cung cấp dịch theo thời gian thực, sửa ngữ pháp, phiên âm giọng nói và hiểu biết dựa trên hình ảnh. Dự án này cho thấy AI đa phương thức có thể nâng cao giáo dục ngôn ngữ và khả năng tiếp cận như thế nào.
Tôi là Chuyên gia Google Developers trong lĩnh vực ML (Gen AI), Chuyên gia Kaggle 3x và Đại sứ Women Techmakers với hơn 3 năm kinh nghiệm trong ngành công nghệ. Tôi đồng sáng lập một startup công nghệ y tế vào năm 2020 và hiện đang theo học thạc sĩ khoa học máy tính tại Georgia Tech, chuyên sâu về học máy.
Học cách phát triển các ứng dụng được hỗ trợ bởi trí tuệ nhân tạo (AI) bằng cách sử dụng các công cụ phát triển AI mới nhất, bao gồm API OpenAI, Hugging Face và LangChain.
Thử nghiệm với Llama 3 để thực hiện suy luận trên các mô hình đã được huấn luyện sẵn, tinh chỉnh chúng trên các tập dữ liệu tùy chỉnh và tối ưu hóa hiệu suất.
Phi-4-multimodal là một mô hình nền tảng đa phương thức gọn nhẹ do Microsoft phát triển. Nó thuộc họ Phi của Microsoft gồm các mô hình đa phương thức và là một phần trong họ mô hình ngôn ngữ nhỏ (SLM) của Microsoft.
Trong hướng dẫn này, tôi sẽ giải thích từng bước cách sử dụng Phi-4-multimodal để xây dựng một gia sư ngôn ngữ đa phương thức có thể làm việc với văn bản, hình ảnh và âm thanh. Các tính năng chính của ứng dụng này gồm:
Trước hết, hãy điểm qua nhanh mô hình Phi-4-multimodal, sau đó chúng ta sẽ bắt đầu xây dựng ứng dụng.
Phi-4-Multimodal là gì?
Phi-4-multimodal là một mô hình AI tiên tiến được thiết kế để xử lý văn bản, thị giác và giọng nói. Nó cho phép tích hợp liền mạch nhiều phương thức, rất phù hợp cho các ứng dụng học ngôn ngữ. Một số năng lực chính bao gồm:
Với độ dài ngữ cảnh 128K token, Phi-4 multimodal được tối ưu cho lập luận hiệu quả và môi trường hạn chế bộ nhớ, rất phù hợp cho học ngôn ngữ thời gian thực sử dụng AI.
Bước 1: Điều kiện tiên quyết
Ứng dụng gia sư ngôn ngữ đa phương thức mà chúng ta sắp xây dựng là một công cụ tương tác dùng AI, hỗ trợ người dùng học ngôn ngữ mới bằng sự kết hợp giữa tương tác văn bản, hình ảnh và âm thanh.
Trước khi bắt đầu, hãy đảm bảo rằng chúng ta đã cài đặt các công cụ và thư viện sau:
Chạy các lệnh sau để cài đặt các phụ thuộc cần thiết:
Chúng ta cũng cần đảm bảo đã cài FlashAttention2 để có hiệu năng tốt hơn:
Lưu ý: Dự án này sử dụng GPU A100 trên sổ tay Google Colab. Nếu bạn dùng GPU cũ hơn (ví dụ NVIDIA V100), bạn có thể cần vô hiệu hóa
FlashAttention2bằng cách đặt_attn_implementation="eager"ở bước khởi tạo mô hình.Sau khi cài đặt xong các phụ thuộc trên, hãy chạy các lệnh import sau:
Bước 2: Nạp Phi-4-Multimodal
Để tận dụng khả năng đa phương thức của Phi-4, trước tiên chúng ta nạp cả mô hình và processor của nó. Đường dẫn mô hình được lấy từ Hugging Face, còn processor xử lý việc token hóa văn bản, thay đổi kích thước và chuẩn hóa hình ảnh, cũng như chuyển đổi dạng sóng âm thanh sang định dạng tương thích với mô hình để xử lý đa phương thức trôi chảy.
Bước khởi tạo mô hình sử dụng hàm 'AutoModelForCausalLM.from_pretrained()
để nạp mô hình Phi-4 đã huấn luyện sẵn cho tác vụ mô hình hóa ngôn ngữ nhân quả (CLM) và nạp mô hình lên GPU bằngdevice_map="cuda".Một tham số quan trọng ở bước này là _attn_implementation='flash_attention_2'`, sử dụng FlashAttention2 để có cơ chế attention nhanh hơn và tiết kiệm bộ nhớ hơn, đặc biệt cho xử lý ngữ cảnh dài.
Bước 3: Xây dựng các chức năng chính
Giờ khi đã nạp mô hình, hãy xây dựng các chức năng chính.
1. Làm sạch phản hồi
Một khía cạnh quan trọng của bất kỳ dự án dựa trên LLM hay VLM là đảm bảo mô hình tạo ra phản hồi chính xác và phù hợp. Điều này cũng bao gồm việc loại bỏ phần văn bản nhắc lệnh khỏi đầu ra, đảm bảo người dùng nhận được phản hồi gọn gàng, trực tiếp mà không có phần hướng dẫn ban đầu xuất hiện ở đầu.
Chúng ta đơn giản dùng hàm
strip()để lược bỏ phần nhắc lệnh dựa trên các từ khóa hướng dẫn.2. Xử lý đầu vào
Tiếp theo, hãy xử lý đầu vào có thể là văn bản, hình ảnh hoặc âm thanh, tùy theo đầu vào hay kịch bản của người dùng.
Hàm trên chịu trách nhiệm xử lý đầu vào văn bản, hình ảnh và âm thanh, đồng thời tạo phản hồi bằng mô hình Phi-4-multimodal. Dưới đây là phân tích kỹ thuật của quy trình này:
"Image", prompt được định dạng với một chỗ dành sẵn cho hình ảnh (<|image_1|>). Hình ảnh sau đó được nạp, và processor sẽ token hóa văn bản đi kèm đồng thời trích xuất đặc trưng thị giác. Các đầu vào đã xử lý được chuyển lên GPU để tính toán tối ưu."Audio", prompt được cấu trúc với chỗ dành sẵn cho âm thanh (<|audio_1|>). Tệp âm thanh được đọc bằng hàmsf.read(), trích xuất dạng sóng thô và tần số mẫu. Processor sau đó mã hóa cả âm thanh và văn bản, đảm bảo tích hợp liền mạch cho khả năng hiểu đa phương thức."Text", văn bản được nhúng trực tiếp vào prompt. Processor token hóa và mã hóa đầu vào, chuẩn bị cho bước xử lý tiếp theo của mô hình.3. Dịch và sửa ngữ pháp
Tiếp theo, chúng ta xử lý văn bản để dịch và sửa ngữ pháp bằng mô hình Phi-4-multimodal.
Hàm
process_text_translate()xây dựng động một prompt dịch bằng cách chỉ định ngôn ngữ đích, sau đó truyền văn bản đầu vào và prompt đã cấu trúc tới hàmprocess_input(), trả về bản dịch.Tương tự, hàm
process_text_grammar()tạo prompt kiểm tra ngữ pháp, gọi hàmprocess_input()với văn bản và kiểu đầu vào, và trả về phiên bản văn bản đã được chỉnh ngữ pháp. Cả hai hàm đều tận dụng khả năng của mô hình cho tác vụ dịch và sửa ngữ pháp để tinh gọn quá trình xử lý ngôn ngữ.Bước 4: Xây dựng bản demo đa phương thức với Gradio
Giờ chúng ta đã có các hàm logic chính. Tiếp theo, hãy xây dựng giao diện tương tác với Gradio.
Đoạn mã trên tổ chức giao diện Gradio thành ba tab tương tác, gồm học dựa trên văn bản, học dựa trên hình ảnh và học dựa trên âm thanh, mỗi tab được thiết kế cho các chức năng học ngôn ngữ khác nhau.
Người dùng có thể nhập văn bản để dịch hoặc kiểm tra ngữ pháp, tải hình ảnh để trích xuất văn bản và tóm tắt, hoặc cung cấp âm thanh để phiên âm và dịch.
Mỗi chức năng được kích hoạt bằng phương thức
click()của Gradio, gọi các hàm xử lý nhưprocess_text_translate(),process_text_grammar()vàprocess_input()như đã nêu ở trên, bằng cách truyền các đầu vào cần thiết và cập nhật đầu ra động.Clear được bao gồm ở mỗi tab để đặt lại đầu vào và đầu ra, đảm bảo trải nghiệm mượt mà. Cuối cùng, giao diện được khởi chạy bằng
demo.launch(debug=True)giúp nhà phát triển dễ dàng gỡ lỗi mọi lỗi trong ứng dụng.Bước 5: Kiểm thử ứng dụng
Dưới đây là một vài thử nghiệm của tôi với ứng dụng này.
Dịch và kiểm tra ngữ pháp
Đối với tác vụ dịch và kiểm tra ngữ pháp, tôi cung cấp văn bản "Hello world" và yêu cầu mô hình dịch sang tiếng Pháp và xác minh ngữ pháp (lưu ý các nút khác nhau cho dịch và kiểm tra ngữ pháp).
Dịch văn bản trong hình ảnh
Trong ví dụ này, tôi cung cấp một hình ảnh biển báo dừng bằng tiếng Tây Ban Nha yêu cầu người đi bộ không đi vào lối nhất định. Mô hình đã diễn giải chính xác ý nghĩa của biển báo và tạo phản hồi: "Không đi bộ trên đường ray."
Phiên âm và dịch âm thanh
Đối với phiên âm âm thanh, tôi cung cấp một tệp âm thanh tiếng Anh và yêu cầu mô hình phiên âm lời nói rồi dịch bản phiên âm sang tiếng Pháp.
Kết luận
Trong hướng dẫn này, chúng ta đã xây dựng một gia sư ngôn ngữ đa phương thức sử dụng mô hình Phi-4 multimodal, cho phép học ngôn ngữ dựa trên văn bản, hình ảnh và âm thanh. Chúng ta đã khai thác các khả năng thị giác, giọng nói và văn bản tiên tiến của Phi-4 để cung cấp dịch theo thời gian thực, sửa ngữ pháp, phiên âm giọng nói và hiểu biết dựa trên hình ảnh. Dự án này cho thấy AI đa phương thức có thể nâng cao giáo dục ngôn ngữ và khả năng tiếp cận như thế nào.