/ Модель

Характеристики

Контекст
514 токенов
Параметры
152 млн
Лицензия
MIT
Архитектура
roberta · dense
Библиотека
transformers
Опубликована
24 июн 2025

indo-roBERTa-financial-sentiment

Классификация текстаТекст → label3 профессии

Модель классифицирует тональность финансовых новостей на индонезийском языке как положительную, нейтральную или отрицательную.

220скачиваний за 30 дней0лайковвеса обновлены29 июн 2025

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

IndoRoBERTa Financial Sentiment — модель Khoirul Ihsan для классификации тональности индонезийских финансовых новостей. Она дообучена на базе w11wo/indonesian-roberta-base-sentiment-classifier и использует архитектуру RoBERTa с головой классификации последовательностей; размер модели — 151,8 млн параметров, контекст — до 514 токенов.

Модель относит текст к одному из трёх классов: положительному, нейтральному или отрицательному. Она предназначена для анализа финансовых новостей на индонезийском языке, в том числе материалов о фондовом рынке. При интерпретации оценок учитывайте соответствие меток: 0 — положительная, 1 — нейтральная, 2 — отрицательная. Обучение проводилось на размеченных финансовых новостях с синтетическими и аугментированными примерами. Лицензия — MIT.

Сценарии применения

  • Определение тональности индонезийских финансовых новостей
  • Разметка новостных статей о фондовом рынке Индонезии
  • Мониторинг позитивных и негативных новостных сигналов для IHSG

Ограничения

README характеризует исходные размеченные данные как ограниченные и несбалансированные, хотя для обучения применялись синтетические и аугментированные примеры. Выходные метки имеют заданное соответствие: 0 — положительная тональность, 1 — нейтральная, 2 — отрицательная.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

🇮🇩 IndoRoBERTa for Indonesian Financial Sentiment Classification

This is a fine-tuned version of w11wo/indonesian-roberta-base-sentiment-classifier, specialized for Indonesian financial news sentiment classification since i cant find any financial sentiment models for indonesian market, i decided to make my self.

🧠 Model Summary

FieldValue
Model Nameihsan31415/indo-roBERTa-financial-sentiment
Base Modelw11wo/indonesian-roberta-base-sentiment-classifier
LanguageIndonesian (id)
TaskSentiment Analysis (Financial)
Labels0: Positive, 1: Neutral, 2: Negative (⚠️ flipped label order)
Datasetintanm/indonesian-financial-sentiment-analysis + synthetic and augmented samples
Fine-tuned byihsan31415
Training Epochs5 (Early stopping at epoch 5, best at epoch 3)
Eval Accuracy97.49%

🧠 Model Objective

This model classifies Indonesian financial news articles into:

  • 0 → Positive
  • 1 → Neutral
  • 2 → Negative

⚠️ Important: Label Mapping is Flipped This label order follows the base model's unexpected configuration. During training and evaluation, the dataset was relabeled accordingly.

⚠️ Always interpret model output using this mapping:

  • 0: Positive
  • 1: Neutral
  • 2: Negative

📊 Dataset & Preprocessing Pipeline

🔹 Source Dataset

📈 Data Augmentation & Balancing

1. 🧪 Gemini Synthetic Generation

  • Generated structured financial news samples using gemini-2.0-flash-lite
  • Targeted generation for underrepresented classes

2. ✍️ GPT-2 Prompt Completion

3. 🧩 Roberta-Based Masked Augmentation

  • Strategic masking/filling while protecting key financial terms
  • Iterative masking to increase diversity and context coverage

📊 Final Label Distribution

Train Set:

2 (Negative): 22906
1 (Neutral): 23374
0 (Positive): 23423

Test Set:

2 (Negative): 9817
1 (Neutral): 10018
0 (Positive): 10039

🏋️ Training Details

🔁 Label Flipping

The base model uses non-standard labels:

  • 0: Positive
  • 1: Neutral
  • 2: Negative

Training data was relabeled accordingly.

🔧 TrainingArguments

TrainingArguments(
    output_dir="./results-roberta",
    eval_strategy="epoch",
    save_strategy="epoch",
    logging_strategy="epoch",
    per_device_train_batch_size=256,
    per_device_eval_batch_size=256,
    num_train_epochs=15,
    learning_rate=2e-5,
    weight_decay=0.01,
    load_best_model_at_end=True,
    metric_for_best_model="accuracy",
    save_total_limit=4,
)
  • Early stopping (patience=2)
  • Training completed at epoch 5, best model from epoch 3

📊 Training Progress

EpochTraining LossValidation LossAccuracyPrecisionRecallF1 Score
10.1045000.0855620.9694020.9697150.9694020.969356
20.0291000.0883920.9748590.9749140.9748590.974860
30.0127000.1023050.9749260.9749490.9749260.974933
40.0089000.1257070.9728160.9729590.9728160.972846
50.0044000.1576590.9666900.9669020.9666900.966676

✅ Evaluation Results

eval_loss                 = 0.10230540484189987
eval_accuracy             = 0.9749255130394028
eval_precision            = 0.9749490510899772
eval_recall               = 0.9749255130394028
eval_f1                   = 0.9749326327197978
eval_runtime              = 71.9098
eval_samples_per_second   = 415.395
eval_steps_per_second     = 1.627
epoch                     = 5.0

🔎 Usage

Using Pipeline

from transformers import pipeline

pretrained_name = "ihsan31415/indo-roBERTa-financial-sentiment"

nlp = pipeline(
    "sentiment-analysis",
    model=pretrained_name,
    tokenizer=pretrained_name
)

nlp("IHSG diprediksi melemah karena sentimen global negatif")

RAW

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# Load model and tokenizer
model = AutoModelForSequenceClassification.from_pretrained("ihsan31415/indo-roBERTa-financial-sentiment")
tokenizer = AutoTokenizer.from_pretrained("ihsan31415/indo-roBERTa-financial-sentiment")

# Example input
text = "IHSG diprediksi melemah karena sentimen global negatif"
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
outputs = model(**inputs)

# Get predicted class
predicted_label = torch.argmax(outputs.logits, dim=1).item()

# Interpret using flipped label mapping
label_map = {
    0: "Positive",
    1: "Neutral",
    2: "Negative"
}
print(f"Predicted sentiment: {label_map[predicted_label]}")

Author

this indonesian RoBERTa base financial CLassifier was trained and evaluated by Khoirul Ihsan using Google colab GPU T4.


📌 Citation

@misc{khoirul_ihsan_2025,
  title        = {IndoRoBERTa for Indonesian Financial Sentiment Classification},
  author       = {Khoirul Ihsan},
  howpublished = {\url{https://huggingface.co/ihsan31415/indo-roBERTa-financial-sentiment}},
  year         = {2025},
  note         = {Fine-tuned from w11wo/indonesian-roberta-base-sentiment-classifier using augmented financial news data from intanm/indonesian-financial-sentiment-analysis and various synthetic generation methods (Gemini, GPT-2, Roberta masking).},
  publisher    = {Hugging Face}
}

📬 Contact

Created with love and tears by ihsan:
HuggingFace GitHub LinkedIn
For collaborations or questions, feel free to reach out via Hugging Face or GitHub.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · transformers · text-classification

Можно запустить

Подбираем GPU…

Класс архитектуры
RobertaForSequenceClassification
Ревизия весов
ebaa210

0 моделей