- UCI Machine Learning Repository: trang chủ ghi đang duy trì 690 bộ dữ liệu (11/11/2026); hợp để học thuật toán cổ điển trên bảng nhỏ, có gói Python
ucimlrepođể tải. - Kaggle: dữ liệu đi kèm notebook của cộng đồng và các cuộc thi; hợp để học cách người khác xử lý cùng một bộ dữ liệu.
- Hugging Face Datasets: tài liệu Hub ghi hơn 1 triệu bộ dữ liệu công khai thuộc hơn 8 nghìn ngôn ngữ; mạnh về văn bản, ảnh, âm thanh, có thẻ dữ liệu ghi giấy phép.
- Trước khi huấn luyện: đọc giấy phép, rồi soát ô trống, dòng trùng, phân bố nhãn.
Thông tin trong bài lấy từ trang UCI, trang Datasets của Kaggle và tài liệu Hugging Face Hub, đọc ngày 11/11/2026.
Chọn bộ dữ liệu thế nào
Bộ dữ liệu đầu tiên nên:
- Vừa sức: vài nghìn tới vài chục nghìn dòng, mở được trên máy cá nhân.
- Có mô tả rõ: mỗi cột nghĩa là gì, nhãn lấy từ đâu, thu thập năm nào.
- Có giấy phép rõ: biết mình được dùng cho học tập, cho đồ án, hay cho sản phẩm.
- Gần với điều bạn quan tâm: dữ liệu về thứ bạn hiểu giúp bạn phát hiện lỗi mà mô hình mắc.
Bộ dữ liệu kinh điển (như Iris) tốt để học thuật toán; bộ dữ liệu "bẩn" ngoài đời tốt để học xử lý dữ liệu, phần chiếm nhiều thời gian nhất trong dự án thật.
UCI Machine Learning Repository
Kho dữ liệu của Đại học California, Irvine. Trang chủ ghi đang duy trì 690 bộ dữ liệu phục vụ cộng đồng học máy. Phần lớn là dữ liệu dạng bảng, kích thước nhỏ, được dùng trong rất nhiều giáo trình và bài báo.
Ví dụ trang bộ Iris (mã 53) ghi: đóng góp ngày 30/06/1988, 150 mẫu, 4 đặc trưng số thực, lĩnh vực sinh học, giấy phép CC BY 4.0, và hướng dẫn tải bằng Python:
# pip install ucimlrepo
from ucimlrepo import fetch_ucirepo
iris = fetch_ucirepo(id=53)
Hợp với ai: người đang học các thuật toán học máy cổ điển (hồi quy, cây quyết định, k-NN) và muốn kết quả so được với giáo trình.
Kaggle
Trang Datasets của Kaggle (tiêu đề "Find Open Datasets for AI and Research") là nơi người dùng đăng dữ liệu, kèm notebook phân tích và thảo luận của cộng đồng. Kaggle còn có các cuộc thi với dữ liệu, bảng xếp hạng và lời giải được chia sẻ sau khi thi, và phần Learn với các khóa ngắn.
Hợp với ai: người muốn học từ cách người khác làm. Với mỗi bộ dữ liệu, đọc vài notebook được đánh giá cao để xem họ làm sạch dữ liệu, chọn mô hình và đánh giá ra sao; sau đó tự làm lại theo cách của mình.
Lưu ý: mỗi bộ dữ liệu trên Kaggle do người đăng tự ghi giấy phép và nguồn gốc. Đọc kỹ, vì có bộ được thu thập lại từ nơi khác mà không rõ quyền sử dụng.
Hugging Face Datasets
Theo tài liệu Hub (11/11/2026), Hugging Face có hơn 1 triệu bộ dữ liệu công khai thuộc hơn 8 nghìn ngôn ngữ, cho xử lý ngôn ngữ, thị giác máy tính và âm thanh. Mỗi bộ có thẻ dữ liệu (dataset card) là tệp README.md của kho; phần siêu dữ liệu YAML ở đầu ghi giấy phép, ngôn ngữ, kích thước, loại tác vụ. Tài liệu khuyên thẻ dữ liệu nêu cả các thiên lệch có thể có của dữ liệu. Thư viện datasets tải được dữ liệu bằng một dòng, và đọc theo luồng (streaming) khi bộ dữ liệu quá lớn so với máy.
Hợp với ai: người làm xử lý ngôn ngữ, kể cả tiếng Việt (lọc theo ngôn ngữ Vietnamese), và người làm mô hình học sâu. Xem thêm Hugging Face là gì.
Google Dataset Search là công cụ tìm kiếm bộ dữ liệu trên nhiều trang web, hữu ích khi cần dữ liệu về một chủ đề cụ thể như khí hậu hay y tế công cộng.
Soát dữ liệu trước khi luyện
Rất nhiều kết quả "tốt bất ngờ" đến từ lỗi dữ liệu: dòng trùng nằm ở cả tập huấn luyện lẫn tập kiểm tra, hay nhãn quá lệch khiến mô hình đoán toàn một lớp vẫn đạt độ chính xác cao. Đoạn Python dưới đây, chỉ dùng thư viện có sẵn, soát một tệp CSV: số dòng, số cột, số ô trống mỗi cột, số dòng trùng, phân bố nhãn, rồi đưa cảnh báo khi một cột trống quá 20%, có dòng trùng, hoặc lớp nhiều nhất gấp từ 3 lần lớp ít nhất.
"""Soát nhanh một bộ dữ liệu dạng bảng (CSV) trước khi luyện mô hình, chỉ dùng thư viện có sẵn của Python.
Báo: số dòng, số cột, ô trống theo cột, dòng trùng lặp, phân bố nhãn và cảnh báo khi lớp mất cân bằng.
Chạy: python soat_du_lieu.py du_lieu.csv ten_cot_nhan
Chạy không tham số: soát một bảng mẫu nhỏ có sẵn (số liệu giả định).
"""
import csv
import io
import sys
from collections import Counter
def soat(van_ban, cot_nhan):
dong = list(csv.DictReader(io.StringIO(van_ban)))
cot = list(dong[0].keys()) if dong else []
trong = {c: sum(1 for d in dong if not (d[c] or "").strip()) for c in cot}
khoa = [tuple(d[c] for c in cot) for d in dong]
trung = len(khoa) - len(set(khoa))
nhan = Counter(d[cot_nhan] for d in dong if (d[cot_nhan] or "").strip())
return dict(so_dong=len(dong), cot=cot, trong=trong, trung=trung, nhan=nhan)
def canh_bao(kq, nguong_trong=0.2, ti_le_lech=3):
cb = []
for c, n in kq["trong"].items():
if kq["so_dong"] and n / kq["so_dong"] > nguong_trong:
cb.append(f"cột '{c}' trống {n}/{kq['so_dong']} ô")
if kq["trung"]:
cb.append(f"{kq['trung']} dòng trùng lặp: bỏ trước khi chia tập huấn luyện và kiểm tra")
if kq["nhan"]:
nhieu, it = max(kq["nhan"].values()), min(kq["nhan"].values())
if nhieu / it >= ti_le_lech:
cb.append(f"nhãn lệch {nhieu}:{it}: độ chính xác dễ đánh lừa, xem thêm precision, recall")
return cb
MAU = """van_ban,diem_sao,nhan
Giao hàng nhanh,5,tich_cuc
Sản phẩm tốt,5,tich_cuc
Giao hàng nhanh,5,tich_cuc
Đóng gói cẩn thận,,tich_cuc
Hàng đúng mô tả,4,tich_cuc
Rất hài lòng,5,tich_cuc
Sẽ mua lại,,tich_cuc
Ổn,,tich_cuc
Hàng lỗi,1,tieu_cuc
Giao chậm,2,tieu_cuc
"""
def chay_thu():
kq = soat(MAU, "nhan")
dong = [f"{kq['so_dong']} dòng, {len(kq['cot'])} cột: {', '.join(kq['cot'])}",
"Ô trống: " + ", ".join(f"{c} {n}" for c, n in kq["trong"].items()),
"Nhãn: " + ", ".join(f"{k} {v}" for k, v in kq["nhan"].most_common())]
dong += ["CẢNH BÁO: " + c for c in canh_bao(kq)]
print("\n".join(dong))
return dong
if __name__ == "__main__":
if len(sys.argv) > 2:
with open(sys.argv[1], encoding="utf-8") as f:
kq = soat(f.read(), sys.argv[2])
print(kq["so_dong"], "dòng;", "\n".join(canh_bao(kq)) or "không có cảnh báo")
else:
chay_thu()
Với bảng mẫu 10 bình luận giả định, đoạn code báo ba điều: cột điểm sao trống 3/10 ô; có 1 dòng trùng lặp ("Giao hàng nhanh" xuất hiện hai lần); nhãn lệch 8:2. Với nhãn lệch như vậy, một mô hình chỉ luôn đoán "tích cực" đã đạt 80% độ chính xác mà không học được gì, nên phải xem thêm precision và recall của lớp ít.
Chạy python soat_du_lieu.py du_lieu.csv ten_cot_nhan với tệp của bạn. Muốn soát sâu hơn (kiểu dữ liệu, giá trị bất thường), chuyển sang pandas như trong bài Python cho AI.
Chia tập dữ liệu cho đúng
Sau khi soát và làm sạch, bộ dữ liệu được chia thành ba phần. Tập huấn luyện để mô hình học. Tập kiểm định (validation) để bạn chọn mô hình và chỉnh siêu tham số. Tập kiểm tra (test) để đo kết quả cuối cùng, và chỉ được dùng một lần ở cuối; nếu bạn nhìn điểm trên tập kiểm tra rồi quay lại sửa mô hình nhiều lần, con số đó không còn phản ánh dữ liệu mới nữa.
Hai lỗi chia tập hay gặp. Thứ nhất, bỏ dòng trùng sau khi chia, khiến cùng một mẫu nằm ở cả hai phía. Thứ hai, chia ngẫu nhiên khi dữ liệu có thứ tự thời gian: mô hình dự báo được "nhìn trước tương lai" và cho kết quả đẹp giả. Với dữ liệu theo thời gian, lấy phần cũ để huấn luyện và phần mới để kiểm tra. Khi nhãn lệch, dùng cách chia giữ tỉ lệ các lớp ở mỗi phần.
Ba bài tập theo mức độ
Một cách dùng ba nguồn dữ liệu trên để luyện theo mức tăng dần. Đầu tiên, lấy một bộ bảng nhỏ trên UCI, huấn luyện hai mô hình đơn giản và so sánh chúng trên cùng tập kiểm tra. Tiếp theo, chọn một bộ trên Kaggle có nhiều notebook, tự làm trước rồi mới đọc notebook của người khác, ghi lại ba điều bạn học được từ họ. Cuối cùng, chọn một bộ văn bản tiếng Việt trên Hugging Face, đọc kỹ thẻ dữ liệu, rồi làm một bộ phân loại nhỏ và viết lại phần phân tích lỗi: mô hình sai ở loại câu nào, vì sao.
Giấy phép dữ liệu
Dữ liệu cũng có bản quyền và điều kiện sử dụng như code. Vài giấy phép hay gặp:
- CC BY 4.0 (như bộ Iris trên UCI): được dùng, kể cả thương mại, miễn ghi nguồn.
- CC BY-NC: không được dùng cho mục đích thương mại.
- Giấy phép riêng của người đăng: đọc toàn văn.
Với đồ án ở trường, ghi rõ nguồn dữ liệu trong README và báo cáo. Với dự án có thể thành sản phẩm, chỉ dùng dữ liệu có giấy phép cho phép dùng thương mại. Xem thêm cách đọc giấy phép trong bài đọc README và LICENSE.
- Chọn bộ dữ liệu khổng lồ cho dự án đầu tiên, máy không mở nổi.
- Chia tập huấn luyện và kiểm tra trước khi bỏ dòng trùng, làm điểm kiểm tra cao giả.
- Khoe độ chính xác cao trên dữ liệu nhãn lệch mà không xem lớp ít.
- Dùng dữ liệu Kaggle cho sản phẩm khi người đăng không ghi rõ giấy phép.
- Dùng dữ liệu có thông tin cá nhân mà không nghĩ tới quyền riêng tư.
Câu hỏi thường gặp
Có cần tài khoản để tải dữ liệu không?
Tùy nơi. UCI và phần lớn bộ dữ liệu công khai trên Hugging Face tải được không cần đăng nhập. Một số bộ trên Hugging Face bị khóa, cần đăng nhập và đồng ý điều kiện, giống mô hình bị khóa. Với Kaggle, đọc yêu cầu trên trang bộ dữ liệu.
Có bộ dữ liệu tiếng Việt không?
Có. Trên Hugging Face lọc theo ngôn ngữ Vietnamese; đọc thẻ dữ liệu để biết nguồn gốc và giấy phép trước khi dùng.
Dùng bộ dữ liệu kinh điển có bị coi là thiếu sáng tạo trong portfolio không?
Dùng để học thì tốt. Trong portfolio, nên có ít nhất một dự án dùng dữ liệu bạn tự thu thập hoặc ít người làm, kèm phần phân tích dữ liệu kỹ.
Tự thu thập dữ liệu từ web có được không?
Phải xem điều khoản của trang web, luật về dữ liệu cá nhân và bản quyền. Với đồ án, ưu tiên dữ liệu đã có giấy phép rõ.
Học tiếp
- Toàn cảnh tài liệu học AI theo bậc: tài liệu học AI miễn phí.
- Tải dữ liệu và mô hình từ Hugging Face: Hugging Face là gì.
- Làm sạch và phân tích dữ liệu bằng pandas: Python cho AI.
Nếu bạn muốn học Python và AI bài bản cùng giảng viên, tham khảo khóa học AI của Big-O Coding.
Khóa AI – Introduction to Machine Learning: nền tảng Máy học từ thuật toán cơ bản đến Neural Networks và LLM, học bằng Python. Học thử buổi 1 miễn phí.


