CoolFace
Modelpublic

NamCr17/viranker-faq-finetuned

sourceHugging Faceapache-2.0updated 1y agoView on Hugging Face
0likes9downloads
Model Card

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)

bash
pip install -U FlagEmbedding
python
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)

bash
pip install -U transformers torch
python
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

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

python
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 TypeSpeedAccuracyUse Case
Bi-Encoder (Embedding)⚡⚡⚡ Fast⭐⭐ GoodInitial retrieval (1M+ docs)
Cross-Encoder (Reranker)⚡ Slow⭐⭐⭐ ExcellentFinal 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

bibtex
@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}
}