Downloads · 30 days
4
7% of all-time downloads
surodipoikromo/IndoBERTindak
IndoBERTindak is a text classification model from surodipoikromo. 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.
IndoBERTindak is a fine-tuned IndoBERT model for detecting observable behavioral and linguistic signals in Indonesian digital discourse.
Downloads · 30 days
4
7% of all-time downloads
All-time downloads
58
Public
Parameters
124M
498 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors498 MB · 100%
From the Hugging Face model README
IndoBERTindak is a fine-tuned IndoBERT model for detecting observable behavioral and linguistic signals in Indonesian digital discourse.
The model performs multilabel text classification, meaning that a single text may contain more than one signal, or none of the five signals.
It is built on indobenchmark/indobert-base-p1.
IndoBERTindak detects five observable signals:
| Code | Label | Description |
|---|---|---|
| N1 | EXPLICIT_HELP_SEEKING | Explicit requests for help, explanation, guidance, or clarification |
| N2 | ACTIONABLE_KNOWLEDGE_PROVISION | Provision of information, instructions, solutions, or knowledge that can be acted upon |
| N3 | LEARNER_SELF_REPORT | Statements describing one's own learning, understanding, difficulty, experience, or progress |
| N4 | POSITIVE_CONTENT_FEEDBACK | Positive evaluation, appreciation, or favorable feedback directed toward the content |
| N5 | OTHER_DIRECTED_ENCOURAGEMENT | Encouragement, support, or motivational expressions directed toward another person |
These labels represent observable textual behavior.
They should not be interpreted as direct measurements of latent psychological characteristics such as trust, motivation, personality, intelligence, competence, or learning ability.
pip install transformers torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
MODEL_ID = "surodipoikromo/IndoBERTindak"
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID)
model.eval()
text = "Bagaimana cara menggunakan fitur ini?"
inputs = tokenizer(
text,
return_tensors="pt",
truncation=True,
max_length=256
)
with torch.no_grad():
logits = model(**inputs).logits
probabilities = torch.sigmoid(logits)[0]
IndoBERTindak uses label-specific decision thresholds tuned on the development set:
thresholds = torch.tensor([
0.45, # N1 — EXPLICIT_HELP_SEEKING
0.70, # N2 — ACTIONABLE_KNOWLEDGE_PROVISION
0.35, # N3 — LEARNER_SELF_REPORT
0.35, # N4 — POSITIVE_CONTENT_FEEDBACK
0.85, # N5 — OTHER_DIRECTED_ENCOURAGEMENT
])
predictions = probabilities >= thresholds
Display the results:
labels = [
"EXPLICIT_HELP_SEEKING",
"ACTIONABLE_KNOWLEDGE_PROVISION",
"LEARNER_SELF_REPORT",
"POSITIVE_CONTENT_FEEDBACK",
"OTHER_DIRECTED_ENCOURAGEMENT",
]
for label, probability, prediction in zip(
labels,
probabilities,
predictions
):
print(
f"{label:32s} "
f"probability={probability.item():.4f} "
f"predicted={bool(prediction.item())}"
)
Because this is a multilabel classifier, do not use argmax() to obtain predictions. Each label is evaluated independently using a sigmoid probability and its corresponding decision threshold.
A text may therefore receive:
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
MODEL_ID = "surodipoikromo/IndoBERTindak"
LABELS = [
"EXPLICIT_HELP_SEEKING",
"ACTIONABLE_KNOWLEDGE_PROVISION",
"LEARNER_SELF_REPORT",
"POSITIVE_CONTENT_FEEDBACK",
"OTHER_DIRECTED_ENCOURAGEMENT",
]
THRESHOLDS = torch.tensor([
0.45,
0.70,
0.35,
0.35,
0.85,
])
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID)
model.eval()
def predict(text):
inputs = tokenizer(
text,
return_tensors="pt",
truncation=True,
max_length=256
)
with torch.no_grad():
logits = model(**inputs).logits
probabilities = torch.sigmoid(logits)[0]
predictions = probabilities >= THRESHOLDS
results = []
for label, probability, prediction in zip(
LABELS,
probabilities,
predictions
):
results.append({
"label": label,
"probability": round(probability.item(), 4),
"predicted": bool(prediction.item())
})
return results
text = "Bagaimana cara menggunakan fitur ini?"
for result in predict(text):
print(result)
For independent or top-level comments, provide the target text directly:
<target_text>
Example:
Bagaimana cara melakukan instalasinya?
When the target is a reply and the parent comment is available, the model was developed with the following contextual format:
[TARGET] <target_text> [PARENT] <parent_text>
Example:
[TARGET] Coba masuk ke pengaturan lalu aktifkan fiturnya. [PARENT] Bagaimana cara mengaktifkan fitur ini?
The target text remains the primary evidence. Parent context should only be used when necessary to resolve the function or referent of a reply.
The final decision thresholds were tuned using the development set only and locked before evaluation on the held-out test set.
| Label | Threshold |
|---|---|
N1 — EXPLICIT_HELP_SEEKING | 0.45 |
N2 — ACTIONABLE_KNOWLEDGE_PROVISION | 0.70 |
N3 — LEARNER_SELF_REPORT | 0.35 |
N4 — POSITIVE_CONTENT_FEEDBACK | 0.35 |
N5 — OTHER_DIRECTED_ENCOURAGEMENT | 0.85 |
Using a single universal threshold such as 0.50 is therefore not recommended when reproducing the reported model performance.
The model was developed using the Development Gold600 dataset consisting of authentic Indonesian digital-discourse traces.
Dataset composition:
| Split | N |
|---|---|
| Train | 393 |
| Development | 98 |
| Held-out test | 100 |
| Quarantine | 9 |
| Total | 600 |
Additional characteristics:
The development corpus combines direct assistant adjudication and codebook-guided/rule-assisted annotation.
It should therefore not be described as an independent two-human-coder gold standard.
| Parameter | Value |
|---|---|
| Base model | indobenchmark/indobert-base-p1 |
| Maximum sequence length | 256 |
| Learning rate | 2e-5 |
| Train batch size | 16 |
| Evaluation batch size | 32 |
| Maximum epochs | 8 |
| Weight decay | 0.01 |
| Early stopping patience | 2 |
| Loss | BCEWithLogitsLoss |
| Class weighting | Train-only positive class weighting |
| Model selection | DEV macro-F1 |
Overall performance on the held-out test set:
| Metric | IndoBERTindak |
|---|---|
| Macro-F1 | 0.692 |
| Micro-F1 | 0.754 |
| Weighted-F1 | 0.752 |
| Exact Match | 0.630 |
| Sample Jaccard | 0.602 |
| Label | Precision | Recall | F1 | Support |
|---|---|---|---|---|
| N1 — Explicit Help Seeking | 0.542 | 0.867 | 0.667 | 15 |
| N2 — Actionable Knowledge Provision | 0.667 | 0.500 | 0.571 | 12 |
| N3 — Learner Self-Report | 0.571 | 0.800 | 0.667 | 20 |
| N4 — Positive Content Feedback | 0.902 | 0.949 | 0.925 | 39 |
| N5 — Other-Directed Encouragement | 1.000 | 0.462 | 0.632 | 13 |
Performance should be interpreted together with the relatively small per-label support in the held-out test set.
The strongest classical baseline was TF-IDF + Linear SVM.
| Model | Macro-F1 |
|---|---|
| TF-IDF Linear SVM | 0.606 |
| IndoBERTindak | 0.692 |
Absolute Macro-F1 improvement:
+0.086
IndoBERTindak also achieved higher Micro-F1, Weighted-F1, Exact Match, and Sample Jaccard than the classical baseline.
IndoBERTindak is intended primarily for:
Predictions are best treated as computational annotations rather than definitive judgments about individual users.
The model is not intended for:
A detected signal indicates that a particular textual pattern is observable in the input. It does not establish why the author produced that text or what psychological state the author had.
Several limitations should be considered when using the model.
Relatively small development dataset. The model was fine-tuned on 600 annotated traces, with 100 observations reserved for held-out evaluation.
Uneven label support. Some signals are less frequent than others. In particular, N2 and N5 have modest support in the held-out test set.
Context sensitivity.
ACTIONABLE_KNOWLEDGE_PROVISION may depend strongly on conversational function and reply context.
Precision-recall trade-offs.
OTHER_DIRECTED_ENCOURAGEMENT achieved high precision but relatively low recall under its locked threshold.
Domain specificity. The model was developed primarily from Indonesian tutorial/discussion discourse on YouTube. Performance on substantially different domains, platforms, genres, dialects, or highly formal text has not been established.
Annotation procedure. Annotation expansion included AI-assisted and rule-guided procedures and should not be represented as an independent two-human-coder gold standard.
Observable signals only. Model predictions should not be interpreted as direct evidence of latent psychological characteristics.
Users applying IndoBERTindak to a new domain are encouraged to perform domain-specific validation before drawing substantive conclusions.
IndoBERTindak was designed to detect observable textual signals, not to profile individuals.
Recommended practice is to:
The model should not be used as the sole basis for decisions that materially affect an individual.
To reproduce the reported evaluation behavior:
surodipoikromo/IndoBERTindak;softmax() or argmax() for final multilabel decisions.The reported held-out metrics correspond to these locked decision rules.
IndoBERTindak is fine-tuned from:
indobenchmark/indobert-base-p1
The original IndoBERT model should also be consulted for details about its pretraining corpus, architecture, and underlying limitations.
If you use IndoBERTindak in research, please cite the associated publication when it becomes available.
Until then, the model repository can be referenced as:
@misc{indobertindak2026,
title = {IndoBERTindak},
author = {surodipoikromo},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/surodipoikromo/IndoBERTindak}}
}
Model repository:
https://huggingface.co/surodipoikromo/IndoBERTindak
This model is released under the Apache License 2.0.
See the repository license information and the license terms of the underlying IndoBERT base model before redistribution or deployment.
IndoBERTindak provides probabilistic computational predictions. Its outputs should be interpreted in relation to the model's training domain, annotation framework, decision thresholds, and documented limitations.
The presence or absence of a predicted signal should not be treated as definitive evidence about an individual's intentions, abilities, personality, motivation, or psychological state.