ViRanker Fine-tuned on dermatology Vietnam FAQ

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

🎯 Công dụng

  • Reranking: Sắp xếp lại kết quả tìm kiếm theo mức độ liên quan
  • FAQ Chatbot: Tìm câu trả lời phù hợp nhất cho câu hỏi người dùng
  • RAG System: Chọn context tốt nhất cho Large Language Model
  • Semantic Matching: Đánh giá độ tương đồng giữa query và document

🚀 Cách sử dụng

Option 1: FlagEmbedding (Khuyến nghị - Đơn giản nhất)

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: dermatologyvietnam@gmail.com",
    "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}")

Option 2: Transformers (Chi tiết hơn)

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

💡 Use Cases

1. FAQ Chatbot

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']}")

2. Two-stage Retrieval (Retriever + Reranker)

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]

📊 Training Details

Dataset

  • Domain: dermatology Vietnam FAQ (Sản phẩm chăm sóc da & Dịch vụ)
  • Size: ~100 cặp câu hỏi-trả lời
  • Format: {"question": "...", "answer": "..."}
  • Train/Val Split: 80/20
  • Negative Sampling: 5 random negatives per positive

Configuration

  • Base Model: namdp-ptit/ViRanker (XLM-RoBERTa)
  • Max Length: 512 tokens
  • Epochs: 1
  • Batch Size: 8 (train), 16 (eval)
  • Learning Rate: Default AdamW
  • Loss Function: Binary Cross-Entropy
  • Optimizer: AdamW with weight decay 0.01
  • Precision: FP16 (Mixed Precision)

Hardware

  • GPU: NVIDIA Tesla (Kaggle)
  • Training Time: ~10-15 minutes

🔬 Model Architecture

Input: [CLS] question [SEP] answer [SEP]
         ↓
XLM-RoBERTa Encoder (280M parameters)
         ↓
Classification Head
         ↓
Logit → Sigmoid → Score [0,1]

⚠️ Limitations

  • Model được fine-tune đặc biệt cho domain dermatology Vietnam FAQ
  • Performance có thể giảm trên domain khác (y tế, pháp luật, công nghệ, ...)
  • Cần ít nhất 2 documents để so sánh (không phù hợp cho single document scoring)
  • Chậm hơn bi-encoder (phải inference từng pair)
  • Không tạo embeddings có thể cache (phải recompute mỗi lần query mới)

💡 Tips

  • Khi nào dùng Reranker: Khi bạn cần độ chính xác cao (top 1-5 results)
  • Khi nào dùng Bi-encoder: Khi bạn cần tốc độ (search trong hàng triệu documents)
  • Best practice: Kết hợp cả 2 (retrieval với bi-encoder → rerank với cross-encoder)

📈 Comparison

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)

🙏 Acknowledgments

  • Base model: namdp-ptit/ViRanker
  • Training framework: Hugging Face Transformers
  • Inference library: FlagEmbedding

📄 License

Apache 2.0

📧 Contact

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}
}
Downloads last month
-
Safetensors
Model size
0.6B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for NamCr17/viranker-faq-finetuned

Base model

BAAI/bge-m3
Finetuned
(1)
this model