AI Engineer Roadmap: Bắt Đầu Với Các Mô Hình Hugging Face

Chào mừng trở lại với series “AI Engineer Roadmap”! Trên hành trình trở thành một Kỹ sư AI hiệu quả và hiện đại (tìm hiểu thêm Kỹ sư AI là gì), việc nắm vững cách tận dụng các công cụ và tài nguyên sẵn có là cực kỳ quan trọng.

Trong các bài viết trước, chúng ta đã cùng nhau khám phá lý do tại sao việc bắt đầu với các mô hình AI được huấn luyện trước (pre-trained models) lại là một chiến lược thông minh, đặc biệt với những người mới và cả các kỹ sư giàu kinh nghiệm muốn tăng tốc độ phát triển. Chúng ta cũng đã thảo luận về những hạn chế cần lưu ý khi sử dụng chúng. Hôm nay, chúng ta sẽ đi sâu vào một trong những nền tảng quan trọng nhất cho việc sử dụng các mô hình tiền huấn luyện: Hugging Face.

Hugging Face đã trở thành “ngôi nhà” của rất nhiều mô hình AI tiên tiến, đặc biệt trong lĩnh vực Xử lý Ngôn ngữ Tự nhiên (NLP), nhưng giờ đây đã mở rộng sang Thị giác Máy tính (Computer Vision), Âm thanh (Audio) và nhiều lĩnh vực khác. Đối với một Kỹ sư AI, việc làm quen và thành thạo việc sử dụng các tài nguyên từ Hugging Face là một kỹ năng gần như bắt buộc. Bài viết này sẽ là điểm khởi đầu giúp bạn làm quen với thế giới Hugging Face và cách tích hợp các mô hình của họ vào các ứng dụng của mình.

Hugging Face Là Gì và Tại Sao Nó Quan Trọng?

Hugging Face ban đầu là một công ty khởi nghiệp tập trung vào việc xây dựng chatbot. Tuy nhiên, họ nhanh chóng nhận ra giá trị của việc chia sẻ và làm cho các mô hình AI trở nên dễ tiếp cận hơn. Ngày nay, Hugging Face được biết đến nhiều nhất với:

  • Hugging Face Hub: Một nền tảng tập trung (hub) lưu trữ hàng trăm nghìn mô hình AI, bộ dữ liệu (datasets) và không gian (spaces – nơi chạy demo). Nó giống như GitHub cho AI, nơi mọi người có thể chia sẻ, khám phá và cộng tác trên các tài nguyên AI.
  • Thư viện Transformers: Thư viện mã nguồn mở phổ biến nhất để làm việc với các kiến trúc Transformer tiên tiến như BERT, GPT-2, T5, ViT, v.v. Thư viện này cung cấp các API đơn giản để tải, sử dụng và tinh chỉnh (fine-tune) các mô hình.
  • Các thư viện khác: Ngoài Transformers, Hugging Face còn phát triển và duy trì các thư viện hữu ích khác như datasets (để tải và xử lý bộ dữ liệu), tokenizers (để xử lý văn bản), accelerate (để tăng tốc độ huấn luyện trên nhiều thiết bị), v.v.

Sự ra đời và phát triển của Hugging Face đã đóng góp lớn vào việc “dân chủ hóa AI” – làm cho các công nghệ AI mạnh mẽ trở nên dễ tiếp cận hơn cho mọi người, từ nhà nghiên cứu, kỹ sư đến những người đam mê. Đối với Kỹ sư AI, điều này có nghĩa là bạn không cần phải “phát minh lại bánh xe” mỗi lần muốn triển khai một tính năng AI. Bạn có thể tận dụng sức mạnh của các mô hình đã được huấn luyện trên lượng dữ liệu khổng lồ và chỉ cần tinh chỉnh hoặc sử dụng trực tiếp cho tác vụ cụ thể của mình.

Các Thành Phần Cốt Lõi Của Hệ Sinh Thái Hugging Face

