5.8 Bản đồ model, tháng 8/2026
Mục này hết hạn nhanh nhất trong cả cẩm nang. Mọi con số dưới đây được đọc từ trang chính thức của nhà cung cấp vào tháng 8/2026 và có link để bạn kiểm lại. Trước khi ra quyết định, mở link. Cái không hết hạn là cách đọc bảng, ở cuối mục.
API thương mại
Phần tiêu đề “API thương mại”| Nhà cung cấp | Model | Ngữ cảnh | Giá (nguyên văn từ trang chính thức) |
|---|---|---|---|
| Cohere | rerank-v4.0-pro | 32k | $2,50 / 1K searches |
| Cohere | rerank-v4.0-fast | 32k | $2,00 / 1K searches |
| Cohere | rerank-v3.5 | 4k | Không còn trong bảng giá API; chỉ còn ở Model Vault ($5,00/giờ) |
| Voyage AI (MongoDB) | rerank-2.5 | 32k tổng, tối đa 1.000 doc/lượt | $0,05 / 1M token, 200M token đầu miễn phí |
| Voyage AI | rerank-2.5-lite | 32k | $0,02 / 1M token |
semantic-ranker-default-004 | 1024 token / bản ghi | $1,00 / 1.000 count (1 count = 1 truy vấn ≤ 100 doc) | |
| AWS Bedrock | cohere.rerank-v3-5:0 | chunk ≤ 500 token | $2,00 / 1.000 truy vấn |
| ZeroEntropy | zerank-2 | 32.768 | $0,025 / 1M token |
| Jina AI (nay thuộc Elastic) | jina-reranker-v3.5 | 131.072 | (không lấy được giá chính thức — xem cảnh báo dưới) |
Ba cái bẫy trong bảng này, và chúng quan trọng hơn các con số:
1. “1K searches” và “1M token” không so được trực tiếp. Cohere định nghĩa nguyên văn: một search unit là một truy vấn với tối đa 100 tài liệu; tài liệu nào vượt 500 token (tính cả độ dài truy vấn) sẽ tự động bị chia thành nhiều chunk, và mỗi chunk được tính như một tài liệu riêng. Nghĩa là một truy vấn với 100 đoạn dài có thể tiêu tốn nhiều hơn một search unit rất nhiều. 5.10 quy hết về một đơn vị chung.
2. Tài liệu chính thức của Cohere hiện tự mâu thuẫn. Cùng lúc quảng cáo Rerank 4 có ngữ cảnh 32k và “không cần tiền xử lý”, mà phần FAQ tính tiền vẫn áp quy tắc chia chunk 500 token. Chúng tôi không giải quyết được mâu thuẫn này từ tài liệu công khai — nếu bạn định chạy tài liệu dài trên Cohere, hãy đo hoá đơn thật trên một lô nhỏ trước.
3. Giá Cohere Rerank 4 chỉ nên coi là chưa xác nhận chắc. Trang giá của Cohere
render bằng JavaScript; hai lần kiểm độc lập cho hai kết quả khác nhau — một lần đọc được
inputPrice: 2.5 / 2 từ JSON của trang, một lần không render ra giá nào. Con số được
xác nhận vững nhất trong bảng là $2,00 / 1.000 truy vấn cho Cohere Rerank 3.5 trên AWS
Bedrock, đọc trực tiếp từ trang giá của AWS. Nếu chi phí là yếu tố quyết định, mở trang
giá bằng browser và đo hoá đơn thật.
4. Giá của Jina không có nguồn chính thức. Trang giá của họ render bằng JavaScript và các URL giá cũ trả 404. Có nhiều con số lan truyền trên các trang tính giá của bên thứ ba — đừng tin chúng. Hỏi trực tiếp nếu bạn cần.
Một thay đổi về tổ chức, không phải kỹ thuật, nhưng ảnh hưởng tới lựa chọn hạ tầng: Jina AI hiện thuộc Elastic (thương vụ hoàn tất tháng 10/2025), và từ tháng 2/2026 các reranker của Jina được phục vụ trên Elastic Inference Service.
Open-weight: tải về và tự chạy
Phần tiêu đề “Open-weight: tải về và tự chạy”| Model | HF ID | Tham số | Ngữ cảnh | Giấy phép | Đa ngữ |
|---|---|---|---|---|---|
| Qwen3-Reranker | Qwen/Qwen3-Reranker-0.6B / -4B / -8B | 0,6B / 4B / 8B | 32k | Apache-2.0 | 100+ |
| BGE v2 | BAAI/bge-reranker-v2-m3 | 0,6B | 8192 khai báo, fine-tune ở 1024 | Apache-2.0 | có |
| BGE v2 | BAAI/bge-reranker-v2-gemma | nền gemma-2b | — | — | có |
| Mixedbread | mixedbread-ai/mxbai-rerank-base-v2 / -large-v2 | 0,5B / 1,5B | 8K (tương thích 32K) | Apache-2.0 | 100+, có nhãn vi |
| Jina | jinaai/jina-reranker-v3 / v3.5 | 0,6B (597M) | 131K | CC-BY-NC-4.0 — phi thương mại | 93 (huấn luyện trên 24) |
| ZeroEntropy | zeroentropy/zerank-2 | 4B (nền Qwen3-4B) | 32.768 | nhãn HF là apache-2.0, nhưng tài liệu của họ nói cần giấy phép thương mại — mâu thuẫn, hỏi lại trước khi dùng | nhãn ngôn ngữ chỉ có en |
| Contextual AI | ContextualAI/ctxl-rerank-v2-instruct-multilingual-{1b,2b,6b} | 1B/2B/6B | 32.000 | CC-BY-NC-SA-4.0 — phi thương mại | “100+” |
| Alibaba | Alibaba-NLP/gte-multilingual-reranker-base | — | — | — | có |
Cột giấy phép là cột dễ bị bỏ qua và tốn kém nhất. Ba model chất lượng cao trong bảng
(Jina v3/v3.5, Contextual AI, và có thể zerank-2) không dùng thương mại được theo giấy
phép mặc định. Đọc LICENSE trước khi đưa vào sản phẩm, đừng đọc bảng benchmark trước.
Cột thứ hai dễ bị bỏ qua là kiến trúc, và bảng trên không hiện nó. Một số model trong
bảng là cross-encoder encoder-only, một số là reranker sinh (generative) dựng trên
một decoder LLM — cùng cỡ tham số nhưng chi phí phục vụ khác hẳn. Đọc config.json để biết:
curl -sS https://huggingface.co/<HF-ID>/raw/main/config.json \ | python3 -c 'import sys,json;print(json.load(sys.stdin)["architectures"])'mxbai-rerank-base-v2 trả về ["Qwen2ForCausalLM"] — nó là reranker sinh, không phải
cross-encoder. Điều đó có nghĩa TEI không phục vụ được nó, và trên CPU nó chậm hơn rõ
rệt so với một encoder cùng cỡ. Xem mục kế tiếp.
Về điểm benchmark do chính chủ báo cáo — hữu ích để định hướng, không phải để so trực tiếp (mỗi bên chạy một harness khác nhau):
| Model | BEIR nDCG@10 | Ghi chú |
|---|---|---|
mxbai-rerank-base-v2 | 55,57 | |
mxbai-rerank-large-v2 | 57,49 | |
jina-reranker-v3 | 62,10 | |
jina-reranker-v3.5 | 63,20 | |
Qwen3-Reranker-4B | 62,28 | Nhưng thắng jina-v3.5 trên MIRACL, RTEB và Struct-IR trong bảng của chính Jina |
Dòng cuối đáng nhìn: ngay trong bảng do một nhà cung cấp tự công bố, đối thủ thắng ở ba trong bốn benchmark. Đó là ví dụ tốt nhất cho quy tắc ở 5.12: bảng của nhà cung cấp là để sàng lọc ứng viên, không phải để chọn.
Tiếng Việt: phần quan trọng nhất của mục này
Phần tiêu đề “Tiếng Việt: phần quan trọng nhất của mục này”Model reranker riêng cho tiếng Việt
Phần tiêu đề “Model reranker riêng cho tiếng Việt”| HF ID | Nền | Tham số | Max seq | Giấy phép | Số đo tự báo cáo |
|---|---|---|---|---|---|
AITeamVN/Vietnamese_Reranker | bge-reranker-v2-m3 | 568M | 2304 (256 query + 2048 passage) | Apache-2.0 | Zalo Legal 2021: Acc@1 0,7944, MRR@10 0,8672. Huấn luyện trên ~1,1 triệu triplet tiếng Việt |
itdainb/PhoRanker | PhoBERT (RoBERTa, vocab 64k — không đa ngữ) | 135M | 256 | Apache-2.0 | mMARCO-vi dev: NDCG@10 0,7422, MRR@10 0,6830 |
namdp-ptit/ViRanker | bge-m3 | 568M | 512 | Apache-2.0 | mMARCO-vi dev: NDCG@10 0,7302, MRR@10 0,7107 |
CATI-AI/Qwen3-Reranker-0.6B-vietnamese-legal | Qwen3-Reranker-0.6B | 0,6B | — | — | miền pháp lý |
Số tham số trong bảng đọc từ metadata safetensors trên Hugging Face (tháng 8/2026),
không phải từ model card — vài card ghi làm tròn hoặc để trống. Kiểm lại bằng:
curl -sS https://huggingface.co/api/models/<HF-ID> \ | python3 -c 'import sys,json;print(json.load(sys.stdin)["safetensors"]["total"])'Bốn lưu ý phải đọc cùng bảng:
- Ba con số đầu không cùng một trục.
Vietnamese_Rerankerbáo Acc@k trên Zalo Legal 2021; hai model kia báo NDCG@10 trên mMARCO-vi. Không so trực tiếp được. Muốn biết cái nào tốt hơn cho bạn thì phải tự chạy cả ba trên golden set của bạn. - Cột
max seqlà cột quyết định. PhoRanker cắt ở 256 token — với tiếng Việt tốn token hơn tiếng Anh (5.9), 256 token là rất ngắn. Nếu chunk của bạn dài hơn thế, phần đuôi bị cắt im lặng. - PhoRanker bắt buộc tách từ bằng VnCoreNLP trước khi chấm điểm. Model card ghi rõ:
phải
pip install py_vncorenlprồi chạyrdrsegmenter.word_segment()trên cả truy vấn và đoạn văn, vì nền PhoBERT quen dạngTrường Đại_học Công_nghệ Thông_tin. Hai hệ quả thật: bạn thêm một dependency Java vào đường nóng, và nếu cách tách từ lúc index khác lúc truy vấn thì điểm sai âm thầm — không có lỗi nào được ném ra. Đây là chi phí không hiện trong con số “135M tham số”. - Có một điểm cộng đo được cho model riêng tiếng Việt: bài báo ViRanker báo cáo model
tiếng Việt vượt các baseline đa ngữ (
bge-reranker-v2-m3NDCG@3 0,6087 so với ViRanker 0,6815 trên MMARCO-VI) — khoảng 7 điểm NDCG@3.
Đồng thời, phần trung thực: chính bài báo ViRanker nêu điểm yếu của nó nằm ở truy vấn factoid rất ngắn và tài liệu tự sự dài, nơi ngữ cảnh bị loãng làm giảm độ chính xác. Đó đúng là hai dạng đầu vào phổ biến trong một hệ hỗ trợ khách hàng.
Model đa ngữ tuyên bố gì về tiếng Việt
Phần tiêu đề “Model đa ngữ tuyên bố gì về tiếng Việt”| Model | Tiếng Việt được nêu tên? |
|---|---|
| Cohere Rerank | Có — bảng ngôn ngữ trong tài liệu có dòng vi → Vietnamese |
mxbai-rerank-large-v2 | Có — nhãn ngôn ngữ vi ngay trên model card |
bge-reranker-v2-m3 | Nền XLM-R có tiếng Việt; không có tuyên bố tường minh |
| Jina reranker v3/v3.5 | “93 ngôn ngữ (huấn luyện trên 24)” — không nêu tiếng Việt |
Voyage rerank-2.5 | chỉ ghi “multilingual”, không có danh sách ngôn ngữ |
| Qwen3-Reranker | “100+ ngôn ngữ”, không nêu tiếng Việt |
ZeroEntropy zerank-2 | nhãn ngôn ngữ chỉ en — đừng coi là lựa chọn cho tiếng Việt |
Elastic Rerank .rerank-v1 | Chỉ tiếng Anh ⚠️ |
Dòng cuối là một cái bẫy thật và rất dễ sập: text_similarity_reranker của Elasticsearch
mặc định dùng endpoint .rerank-v1-elasticsearch, tức model .rerank-v1 — 184M tham
số, DeBERTa v3, chỉ tiếng Anh, ngữ cảnh 512 token. Bật reranking theo mặc định trên một
index tiếng Việt nghĩa là bạn đang chạy một model tiếng Anh trên văn bản tiếng Việt, và
nó sẽ chạy — chỉ là kết quả không có nghĩa. Không có lỗi nào được ném ra.
Benchmark tiếng Việt để đo trên
Phần tiêu đề “Benchmark tiếng Việt để đo trên”Nếu bạn cần một tập đo lớn hơn golden set của mình:
- VN-MTEB (7/2025) — 41 tập, 6 nhóm nhiệm vụ bao gồm reranking, dựng bằng dịch có hỗ trợ LLM kèm bảo toàn NER và code.
- “Which Works Best for Vietnamese?” (Findings EACL 2026) — 6 miền (giáo dục, pháp lý, y tế, hỗ trợ khách hàng, đánh giá tiêu dùng, mở), 10 tập, so lexical / neural-sparse / late-interaction / dense / hybrid. Kết luận đáng chú ý: quy mô model là chỉ báo kém cho hiệu quả retrieval. Đây là citation hữu ích nhất hiện có cho IR tiếng Việt.
- mMARCO-vi, Zalo Legal Text Retrieval 2021, ViQuAD — các tập mà những model ở bảng trên tự báo cáo số.
Hạ tầng phục vụ: một ràng buộc dễ vấp
Phần tiêu đề “Hạ tầng phục vụ: một ràng buộc dễ vấp”Nếu bạn tự host, đây là chi tiết làm hỏng kế hoạch của nhiều người:
Text Embeddings Inference (TEI) của HuggingFace hỗ trợ embedding rất rộng, nhưng về
reranker thì tài liệu ghi nguyên văn: hiện hỗ trợ các model CamemBERT và
XLM-RoBERTa Sequence Classification với vị trí tuyệt đối. Các ví dụ được nêu chỉ gồm
bge-reranker-large, bge-reranker-base, gte-multilingual-reranker-base,
gte-reranker-modernbert-base.
→ Nghĩa là bạn không phục vụ được Qwen3-Reranker hay jina-reranker-v3 trên TEI như hiện
trạng. Cách đi quanh: dùng các bản chuyển đổi -seq-cls của cộng đồng, hoặc đổi sang
vLLM.
vLLM có các endpoint /score, /rerank, /v1/rerank, /v2/rerank tương thích API
kiểu Cohere/Jina. Ràng buộc cứng, nguyên văn: chỉ khi một classification model xuất
num_labels bằng 1 thì nó mới dùng được làm scoring model. Đây chính là nguyên nhân của
các báo lỗi kiểu “model does not support Rerank (Score) API” với Qwen3-Reranker — cách
chữa là chuyển sang head sequence-classification.
Số latency chính thức gần như không tồn tại. TEI không công bố; trang benchmark của
Infinity chỉ có số cho embedding; tài liệu Sentence-Transformers có đường ONNX/OpenVINO
nhưng không có con số nào. Bảng latency reranker chính thức duy nhất tìm được là của
ZeroEntropy: zerank-2 trên ml.g6e.48xlarge đạt 0,5 QPS, p50 ~1500 ms; trên
p5.48xlarge đạt 5 QPS, p50 ~700 ms.
→ Hệ quả cho bạn: bạn phải tự đo. Đừng lấy con số latency từ blog; phần lớn không có nguồn (5.9).
Không có GPU: chạy reranker trên CPU
Phần tiêu đề “Không có GPU: chạy reranker trên CPU”Đây là trường hợp phổ biến hơn tài liệu thường giả định, và nó đổi thứ tự ứng viên — vì hai cửa mới xuất hiện: kiến trúc (encoder hay decoder) và có phục vụ được trên CPU không.
| Model | Tham số | Max seq | Giấy phép | Bằng chứng tiếng Việt | Ghi chú CPU |
|---|---|---|---|---|---|
Alibaba-NLP/gte-multilingual-reranker-base | 306M | 8192 | Apache-2.0 | vi có tên trong danh sách 70+ ngôn ngữ trên card | Model card có sẵn lệnh docker run … text-embeddings-inference:cpu-1.7 |
itdainb/PhoRanker | 135M | 256 ⚠️ | Apache-2.0 | language: vi, train trên mMARCO-vi | Nhẹ nhất — nhưng cần VnCoreNLP (xem trên) |
BAAI/bge-reranker-base | 278M | 512 | MIT | XLM-R, không tuyên bố tường minh | Repo có sẵn onnx/model.onnx — model duy nhất ở đây có |
AITeamVN/Vietnamese_Reranker | 568M | 2304 | Apache-2.0 | 1,1 triệu triplet tiếng Việt | Nặng nhất — chỉ khả thi với k nhỏ và bản int8 |
Mặc định nên thử đầu tiên: gte-multilingual-reranker-base. Nó qua cả bốn cửa ở cuối
mục này — Apache-2.0, vi nêu tên tường minh (không phải kiểu “100+ ngôn ngữ”), 8192
token nên chunk không bị cắt im lặng, TEI phục vụ được kể cả bản CPU — và làm được thế ở
306M. AITeamVN/Vietnamese_Reranker cũng qua đủ bốn cửa, nhưng nặng 1,9 lần; đó là
lý do thứ tự trên CPU khác thứ tự ở bảng gợi ý cuối mục. Nếu bạn có đủ ngân sách latency cho
568M thì chạy cả hai và so trên golden set của mình — đây là giả thuyết về chi phí, không
phải kết luận về chất lượng.
Chỉ một model trong bảng có sẵn bản ONNX — ba model kia, gồm cả hai model tiếng Việt, phải tự export. Kiểm bằng cách liệt kê file trong repo:
curl -sS https://huggingface.co/api/models/<HF-ID> \ | python3 -c 'import sys,json;print([f["rfilename"] for f in json.load(sys.stdin)["siblings"] \ if "onnx" in f["rfilename"].lower() or "openvino" in f["rfilename"].lower()])'Tháng 8/2026, trong bốn model trên chỉ bge-reranker-base trả về một file. Ba model kia —
kể cả gte-multilingual-reranker-base — bạn phải tự export. Đường đúng trên CPU, theo bộ
số đo tháng 7/2026 ở 5.9: openvino-qint8, hoặc openvino
nếu là Intel. Và điều dễ sập nhất: tuyệt đối không fp16 trên CPU — đo được 0,17×,
tức chậm hơn gần sáu lần.
Nhưng int8 không tự động nhanh hơn — nó phụ thuộc CPU của bạn. Tài liệu ONNX Runtime nói thẳng: “Old hardware has none or few of the instructions needed to perform efficient inference in int8”, và “quantization has overhead (from quantizing and dequantizing), so it is not rare to get worse performance on old devices.” Phần cứng thật sự hưởng lợi là x86-64 có VNNI hoặc ARM có lệnh dot-product. Trên một CPU cũ, bản int8 có thể chậm hơn bản fp32. Cùng tài liệu đó khuyến nghị: dynamic quantization cho model kiểu transformer (static dành cho CNN) — nghĩa là đường mặc định cho reranker là dynamic.
→ Kiểm CPU trước khi quantize: lscpu | grep -o avx512_vnni trên Linux,
sysctl -a | grep machdep.cpu.features trên macOS Intel. Không thấy VNNI thì đo cả hai
bản trước khi chọn, đừng giả định.
Ngân sách RAM, tính tay từ số tham số (4 byte/tham số ở fp32):
| Model | fp32 | int8 (≈ ¼) |
|---|---|---|
| PhoRanker 135M | ~540 MB | ~135 MB |
| gte-multilingual 306M | ~1,2 GB | ~306 MB |
| Vietnamese_Reranker 568M | ~2,3 GB | ~570 MB |
(Đây là số tính tay, không phải số đo. Cộng thêm activation — tỷ lệ với batch × seq_len²
— nên RSS thật luôn cao hơn.)
Con số throughput công khai duy nhất, và vì sao nó không dùng được cho CPU
Phần tiêu đề “Con số throughput công khai duy nhất, và vì sao nó không dùng được cho CPU”Model card PhoRanker có cột Docs / Sec: PhoRanker 15, bge-reranker-v2-m3 3,51,
bge-reranker-v2-gemma 1,29. Tỷ lệ ~4,3× giữa 135M và 568M là hợp lý và đáng dùng để
định hướng — nhưng ghi chú của chính bảng đó viết: “Runtime was computed on a A100 GPU
with fp16.” Không lập ngân sách CPU từ nó được.
Nên vẫn là kết luận cũ, chỉ khác chỗ áp dụng: phải tự đo. Dựng bằng
sentence-transformers, thay bằng truy vấn và đoạn văn thật của bạn:
import statistics, timefrom sentence_transformers import CrossEncoder
model = CrossEncoder("Alibaba-NLP/gte-multilingual-reranker-base", max_length=512, device="cpu", trust_remote_code=True)pairs = [(QUERY, DOC)] * K # K = số ứng viên bạn THẬT SỰ dùngmodel.predict(pairs[:16], batch_size=16) # warm-up, đừng tính lần này
times = []for _ in range(5): t0 = time.perf_counter() model.predict(pairs, batch_size=16) times.append((time.perf_counter() - t0) * 1000)print(statistics.median(times), "ms ", K / (statistics.median(times) / 1000), "docs/s")Hai điều quyết định kết quả nhiều hơn việc chọn model nào: k thật (đừng đo k = 10
cho dễ) và độ dài đoạn văn thật — vì attention có chi phí ~O(L²)
(5.9).
Khi nào CPU là đủ. Không có ngưỡng phổ quát; nó là hàm của k × seq_len × QPS trên
phần cứng của bạn. Nhưng hình dạng của quyết định thì rõ: k nhỏ (10–25), model ≤ 306M,
đoạn ngắn, lưu lượng thấp → một reranker int8 chạy CPU nằm gọn trong budget và tiết kiệm cả
một GPU. Ra khỏi vùng đó, thứ nên xoay trước là k, không phải phần cứng
(5.9).
Cách đọc bảng này khi nó đã hết hạn
Phần tiêu đề “Cách đọc bảng này khi nó đã hết hạn”Đây là phần không hết hạn. Bốn câu hỏi, theo thứ tự:
1. GIẤY PHÉP có cho phép dùng thương mại? → nếu không, gạch tên, dù điểm cao2. MAX SEQ có lớn hơn chunk của tôi? → nếu không, phần đuôi bị cắt im lặng3. TIẾNG VIỆT có được nêu tên tường minh? → "100+ ngôn ngữ" không phải bằng chứng4. Tôi PHỤC VỤ được nó trên hạ tầng của mình? → TEI/vLLM có ràng buộc kiến trúc thậtChỉ sau khi qua bốn cửa đó mới nhìn tới điểm benchmark. Và khi nhìn, nhớ rằng điểm đó đo trên dữ liệu không phải của bạn — đo lại trên golden set của mình là bước không bỏ được (5.12).
→ Nên áp dụng vào AI Agent: danh sách ứng viên hợp lý để thử đầu tiên cho một hệ tiếng
Việt, xét cả bốn cửa trên: Alibaba-NLP/gte-multilingual-reranker-base (306M, vi nêu tên
tường minh, 8192 token, Apache-2.0, phục vụ được trên TEI kể cả CPU),
AITeamVN/Vietnamese_Reranker (max seq 2304, Apache-2.0),
bge-reranker-v2-m3 (đa ngữ, Apache-2.0, phục vụ được trên TEI), và một API thương mại nêu
tên tiếng Việt làm mốc trần. Chạy cả bốn trên golden set của bạn, tách theo lớp truy vấn.
Nếu không có GPU, đổi thứ tự: đọc mục Không có GPU
trước — mxbai-rerank-base-v2 rơi ra khỏi danh sách (nó là decoder, TEI không phục vụ được),
và itdainb/PhoRanker (135M) vào thay, kèm chi phí VnCoreNLP.