|
|
--- |
|
|
license: apache-2.0 |
|
|
base_model: |
|
|
- indobenchmark/indobert-base-p1 |
|
|
pipeline_tag: text-classification |
|
|
tags: |
|
|
- indobert |
|
|
- intent-classification |
|
|
- jkn-kis |
|
|
- bpjs |
|
|
- bahasa-indonesia |
|
|
- healthcare |
|
|
- nlp |
|
|
language: |
|
|
- id |
|
|
library_name: transformers |
|
|
model_type: bert |
|
|
--- |
|
|
|
|
|
# 🩺 IndoBERT for Intent Classification on JKN-KIS Data |
|
|
|
|
|
This model is a fine-tuned version of [`indobenchmark/indobert-base-p1`](https://huggingface.co/indobenchmark/indobert-base-p1), adapted for **intent classification** on question data related to the **Jaminan Kesehatan Nasional – Kartu Indonesia Sehat (JKN-KIS)** program. |
|
|
|
|
|
The model is trained to recognize user intent from common questions asked in the context of **BPJS Kesehatan** services, such as registration, benefits, payment, eligibility, and more. |
|
|
|
|
|
--- |
|
|
|
|
|
## 🚀 How to Use |
|
|
|
|
|
Make sure to load your model and tokenizer, and also the label encoder (`le`) if you're using `LabelEncoder` from `sklearn`. |
|
|
|
|
|
```python |
|
|
from transformers import AutoTokenizer, AutoModelForSequenceClassification |
|
|
import torch |
|
|
import joblib # only needed if you use sklearn LabelEncoder |
|
|
|
|
|
# Load model and tokenizer |
|
|
model_name = "vinapatri/intent-classification-jkn-kis" |
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
|
model = AutoModelForSequenceClassification.from_pretrained(model_name) |
|
|
|
|
|
# Load the label encoder used during training |
|
|
le = joblib.load("label_encoder.pkl") |
|
|
|
|
|
def predict_intent(text): |
|
|
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) |
|
|
|
|
|
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
|
|
model.to(device) |
|
|
inputs = {k: v.to(device) for k, v in inputs.items()} |
|
|
|
|
|
with torch.no_grad(): |
|
|
outputs = model(**inputs) |
|
|
|
|
|
logits = outputs.logits |
|
|
predicted_class_id = logits.argmax().item() |
|
|
tag = le.inverse_transform([predicted_class_id])[0] |
|
|
return tag |
|
|
|
|
|
# Example |
|
|
text = "Apa tata cara memperoleh surat keterangan tidak mampu untuk BPJS?" |
|
|
predicted_intent = predict_intent(text) |
|
|
print(f"Intent: {predicted_intent}") |
|
|
|