Yaosanz/ATS-islamic-organization-news

1

stars

8

commits

Python

primary language

Jul 10, 2026

updated

README

๐Ÿ“œ Peringkasan Otomatis Artikel Ormas Islam

Menggunakan Algoritma IndoBERT

Skripsi โ€” Natural Language Processing ยท Automatic Text Summarization ยท IndoBERT


๐Ÿ“‹ Deskripsi

Sistem peringkasan otomatis artikel tentang Organisasi Kemasyarakatan (Ormas) Islam dari media online Liputan6.com menggunakan model IndoBERT (indobenchmark/indobert-base-p1) dengan pendekatan Extractive Text Summarization.

Tujuan Penelitian

  1. Mengimplementasikan IndoBERT untuk peringkasan otomatis artikel Ormas Islam
  2. Merancang antarmuka pengguna berbasis Streamlit
  3. Menganalisis hasil peringkasan menggunakan metrik ROUGE

๐Ÿ—๏ธ Struktur Proyek

d:\Joki\
โ”œโ”€โ”€ ๐Ÿ prepare_data.py              โ† Siapkan data (pickle)
โ”œโ”€โ”€ ๐Ÿงฎ precompute_embeddings.py     โ† Pre-komputasi embedding IndoBERT
โ”œโ”€โ”€ โšก train_light.py               โ† Training head-only (CPU-friendly)
โ”œโ”€โ”€ ๐Ÿš€ local_demo_train.py          โ† Demo training lokal cepat
โ”œโ”€โ”€ ๐Ÿ““ notebooks/
โ”‚   โ””โ”€โ”€ skripsi_indobert.ipynb    โ† Notebook training (seperti Google Colab)
โ”œโ”€โ”€ ๐Ÿ src/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ preprocess.py             โ† Preprocessing & label generation
โ”‚   โ”œโ”€โ”€ dataset.py                โ† PyTorch Dataset & DataLoader
โ”‚   โ”œโ”€โ”€ model.py                  โ† Arsitektur IndoBERT Summarizer
โ”‚   โ”œโ”€โ”€ train.py                  โ† Script training
โ”‚   โ”œโ”€โ”€ evaluate.py               โ† Evaluasi ROUGE
โ”‚   โ””โ”€โ”€ summarize.py              โ† Inferensi & pipeline
โ”œโ”€โ”€ ๐ŸŒ app/
โ”‚   โ”œโ”€โ”€ streamlit_app.py          โ† Dashboard UI Streamlit
โ”‚   โ””โ”€โ”€ utils.py                  โ† Utilitas UI
โ”œโ”€โ”€ ๐Ÿ“Š data/
โ”‚   โ”œโ”€โ”€ processed/                โ† Data terproses (otomatis dibuat)
โ”‚   โ”œโ”€โ”€ embeddings/               โ† Cache embedding (otomatis dibuat)
โ”‚   โ””โ”€โ”€ raw/                      โ† Data mentah
โ”œโ”€โ”€ ๐Ÿค– models/
โ”‚   โ””โ”€โ”€ indobert_summarizer/      โ† Model terlatih (otomatis dibuat)
โ”œโ”€โ”€ ๐Ÿ“ˆ results/                   โ† Grafik & laporan evaluasi
โ”œโ”€โ”€ ๐Ÿ“‹ logs/                      โ† Log training
โ”œโ”€โ”€ ormas_liputan6.csv            โ† Dataset utama Ormas Islam
โ”œโ”€โ”€ indosum/                      โ† Dataset IndoSum (JSONL)
โ”œโ”€โ”€ liputan6_data/                โ† Dataset Liputan6 (JSON)
โ”œโ”€โ”€ requirements.txt
โ””โ”€โ”€ setup_env.bat                 โ† Script setup Windows

โšก Quick Start

1. Setup Lingkungan

# Clone atau buka folder proyek di VS Code
# Kemudian jalankan setup otomatis:
setup_env.bat

