Downloads · 30 days
14
11% of all-time downloads
NamCr17/viranker-faq-finetuned
viranker-faq-finetuned is a text classification model from NamCr17. Use it when you need a label for a piece of text. It is set up for transformers. The card lists the license as apache-2.0.
Model Cross-Encoder (Reranker) được fine-tune từ namdp-ptit/ViRanker trên tập dữ liệu FAQ của dermatology Việt Nam.
Downloads · 30 days
14
11% of all-time downloads
All-time downloads
124
Public
Parameters
568M
2.3 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors2.3 GB · 99%
From the Hugging Face model README
Model Cross-Encoder (Reranker) được fine-tune từ namdp-ptit/ViRanker trên tập dữ liệu FAQ của dermatology Việt Nam.
Model này đánh giá mức độ liên quan giữa câu hỏi và câu trả lời, trả về điểm số từ 0-1 (càng cao càng relevant).
pip install -U FlagEmbedding
from FlagEmbedding import FlagReranker
# Load model
reranker = FlagReranker('NamCr17/viranker-faq-finetuned', use_fp16=True)
# Tính điểm cho 1 cặp
score = reranker.compute_score(
['Giá trị cốt lõi của dermatology Việt Nam?',
'5 giá trị cốt lõi: TÂM, CHIẾN LƯỢC, TRÍ, TÍN, NHANH'],
normalize=True
)
print(f"Score: {score}") # Output: 0.9999... (rất relevant)
# Rerank nhiều documents
query = "Liên hệ với dermatology như thế nào?"
documents = [
"Hotline: 0243 789 4110, Email: [email protected]",
"5 giá trị cốt lõi: TÂM, CHIẾN LƯỢC, TRÍ, TÍN, NHANH",
"Sản phẩm chăm sóc da chuyên nghiệp"
]
# Tạo pairs
pairs = [[query, doc] for doc in documents]
scores = reranker.compute_score(pairs, normalize=True)
# Sắp xếp theo điểm
ranked = sorted(zip(documents, scores), key=lambda x: x[1], reverse=True)
for doc, score in ranked:
print(f"{score:.4f}: {doc}")
pip install -U transformers torch
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# Load model
tokenizer = AutoTokenizer.from_pretrained('NamCr17/viranker-faq-finetuned')
model = AutoModelForSequenceClassification.from_pretrained('NamCr17/viranker-faq-finetuned')
model.eval()
# Prepare input
pairs = [
['Liên hệ dermatology?', 'Hotline: 0243 789 4110'],
['Liên hệ dermatology?', 'Sản phẩm chăm sóc da']
]
# Inference
with torch.no_grad():
inputs = tokenizer(
pairs,
padding=True,
truncation=True,
return_tensors='pt',
max_length=512
)
logits = model(**inputs).logits.view(-1,).float()
scores = torch.sigmoid(logits) # Normalize to [0,1]
print(scores) # tensor([0.9999, 0.0234])
from FlagEmbedding import FlagReranker
import json
# Load FAQ database
with open('faq_database.json', 'r', encoding='utf-8') as f:
faq_db = json.load(f)
reranker = FlagReranker('NamCr17/viranker-faq-finetuned', use_fp16=True)
def find_answer(user_question, top_k=3):
# Tạo pairs với tất cả câu trả lời
pairs = [[user_question, item['answer']] for item in faq_db]
# Tính scores
scores = reranker.compute_score(pairs, normalize=True)
# Lấy top k
ranked = sorted(zip(faq_db, scores), key=lambda x: x[1], reverse=True)[:top_k]
return ranked
# Sử dụng
results = find_answer("Làm thế nào để liên hệ với dermatology?")
for faq, score in results:
print(f"
Score: {score:.4f}")
print(f"Q: {faq['question']}")
print(f"A: {faq['answer']}")
from sentence_transformers import SentenceTransformer
from FlagEmbedding import FlagReranker
from sklearn.metrics.pairwise import cosine_similarity
# Stage 1: Fast retrieval với bi-encoder
embedder = SentenceTransformer('keepitreal/vietnamese-sbert')
query_emb = embedder.encode(user_question)
doc_embs = embedder.encode([item['answer'] for item in faq_db])
# Lấy top 20 candidates
similarities = cosine_similarity([query_emb], doc_embs)[0]
top_20_idx = similarities.argsort()[-20:][::-1]
# Stage 2: Rerank với cross-encoder (chính xác hơn)
reranker = FlagReranker('NamCr17/viranker-faq-finetuned', use_fp16=True)
candidates = [faq_db[i] for i in top_20_idx]
pairs = [[user_question, item['answer']] for item in candidates]
scores = reranker.compute_score(pairs, normalize=True)
# Lấy top 3 final
final = sorted(zip(candidates, scores), key=lambda x: x[1], reverse=True)[:3]
{"question": "...", "answer": "..."}Input: [CLS] question [SEP] answer [SEP]
↓
XLM-RoBERTa Encoder (280M parameters)
↓
Classification Head
↓
Logit → Sigmoid → Score [0,1]
| Model Type | Speed | Accuracy | Use Case |
|---|---|---|---|
| Bi-Encoder (Embedding) | ⚡⚡⚡ Fast | ⭐⭐ Good | Initial retrieval (1M+ docs) |
| Cross-Encoder (Reranker) | ⚡ Slow | ⭐⭐⭐ Excellent | Final reranking (top 10-100) |
Apache 2.0
For questions or feedback, please open an issue on the model's discussion page.
Citation
@misc{viranker-faq-dermatology,
title={ViRanker Fine-tuned on dermatology Vietnam FAQ},
author={NamCr17},
year={2025},
publisher={Hugging Face},
url={https://huggingface.co/NamCr17/viranker-faq-finetuned}
}