Để bắt đầu làm việc với Hugging Face, bạn cần làm quen với một số thành phần chính:

  1. Hugging Face Hub: Đây là trái tim của hệ sinh thái. Bạn có thể truy cập nó qua trang web huggingface.co. Tại đây, bạn sẽ tìm thấy:
    • Models: Hàng ngàn mô hình cho đủ loại tác vụ và ngôn ngữ. Mỗi mô hình có một trang riêng hiển thị thông tin, giấy phép, hướng dẫn sử dụng và thậm chí là demo trực tiếp.
    • Datasets: Các bộ dữ liệu công khai để huấn luyện hoặc đánh giá mô hình.
    • Spaces: Các ứng dụng demo (thường sử dụng Gradio hoặc Streamlit) cho phép bạn thử nghiệm các mô hình trực tiếp trên trình duyệt.
    • Docs: Tài liệu hướng dẫn chi tiết cho tất cả các thư viện.
  2. Thư viện transformers: Đây là thư viện Python chính để làm việc với các mô hình. Nó cung cấp các lớp (classes) và hàm (functions) để tải mô hình, tokenizer và thực hiện inference (dự đoán) hoặc huấn luyện.
  3. Thư viện tokenizers: Khi làm việc với văn bản, bạn cần chuyển đổi văn bản thành các định dạng số mà mô hình có thể hiểu được (tokens). Thư viện tokenizers cung cấp các công cụ hiệu quả và linh hoạt để thực hiện việc này, thường đi kèm với mô hình văn bản tương ứng.
  4. Thư viện datasets: Giúp bạn tải, xử lý và quản lý các bộ dữ liệu lớn một cách hiệu quả. Rất hữu ích khi bạn cần tinh chỉnh mô hình.

Đối với người mới bắt đầu, trọng tâm chính sẽ là khám phá Hub và sử dụng thư viện transformers.

Bước Đầu Tiên: Cài Đặt và Sử Dụng Pipeline API

Cách đơn giản nhất để bắt đầu sử dụng các mô hình từ Hugging Face là thông qua API pipeline trong thư viện transformers. pipeline là một lớp trừu tượng (abstraction) gói gọn toàn bộ quy trình từ tiền xử lý dữ liệu đầu vào, tải mô hình và tokenizer, đến hậu xử lý kết quả đầu ra cho một tác vụ cụ thể. Điều này giúp bạn nhanh chóng sử dụng các mô hình mà không cần hiểu quá sâu về cách chúng hoạt động bên trong.

1. Cài Đặt Thư Viện

Bạn chỉ cần cài đặt thư viện transformers bằng pip:


pip install transformers

Tùy thuộc vào tác vụ và mô hình bạn muốn sử dụng, bạn có thể cần cài đặt thêm các thư viện khác như PyTorch hoặc TensorFlow, và các dependency liên quan (ví dụ: scipy, soundfile cho audio, Pillow cho vision). Hugging Face khuyến khích cài đặt PyTorch hoặc TensorFlow cùng với transformers:


# Cài đặt PyTorch (ví dụ: với CUDA 11.8)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# Hoặc Cài đặt TensorFlow
pip install tensorflow

Để đơn giản cho việc “getting started”, bạn có thể cài đặt bản đầy đủ:


pip install transformers[torch] # nếu dùng PyTorch
pip install transformers[tensorflow] # nếu dùng TensorFlow
pip install transformers[sentencepiece] # nếu dùng các mô hình yêu cầu SentencePiece
pip install transformers[accelerate] # nếu muốn dùng accelerate

2. Sử Dụng Pipeline

Sau khi cài đặt, bạn có thể sử dụng pipeline rất dễ dàng. Hãy thử với tác vụ phân tích cảm xúc (sentiment analysis):


from transformers import pipeline

# Tải pipeline cho tác vụ phân tích cảm xúc
# Lần đầu chạy sẽ tải mô hình và tokenizer về máy
classifier = pipeline("sentiment-analysis")

# Thực hiện dự đoán
text = "Tôi rất thích bài viết này! Nó thật hữu ích."
result = classifier(text)

print(result)

Kết quả sẽ là một danh sách (list) chứa dictionary thông tin về dự đoán:


[{'label': 'POSITIVE', 'score': 0.99...}]

Thật đơn giản phải không? Chỉ với vài dòng code, bạn đã có thể sử dụng một mô hình AI mạnh mẽ. Bạn có thể thử với nhiều đoạn văn bản cùng lúc:


results = classifier(["Hôm nay trời đẹp quá.", "Tôi không thích món ăn này lắm.", "Đây là một bài viết bình thường."])
print(results)

Bạn cũng có thể chỉ định mô hình cụ thể muốn sử dụng bằng cách truyền tên mô hình vào đối số model của pipeline. Ví dụ, sử dụng một mô hình hỗ trợ tiếng Việt (nếu có trên Hub cho tác vụ này):


# Tìm một mô hình phân tích cảm xúc tiếng Việt trên Hub
# Ví dụ: 'ntt-data/vibert-base-cased-sentiment' (Đây là ví dụ, bạn cần kiểm tra tên chính xác trên Hub)
vietnamese_classifier = pipeline("sentiment-analysis", model="ntt-data/vibert-base-cased-sentiment") # Cần kiểm tra tên mô hình thực tế

text_vn = "Bài viết này thật tuyệt vời!"
result_vn = vietnamese_classifier(text_vn)
print(result_vn)