Atau manual:

# Buat virtual environment
python -m venv venv
venv\Scripts\activate

# Install dependensi
pip install -r requirements.txt

# Register kernel Jupyter
python -m ipykernel install --user --name=indobert_skripsi --display-name "Python (IndoBERT Skripsi)"

2. Training (Cara 1: Notebook โ€” Disarankan)

  1. Buka VS Code
  2. Buka file notebooks/skripsi_indobert.ipynb
  3. Pilih kernel: Python (IndoBERT Skripsi)
  4. Jalankan sel satu per satu dengan Shift+Enter

3. Training (Cara 2: Command Line)

# Aktifkan environment
venv\Scripts\activate

# Step 1: Siapkan data IndoSum (cepat)
python prepare_data.py --mode fast

# Step 2A (disarankan di CPU): training demo cepat (~35 menit)
python local_demo_train.py

# atau Step 2B: training head-only dengan embedding cache
python precompute_embeddings.py --dataset indosum
python train_light.py --dataset indosum --epochs 5

# Step 2C (untuk GPU): training end-to-end
python src/train.py --dataset combined --epochs1 5 --epochs2 3 --batch_size 4

# Step 3: Evaluasi
python src/evaluate.py

4. Jalankan Streamlit App

# Aktifkan environment dulu
venv\Scripts\activate

# Jalankan dashboard
streamlit run app/streamlit_app.py

Buka browser di: http://localhost:8501


๐Ÿค– Arsitektur Model

Artikel Teks
    โ†“
Split Kalimat โ†’ [K1] [K2] [K3] ... [Kn]
    โ†“               โ†“      โ†“           โ†“
             IndoBERT (shared weights)
                   (indobert-base-p1)
    โ†“               โ†“      โ†“           โ†“
             Mean Pooling [CLS token]
    โ†“
Positional Encoding (sinusoidal)
    โ†“
Inter-Sentence Transformer (2 layer, 8 head)
    โ†“
Linear Classifier โ†’ Sigmoid
    โ†“
Skor Relevansi: [0.8, 0.2, 0.9, 0.1, ...]
    โ†“
Top-K Selection (misal: 30% kalimat)
    โ†“
Ringkasan Ekstraktif

Parameter Model

KomponenDetail
Base Modelindobenchmark/indobert-base-p1
Hidden Size768
Max Token/Kalimat128
Max Kalimat/Dokumen40
Inter-Sent Layers2
Attention Heads8
Total Parameter~111M
Parameter Dilatih (Tahap 1)~5M

๐Ÿ“Š Dataset

DatasetJumlahFormatKeterangan
Ormas Liputan635.065CSVArtikel Ormas Islam dari Liputan6.com
IndoSum93.860JSONLTrain 71.345, Val 3.743, Test 18.772
Liputan6 Canonical~50.000+JSONArtikel berita umum

Format Data Ormas CSV

content,date,summary,title,url
"Teks artikel...", "2025-01-01", "Teks ringkasan...", "Judul", "URL"

Format IndoSum JSONL

{
  "id": "...",
  "paragraphs": [[[token, ...], [token, ...]], ...],
  "gold_labels": [[false, true], [true, false], ...]
}

๐Ÿ‹๏ธ Training

Strategi 2 Tahap

Tahap 1 (5 epoch): BERT dibekukan โ†’ Latih Inter-Sentence Transformer + Classifier

  • Learning Rate: 5e-4
  • Grad Accumulation: 4 (efektif batch = 16)
  • Loss: Weighted BCE (pos_weight=3.0)

Tahap 2 (3 epoch): BERT dicairkan โ†’ Fine-tune end-to-end

  • BERT LR: 1e-5 (lebih kecil untuk stabilitas)
  • Head LR: 2e-5
  • Scheduler: Cosine decay dengan warmup

Konfigurasi Default

