CoolFace
Modelpublic

surodipoikromo/IndoBERTindak

sourceHugging Faceapache-2.0updated 19d agoView on Hugging Face
0likes50downloads
Model Card

IndoBERTindak

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

Model Overview

IndoBERTindak detects five observable signals:

CodeLabelDescription
N1EXPLICIT_HELP_SEEKINGExplicit requests for help, explanation, guidance, or clarification
N2ACTIONABLE_KNOWLEDGE_PROVISIONProvision of information, instructions, solutions, or knowledge that can be acted upon
N3LEARNER_SELF_REPORTStatements describing one's own learning, understanding, difficulty, experience, or progress
N4POSITIVE_CONTENT_FEEDBACKPositive evaluation, appreciation, or favorable feedback directed toward the content
N5OTHER_DIRECTED_ENCOURAGEMENTEncouragement, 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.


Quick Start

Installation

bash
pip install transformers torch

Load the model

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

Run multilabel classification

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

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

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

  • one label,
  • several labels, or
  • no positive label.

Complete Inference Example

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

Input Format

Top-level text

For independent or top-level comments, provide the target text directly:

text
<target_text>

Example:

text
Bagaimana cara melakukan instalasinya?

Replies with parent context

When the target is a reply and the parent comment is available, the model was developed with the following contextual format:

text
[TARGET] <target_text> [PARENT] <parent_text>

Example:

text
[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.


Decision Thresholds

The final decision thresholds were tuned using the development set only and locked before evaluation on the held-out test set.

LabelThreshold
N1 — EXPLICIT_HELP_SEEKING0.45
N2 — ACTIONABLE_KNOWLEDGE_PROVISION0.70
N3 — LEARNER_SELF_REPORT0.35
N4 — POSITIVE_CONTENT_FEEDBACK0.35
N5 — OTHER_DIRECTED_ENCOURAGEMENT0.85

Using a single universal threshold such as 0.50 is therefore not recommended when reproducing the reported model performance.


Training Data

The model was developed using the Development Gold600 dataset consisting of authentic Indonesian digital-discourse traces.

Dataset composition:

SplitN
Train393
Development98
Held-out test100
Quarantine9
Total600

Additional characteristics:

  • 600 unique source IDs
  • five observable multilabel signals
  • Indonesian-language digital discourse
  • held-out test data were not used for threshold tuning

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.


Fine-Tuning Configuration

ParameterValue
Base modelindobenchmark/indobert-base-p1
Maximum sequence length256
Learning rate2e-5
Train batch size16
Evaluation batch size32
Maximum epochs8
Weight decay0.01
Early stopping patience2
LossBCEWithLogitsLoss
Class weightingTrain-only positive class weighting
Model selectionDEV macro-F1

Held-Out Test Performance

Overall performance on the held-out test set:

MetricIndoBERTindak
Macro-F10.692
Micro-F10.754
Weighted-F10.752
Exact Match0.630
Sample Jaccard0.602

Per-Label Performance

LabelPrecisionRecallF1Support
N1 — Explicit Help Seeking0.5420.8670.66715
N2 — Actionable Knowledge Provision0.6670.5000.57112
N3 — Learner Self-Report0.5710.8000.66720
N4 — Positive Content Feedback0.9020.9490.92539
N5 — Other-Directed Encouragement1.0000.4620.63213

Performance should be interpreted together with the relatively small per-label support in the held-out test set.


Comparison with Classical Baseline

The strongest classical baseline was TF-IDF + Linear SVM.

ModelMacro-F1
TF-IDF Linear SVM0.606
IndoBERTindak0.692

Absolute Macro-F1 improvement:

text
+0.086

IndoBERTindak also achieved higher Micro-F1, Weighted-F1, Exact Match, and Sample Jaccard than the classical baseline.


Intended Uses

IndoBERTindak is intended primarily for:

  • computational analysis of Indonesian digital discourse;
  • identification of observable behavioral or linguistic signals;
  • large-scale discourse annotation;
  • exploratory social computing research;
  • communication and interaction analysis;
  • information behavior research;
  • aggregate analysis of patterns across collections of Indonesian-language texts.

Predictions are best treated as computational annotations rather than definitive judgments about individual users.


Out-of-Scope Uses

The model is not intended for:

  • psychological diagnosis;
  • personality assessment;
  • intelligence or competence assessment;
  • individual ranking;
  • employee or student evaluation;
  • automated disciplinary decisions;
  • clinical assessment;
  • high-stakes profiling;
  • inferring hidden mental states from text.

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.


Limitations

Several limitations should be considered when using the model.

  1. 1.Relatively small development dataset. The model was fine-tuned on 600 annotated traces, with 100 observations reserved for held-out evaluation.
  1. 1.Uneven label support. Some signals are less frequent than others. In particular, N2 and N5 have modest support in the held-out test set.
  1. 1.Context sensitivity. ACTIONABLE_KNOWLEDGE_PROVISION may depend strongly on conversational function and reply context.
  1. 1.Precision-recall trade-offs. OTHER_DIRECTED_ENCOURAGEMENT achieved high precision but relatively low recall under its locked threshold.
  1. 1.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.
  1. 1.Annotation procedure. Annotation expansion included AI-assisted and rule-guided procedures and should not be represented as an independent two-human-coder gold standard.
  1. 1.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.


Ethical Considerations

IndoBERTindak was designed to detect observable textual signals, not to profile individuals.

Recommended practice is to:

  • analyze predictions at an aggregate level where possible;
  • retain human interpretation for substantive conclusions;
  • document the domain and sampling procedure;
  • report uncertainty and model limitations;
  • validate the model when transferring it to substantially different datasets.

The model should not be used as the sole basis for decisions that materially affect an individual.


Reproducibility Notes

To reproduce the reported evaluation behavior:

  1. 1.use surodipoikromo/IndoBERTindak;
  2. 2.tokenize with a maximum sequence length of 256;
  3. 3.apply sigmoid independently to each output logit;
  4. 4.use the five label-specific locked thresholds;
  5. 5.do not use softmax() or argmax() for final multilabel decisions.

The reported held-out metrics correspond to these locked decision rules.


Base Model

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.


Citation

If you use IndoBERTindak in research, please cite the associated publication when it becomes available.

Until then, the model repository can be referenced as:

bibtex
@misc{indobertindak2026,
  title        = {IndoBERTindak},
  author       = {surodipoikromo},
  year         = {2026},
  publisher    = {Hugging Face},
  howpublished = {\url{https://huggingface.co/surodipoikromo/IndoBERTindak}}
}

Model repository:

text
https://huggingface.co/surodipoikromo/IndoBERTindak

License

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.


Disclaimer

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.