Việc sử dụng pipeline giúp bạn nhanh chóng thử nghiệm và triển khai các tính năng AI cho nhiều tác vụ khác nhau. Dưới đây là một số tác vụ phổ biến mà pipeline hỗ trợ:

Nhiệm Vụ (Task) Pipeline (in transformers) Loại Mô Hình Ví Dụ Mô Tả Ngắn
Phân tích cảm xúc (Sentiment Analysis) "sentiment-analysis" BERT, RoBERTa, ViBERT Xác định cảm xúc (tích cực, tiêu cực, trung tính) của văn bản.
Dịch máy (Translation) "translation_xx_to_yy" (ví dụ: "translation_en_to_vi") T5, MarianMT, NLLB Dịch văn bản từ ngôn ngữ này sang ngôn ngữ khác.
Sinh văn bản (Text Generation) "text-generation" GPT-2, GPT-Neo, LLaMA Tạo văn bản mới dựa trên một đoạn mồi (prompt).
Tóm tắt văn bản (Summarization) "summarization" BART, T5, Pegasus Tạo bản tóm tắt ngắn gọn từ văn bản dài.
Trả lời câu hỏi (Question Answering) "question-answering" BERT, RoBERTa, XLM-RoBERTa Tìm câu trả lời cho một câu hỏi dựa trên một đoạn văn bản ngữ cảnh.
Nhận dạng thực thể có tên (Named Entity Recognition – NER) "ner" BERT, RoBERTa, XLM-RoBERTa Xác định và phân loại các thực thể (người, địa điểm, tổ chức) trong văn bản.
Phân loại ảnh (Image Classification) "image-classification" ViT, ResNet (từ TIMM) Phân loại nội dung của ảnh.
Nhận dạng vật thể (Object Detection) "object-detection" DETR, YOLO-like Xác định vị trí và loại của các vật thể trong ảnh.
Nhận dạng giọng nói tự động (Automatic Speech Recognition – ASR) "automatic-speech-recognition" Wav2Vec2, Whisper Chuyển đổi âm thanh thành văn bản.

Bạn có thể khám phá danh sách đầy đủ các tác vụ và cách sử dụng chúng trong tài liệu của Hugging Face.

Tiến Xa Hơn: Tải Mô Hình và Tokenizer Trực Tiếp

Mặc dù pipeline rất tiện lợi, đôi khi bạn sẽ cần quyền kiểm soát chi tiết hơn, ví dụ như khi bạn muốn xử lý dữ liệu đầu vào/đầu ra theo cách riêng, hoặc khi bạn muốn thực hiện tinh chỉnh (fine-tuning) mô hình. Lúc này, bạn sẽ cần tải mô hình và tokenizer một cách riêng biệt.

Hugging Face cung cấp các lớp AutoModelAutoTokenizer. Đây là các lớp tự động phát hiện loại mô hình/tokenizer dựa trên tên bạn cung cấp và tải lớp phù hợp. Điều này rất tiện lợi vì bạn không cần phải biết chính xác loại mô hình (ví dụ: BertModel, RobertaModel) mà chỉ cần biết tên mô hình trên Hub.


from transformers import AutoModelForSequenceClassification, AutoTokenizer
import torch

# Tên mô hình (ví dụ: mô hình phân tích cảm xúc)
model_name = "distilbert-base-uncased-finetuned-sst-2-english" # Tên mô hình mặc định của sentiment pipeline

# Tải tokenizer
# Trust_remote_code=True có thể cần thiết cho một số mô hình mới
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)

# Tải mô hình
# AutoModelForSequenceClassification là lớp phù hợp cho tác vụ phân loại văn bản
model = AutoModelForSequenceClassification.from_pretrained(model_name, trust_remote_code=True)

# Chuẩn bị dữ liệu đầu vào
text = "Hugging Face is amazing!"

# Token hóa văn bản
# return_tensors="pt" trả về PyTorch tensors
inputs = tokenizer(text, return_tensors="pt")

# Thực hiện inference
# Chuyển mô hình sang chế độ đánh giá (evaluation mode)
model.eval()
with torch.no_grad(): # Vô hiệu hóa tính toán gradient để tiết kiệm bộ nhớ và tăng tốc
    outputs = model(**inputs)

# Lấy kết quả logit (output thô của mô hình)
logits = outputs.logits

# Chuyển đổi logit thành xác suất (dùng softmax)
probabilities = torch.softmax(logits, dim=1)

# Lấy nhãn dự đoán
predicted_class_id = probabilities.argmax().item()
predicted_label = model.config.id2label[predicted_class_id]