config = {
    'bert_model_name': 'indobenchmark/indobert-base-p1',
    'batch_size': 4,
    'grad_accumulation': 4,
    'num_epochs_stage1': 5,
    'num_epochs_stage2': 3,
    'max_sent_len': 128,
    'max_sentences': 40,
    'pos_weight': 3.0,  # Class imbalance weight
}

๐Ÿ“ˆ Evaluasi

Metrik

MetrikDeskripsi
ROUGE-1Unigram overlap antara ringkasan & referensi
ROUGE-2Bigram overlap
ROUGE-LLongest Common Subsequence
F1F1 score klasifikasi kalimat

Output Evaluasi

ROUGE-1 F1: 0.XXXX
ROUGE-2 F1: 0.XXXX
ROUGE-L F1: 0.XXXX
Accuracy  : 0.XXXX
Precision : 0.XXXX
Recall    : 0.XXXX
F1        : 0.XXXX

๐ŸŒ Streamlit Dashboard

Fitur dashboard:

  • โœ… Input teks artikel langsung atau upload file
  • โœ… Pengaturan rasio ringkasan (10%-70%)
  • โœ… Highlight kalimat terpilih dengan skor
  • โœ… Bar chart skor relevansi per kalimat
  • โœ… Statistik: kompresi ratio, jumlah kata, dll.
  • โœ… Evaluasi ROUGE jika ada referensi
  • โœ… Download ringkasan sebagai .txt
  • โœ… Mode fallback TF-IDF (sebelum model dilatih)
  • โœ… Halaman "Tentang Penelitian"

๐Ÿ”ง Troubleshooting

Error: CUDA out of memory

# Kurangi batch size
python src/train.py --batch_size 2
# Atau kurangi max_sentences di konfigurasi

Error: Model tidak ditemukan di Streamlit

Pastikan training sudah selesai. Model disimpan di salah satu file:
models/indobert_summarizer/head_best.pt
models/indobert_summarizer/model_best.pt

Jika belum training, app akan menggunakan TF-IDF sebagai fallback.

Training sangat lambat di CPU

Full fine-tuning IndoBERT membutuhkan GPU untuk kecepatan optimal.
Tanpa GPU (CPU saja), gunakan pipeline head-only agar lebih realistis.

Alternatif:
1. Gunakan Google Colab (GPU gratis)
2. Gunakan demo lokal: python local_demo_train.py
3. Gunakan train_light.py + precompute_embeddings.py

Download model gagal

# Pastikan koneksi internet
# Atau download manual dan simpan ke models/indobert_summarizer/
pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download('indobenchmark/indobert-base-p1')"

๐Ÿ“š Referensi

  1. Liu, Y. & Lapata, M. (2019). Text Summarization with Pretrained Encoders. EMNLP 2019. arXiv:1908.08345

  2. Wilie, B. et al. (2020). IndoNLU: Benchmark and Resources for Evaluating Indonesian Natural Language Understanding. AACL-IJCNLP 2020.

  3. Kurniawan, K. & Louvan, S. (2018). IndoSum: A New Benchmark Dataset for the Indonesian Automatic Text Summarization Task. IALP 2018.

  4. Devlin, J. et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL 2019.

  5. Lin, C.Y. (2004). ROUGE: A Package for Automatic Evaluation of Summaries. ACL 2004.


๐ŸŽ“ Informasi Skripsi

Judul: Peringkasan Otomatis Artikel Tentang Ormas Islam di Media Online Menggunakan Algoritma IndoBERT

Metode:

  • Natural Language Processing (NLP)
  • Automatic Text Summarization (ATS)
  • BERT & IndoBERT (Bidirectional Encoder Representations from Transformers)

Tools:

  • Python 3.9+ ยท PyTorch ยท HuggingFace Transformers ยท Streamlit ยท VS Code

ATS-islamic-organization-news

Contributors

Yaosanz

8 commits

Yaosanz/ATS-islamic-organization-news

