Bỏ qua để đến nội dung
Search & RAG

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.

Nhà cung cấpModelNgữ cảnhGiá (nguyên văn từ trang chính thức)
Coherererank-v4.0-pro32k$2,50 / 1K searches
Coherererank-v4.0-fast32k$2,00 / 1K searches
Coherererank-v3.54kKhông còn trong bảng giá API; chỉ còn ở Model Vault ($5,00/giờ)
Voyage AI (MongoDB)rerank-2.532k tổng, tối đa 1.000 doc/lượt$0,05 / 1M token, 200M token đầu miễn phí
Voyage AIrerank-2.5-lite32k$0,02 / 1M token
Googlesemantic-ranker-default-0041024 token / bản ghi$1,00 / 1.000 count (1 count = 1 truy vấn ≤ 100 doc)
AWS Bedrockcohere.rerank-v3-5:0chunk ≤ 500 token$2,00 / 1.000 truy vấn
ZeroEntropyzerank-232.768$0,025 / 1M token
Jina AI (nay thuộc Elastic)jina-reranker-v3.5131.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.

ModelHF IDTham sốNgữ cảnhGiấy phépĐa ngữ
Qwen3-RerankerQwen/Qwen3-Reranker-0.6B / -4B / -8B0,6B / 4B / 8B32kApache-2.0100+
BGE v2BAAI/bge-reranker-v2-m30,6B8192 khai báo, fine-tune ở 1024Apache-2.0
BGE v2BAAI/bge-reranker-v2-gemmanền gemma-2b
Mixedbreadmixedbread-ai/mxbai-rerank-base-v2 / -large-v20,5B / 1,5B8K (tương thích 32K)Apache-2.0100+, có nhãn vi
Jinajinaai/jina-reranker-v3 / v3.50,6B (597M)131KCC-BY-NC-4.0phi thương mại93 (huấn luyện trên 24)
ZeroEntropyzeroentropy/zerank-24B (nền Qwen3-4B)32.768nhã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ùngnhãn ngôn ngữ chỉ có en
Contextual AIContextualAI/ctxl-rerank-v2-instruct-multilingual-{1b,2b,6b}1B/2B/6B32.000CC-BY-NC-SA-4.0phi thương mại“100+”
AlibabaAlibaba-NLP/gte-multilingual-reranker-base

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:

Terminal window
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):

ModelBEIR nDCG@10Ghi chú
mxbai-rerank-base-v255,57
mxbai-rerank-large-v257,49
jina-reranker-v362,10
jina-reranker-v3.563,20
Qwen3-Reranker-4B62,28Như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”
HF IDNềnTham sốMax seqGiấy phépSố đo tự báo cáo
AITeamVN/Vietnamese_Rerankerbge-reranker-v2-m3568M2304 (256 query + 2048 passage)Apache-2.0Zalo 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/PhoRankerPhoBERT (RoBERTa, vocab 64k — không đa ngữ)135M256Apache-2.0mMARCO-vi dev: NDCG@10 0,7422, MRR@10 0,6830
namdp-ptit/ViRankerbge-m3568M512Apache-2.0mMARCO-vi dev: NDCG@10 0,7302, MRR@10 0,7107
CATI-AI/Qwen3-Reranker-0.6B-vietnamese-legalQwen3-Reranker-0.6B0,6Bmiề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:

Terminal window
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_Reranker bá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 seq là 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_vncorenlp rồi chạy rdrsegmenter.word_segment() trên cả truy vấn và đoạn văn, vì nền PhoBERT quen dạng Trườ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-m3 NDCG@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ắntà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”
ModelTiếng Việt được nêu tên?
Cohere Rerank — bảng ngôn ngữ trong tài liệu có dòng vi → Vietnamese
mxbai-rerank-large-v2 — nhãn ngôn ngữ vi ngay trên model card
bge-reranker-v2-m3Nề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.5chỉ 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-2nhãn ngôn ngữ chỉ en — đừng coi là lựa chọn cho tiếng Việt
Elastic Rerank .rerank-v1Chỉ 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-v1184M 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.

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).

Đâ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.

ModelTham sốMax seqGiấy phépBằng chứng tiếng ViệtGhi chú CPU
Alibaba-NLP/gte-multilingual-reranker-base306M8192Apache-2.0vi có tên trong danh sách 70+ ngôn ngữ trên cardModel card có sẵn lệnh docker run … text-embeddings-inference:cpu-1.7
itdainb/PhoRanker135M256 ⚠️Apache-2.0language: vi, train trên mMARCO-viNhẹ nhất — nhưng cần VnCoreNLP (xem trên)
BAAI/bge-reranker-base278M512MITXLM-R, không tuyên bố tường minhRepo có sẵn onnx/model.onnx — model duy nhất ở đây có
AITeamVN/Vietnamese_Reranker568M2304Apache-2.01,1 triệu triplet tiếng ViệtNặ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:

Terminal window
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-basebạ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):

Modelfp32int8 (≈ ¼)
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, time
from 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ùng
model.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).

Đâ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 cao
2. 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ặng
3. TIẾNG VIỆT có được nêu tên tường minh? → "100+ ngôn ngữ" không phải bằng chứng
4. 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ật

Chỉ 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.

Phần 5 — Reranker