print(f"Logits: {logits}")
print(f"Probabilities: {probabilities}")
print(f"Predicted label: {predicted_label}")

Đoạn code trên cho thấy các bước chi tiết hơn:

  1. Tải tokenizer và mô hình sử dụng AutoTokenizer.from_pretrained()AutoModelForSequenceClassification.from_pretrained().
  2. Sử dụng tokenizer để chuyển văn bản thành tensors (ở đây là PyTorch tensors). Kết quả bao gồm input_idsattention_mask.
  3. Đưa inputs vào mô hình để nhận outputs (thường là logits).
  4. Xử lý outputs (ví dụ: dùng softmax để có xác suất, sau đó tìm lớp có xác suất cao nhất).

Việc nắm vững cách tải và sử dụng mô hình/tokenizer trực tiếp là nền tảng cho các tác vụ phức tạp hơn như xử lý theo batch, tích hợp vào các workflow lớn hơn hoặc chuẩn bị cho việc tinh chỉnh mô hình.

Khám Phá Hugging Face Hub

Hugging Face Hub là một kho báu. Dưới đây là một vài lời khuyên để khám phá nó hiệu quả:

  • Tìm kiếm theo Tác vụ: Trên trang Models, bạn có thể lọc theo các tác vụ (ví dụ: text-classification, translation, image-segmentation).
  • Tìm kiếm theo Ngôn ngữ: Đặc biệt hữu ích nếu bạn làm việc với các ngôn ngữ ngoài tiếng Anh. Hãy tìm các mô hình “multilingual” hoặc các mô hình được huấn luyện riêng cho tiếng Việt (ví dụ: các mô hình phoBERT, ViBERT, XLM-R finetuned trên dữ liệu tiếng Việt).
  • Tìm kiếm theo Thư viện: Lọc theo thư viện transformers, diffusers (cho sinh ảnh), v.v.
  • Đọc Model Card: Mỗi mô hình trên Hub có một trang mô tả chi tiết (Model Card). Hãy đọc kỹ phần này để hiểu về mô hình (kiến trúc, dữ liệu huấn luyện, cách sử dụng, giấy phép, hạn chế). Điều này rất quan trọng để bạn sử dụng mô hình một cách có trách nhiệm (như chúng ta đã thảo luận về hạn chế của mô hình tiền huấn luyện).
  • Xem demo trong Spaces: Nhiều mô hình có demo trực tiếp trong phần Spaces, giúp bạn nhanh chóng thử nghiệm chức năng mà không cần viết code.

Tiếp Theo Là Gì?

Bài viết này đã cung cấp cho bạn những kiến thức cơ bản nhất để bắt đầu sử dụng các mô hình từ Hugging Face. Bạn đã biết cách cài đặt, sử dụng API pipeline để nhanh chóng thực hiện các tác vụ AI phổ biến và cách tải mô hình/tokenizer trực tiếp để có quyền kiểm soát cao hơn.

Hành trình với Hugging Face không dừng lại ở đây. Các bước tiếp theo trong “AI Engineer Roadmap” liên quan đến Hugging Face có thể bao gồm:

  • Tinh chỉnh (Fine-tuning): Huấn luyện tiếp một mô hình tiền huấn luyện trên bộ dữ liệu riêng của bạn để nó hoạt động tốt hơn cho tác vụ và dữ liệu cụ thể của bạn.
  • Sử dụng thư viện datasets: Học cách tải, xử lý và chuẩn bị dữ liệu hiệu quả cho việc huấn luyện/tinh chỉnh.
  • Sử dụng thư viện accelerate: Tìm hiểu cách tận dụng nhiều GPU hoặc máy chủ để tăng tốc độ huấn luyện và inference.
  • Triển khai mô hình: Đóng gói và đưa mô hình AI vào môi trường sản phẩm (sử dụng các công cụ như Gradio, Streamlit, Docker, Kubernetes, hoặc các dịch vụ cloud).
  • Khám phá các lĩnh vực khác: Áp dụng Hugging Face cho Thị giác Máy tính, Âm thanh, v.v.

Là một Kỹ sư AI, việc thành thạo Hugging Face sẽ mở ra cánh cửa đến thế giới rộng lớn của các mô hình AI tiên tiến, giúp bạn xây dựng các ứng dụng thông minh hiệu quả và nhanh chóng hơn rất nhiều. Hãy bắt đầu thực hành ngay với các ví dụ code trong bài viết này và khám phá Hugging Face Hub!

Trong bài viết tiếp theo của series AI Engineer Roadmap, chúng ta sẽ đi sâu vào một khía cạnh quan trọng khác của việc sử dụng mô hình AI: Kỹ thuật Prompt Engineering. Hẹn gặp lại!

Chỉ mục