1

stars

8

commits

Python

primary language

Jul 10, 2026

updated

README

๐Ÿ“œ Peringkasan Otomatis Artikel Ormas Islam

Menggunakan Algoritma IndoBERT

Skripsi โ€” Natural Language Processing ยท Automatic Text Summarization ยท IndoBERT


๐Ÿ“‹ Deskripsi

Sistem peringkasan otomatis artikel tentang Organisasi Kemasyarakatan (Ormas) Islam dari media online Liputan6.com menggunakan model IndoBERT (indobenchmark/indobert-base-p1) dengan pendekatan Extractive Text Summarization.

Tujuan Penelitian

  1. Mengimplementasikan IndoBERT untuk peringkasan otomatis artikel Ormas Islam
  2. Merancang antarmuka pengguna berbasis Streamlit
  3. Menganalisis hasil peringkasan menggunakan metrik ROUGE

๐Ÿ—๏ธ Struktur Proyek

d:\Joki\
โ”œโ”€โ”€ ๐Ÿ prepare_data.py              โ† Siapkan data (pickle)
โ”œโ”€โ”€ ๐Ÿงฎ precompute_embeddings.py     โ† Pre-komputasi embedding IndoBERT
โ”œโ”€โ”€ โšก train_light.py               โ† Training head-only (CPU-friendly)
โ”œโ”€โ”€ ๐Ÿš€ local_demo_train.py          โ† Demo training lokal cepat
โ”œโ”€โ”€ ๐Ÿ““ notebooks/
โ”‚   โ””โ”€โ”€ skripsi_indobert.ipynb    โ† Notebook training (seperti Google Colab)
โ”œโ”€โ”€ ๐Ÿ src/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ preprocess.py             โ† Preprocessing & label generation
โ”‚   โ”œโ”€โ”€ dataset.py                โ† PyTorch Dataset & DataLoader
โ”‚   โ”œโ”€โ”€ model.py                  โ† Arsitektur IndoBERT Summarizer
โ”‚   โ”œโ”€โ”€ train.py                  โ† Script training
โ”‚   โ”œโ”€โ”€ evaluate.py               โ† Evaluasi ROUGE
โ”‚   โ””โ”€โ”€ summarize.py              โ† Inferensi & pipeline
โ”œโ”€โ”€ ๐ŸŒ app/
โ”‚   โ”œโ”€โ”€ streamlit_app.py          โ† Dashboard UI Streamlit
โ”‚   โ””โ”€โ”€ utils.py                  โ† Utilitas UI
โ”œโ”€โ”€ ๐Ÿ“Š data/
โ”‚   โ”œโ”€โ”€ processed/                โ† Data terproses (otomatis dibuat)
โ”‚   โ”œโ”€โ”€ embeddings/               โ† Cache embedding (otomatis dibuat)
โ”‚   โ””โ”€โ”€ raw/                      โ† Data mentah
โ”œโ”€โ”€ ๐Ÿค– models/
โ”‚   โ””โ”€โ”€ indobert_summarizer/      โ† Model terlatih (otomatis dibuat)
โ”œโ”€โ”€ ๐Ÿ“ˆ results/                   โ† Grafik & laporan evaluasi
โ”œโ”€โ”€ ๐Ÿ“‹ logs/                      โ† Log training
โ”œโ”€โ”€ ormas_liputan6.csv            โ† Dataset utama Ormas Islam
โ”œโ”€โ”€ indosum/                      โ† Dataset IndoSum (JSONL)
โ”œโ”€โ”€ liputan6_data/                โ† Dataset Liputan6 (JSON)
โ”œโ”€โ”€ requirements.txt
โ””โ”€โ”€ setup_env.bat                 โ† Script setup Windows

โšก Quick Start

1. Setup Lingkungan

# Clone atau buka folder proyek di VS Code
# Kemudian jalankan setup otomatis:
setup_env.bat

Atau manual:

# Buat virtual environment
python -m venv venv
venv\Scripts\activate

# Install dependensi
pip install -r requirements.txt

# Register kernel Jupyter
python -m ipykernel install --user --name=indobert_skripsi --display-name "Python (IndoBERT Skripsi)"

2. Training (Cara 1: Notebook โ€” Disarankan)

  1. Buka VS Code
  2. Buka file notebooks/skripsi_indobert.ipynb
  3. Pilih kernel: Python (IndoBERT Skripsi)
  4. Jalankan sel satu per satu dengan Shift+Enter

3. Training (Cara 2: Command Line)

# Aktifkan environment
venv\Scripts\activate

# Step 1: Siapkan data IndoSum (cepat)
python prepare_data.py --mode fast

# Step 2A (disarankan di CPU): training demo cepat (~35 menit)
python local_demo_train.py

# atau Step 2B: training head-only dengan embedding cache
python precompute_embeddings.py --dataset indosum
python train_light.py --dataset indosum --epochs 5

# Step 2C (untuk GPU): training end-to-end
python src/train.py --dataset combined --epochs1 5 --epochs2 3 --batch_size 4

# Step 3: Evaluasi
python src/evaluate.py

4. Jalankan Streamlit App

# Aktifkan environment dulu
venv\Scripts\activate

# Jalankan dashboard
streamlit run app/streamlit_app.py

Buka browser di: http://localhost:8501


๐Ÿค– Arsitektur Model

Artikel Teks
    โ†“
Split Kalimat โ†’ [K1] [K2] [K3] ... [Kn]
    โ†“               โ†“      โ†“           โ†“
             IndoBERT (shared weights)
                   (indobert-base-p1)
    โ†“               โ†“      โ†“           โ†“
             Mean Pooling [CLS token]
    โ†“
Positional Encoding (sinusoidal)
    โ†“
Inter-Sentence Transformer (2 layer, 8 head)
    โ†“
Linear Classifier โ†’ Sigmoid
    โ†“
Skor Relevansi: [0.8, 0.2, 0.9, 0.1, ...]
    โ†“
Top-K Selection (misal: 30% kalimat)
    โ†“
Ringkasan Ekstraktif

Parameter Model

KomponenDetail
Base Modelindobenchmark/indobert-base-p1
Hidden Size768
Max Token/Kalimat128
Max Kalimat/Dokumen40
Inter-Sent Layers2
Attention Heads8
Total Parameter~111M
Parameter Dilatih (Tahap 1)~5M

๐Ÿ“Š Dataset

DatasetJumlahFormatKeterangan
Ormas Liputan635.065CSVArtikel Ormas Islam dari Liputan6.com
IndoSum93.860JSONLTrain 71.345, Val 3.743, Test 18.772
Liputan6 Canonical~50.000+JSONArtikel berita umum

Format Data Ormas CSV

content,date,summary,title,url
"Teks artikel...", "2025-01-01", "Teks ringkasan...", "Judul", "URL"

Format IndoSum JSONL

{
  "id": "...",
  "paragraphs": [[[token, ...], [token, ...]], ...],
  "gold_labels": [[false, true], [true, false], ...]
}

๐Ÿ‹๏ธ Training

Strategi 2 Tahap

Tahap 1 (5 epoch): BERT dibekukan โ†’ Latih Inter-Sentence Transformer + Classifier

  • Learning Rate: 5e-4
  • Grad Accumulation: 4 (efektif batch = 16)
  • Loss: Weighted BCE (pos_weight=3.0)

Tahap 2 (3 epoch): BERT dicairkan โ†’ Fine-tune end-to-end

  • BERT LR: 1e-5 (lebih kecil untuk stabilitas)
  • Head LR: 2e-5
  • Scheduler: Cosine decay dengan warmup

Konfigurasi Default

config = {
    'bert_model_name': 'indobenchmark/indobert-base-p1',
    'batch_size': 4,
    'grad_accumulation': 4,
    'num_epochs_stage1': 5,
    'num_epochs_stage2': 3,
    'max_sent_len': 128,
    'max_sentences': 40,
    'pos_weight': 3.0,  # Class imbalance weight
}

๐Ÿ“ˆ Evaluasi

Metrik

MetrikDeskripsi
ROUGE-1Unigram overlap antara ringkasan & referensi
ROUGE-2Bigram overlap
ROUGE-LLongest Common Subsequence
F1F1 score klasifikasi kalimat

Output Evaluasi

ROUGE-1 F1: 0.XXXX
ROUGE-2 F1: 0.XXXX
ROUGE-L F1: 0.XXXX
Accuracy  : 0.XXXX
Precision : 0.XXXX
Recall    : 0.XXXX
F1        : 0.XXXX

๐ŸŒ Streamlit Dashboard

Fitur dashboard:

  • โœ… Input teks artikel langsung atau upload file
  • โœ… Pengaturan rasio ringkasan (10%-70%)
  • โœ… Highlight kalimat terpilih dengan skor
  • โœ… Bar chart skor relevansi per kalimat
  • โœ… Statistik: kompresi ratio, jumlah kata, dll.
  • โœ… Evaluasi ROUGE jika ada referensi
  • โœ… Download ringkasan sebagai .txt
  • โœ… Mode fallback TF-IDF (sebelum model dilatih)
  • โœ… Halaman "Tentang Penelitian"

๐Ÿ”ง Troubleshooting

Error: CUDA out of memory

# Kurangi batch size
python src/train.py --batch_size 2
# Atau kurangi max_sentences di konfigurasi

Error: Model tidak ditemukan di Streamlit

Pastikan training sudah selesai. Model disimpan di salah satu file:
models/indobert_summarizer/head_best.pt
models/indobert_summarizer/model_best.pt

Jika belum training, app akan menggunakan TF-IDF sebagai fallback.

Training sangat lambat di CPU

Full fine-tuning IndoBERT membutuhkan GPU untuk kecepatan optimal.
Tanpa GPU (CPU saja), gunakan pipeline head-only agar lebih realistis.

Alternatif:
1. Gunakan Google Colab (GPU gratis)
2. Gunakan demo lokal: python local_demo_train.py
3. Gunakan train_light.py + precompute_embeddings.py

Download model gagal

# Pastikan koneksi internet
# Atau download manual dan simpan ke models/indobert_summarizer/
pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download('indobenchmark/indobert-base-p1')"

๐Ÿ“š Referensi

  1. Liu, Y. & Lapata, M. (2019). Text Summarization with Pretrained Encoders. EMNLP 2019. arXiv:1908.08345

  2. Wilie, B. et al. (2020). IndoNLU: Benchmark and Resources for Evaluating Indonesian Natural Language Understanding. AACL-IJCNLP 2020.

  3. Kurniawan, K. & Louvan, S. (2018). IndoSum: A New Benchmark Dataset for the Indonesian Automatic Text Summarization Task. IALP 2018.

  4. Devlin, J. et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL 2019.

  5. Lin, C.Y. (2004). ROUGE: A Package for Automatic Evaluation of Summaries. ACL 2004.


๐ŸŽ“ Informasi Skripsi

Judul: Peringkasan Otomatis Artikel Tentang Ormas Islam di Media Online Menggunakan Algoritma IndoBERT

Metode:

  • Natural Language Processing (NLP)
  • Automatic Text Summarization (ATS)
  • BERT & IndoBERT (Bidirectional Encoder Representations from Transformers)

Tools:

  • Python 3.9+ ยท PyTorch ยท HuggingFace Transformers ยท Streamlit ยท VS Code

ATS-islamic-organization-news

Contributors

Yaosanz

8 commits

Languages

Python

77.3%

Jupyter Notebook

22.2%