Skripsi โ Natural Language Processing ยท Automatic Text Summarization ยท IndoBERT
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.
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
# 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)"
notebooks/skripsi_indobert.ipynb# 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
# Aktifkan environment dulu
venv\Scripts\activate
# Jalankan dashboard
streamlit run app/streamlit_app.py
Buka browser di: http://localhost:8501
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
| Komponen | Detail |
|---|---|
| Base Model | indobenchmark/indobert-base-p1 |
| Hidden Size | 768 |
| Max Token/Kalimat | 128 |
| Max Kalimat/Dokumen | 40 |
| Inter-Sent Layers | 2 |
| Attention Heads | 8 |
| Total Parameter | ~111M |
| Parameter Dilatih (Tahap 1) | ~5M |
| Dataset | Jumlah | Format | Keterangan |
|---|---|---|---|
| Ormas Liputan6 | 35.065 | CSV | Artikel Ormas Islam dari Liputan6.com |
| IndoSum | 93.860 | JSONL | Train 71.345, Val 3.743, Test 18.772 |
| Liputan6 Canonical | ~50.000+ | JSON | Artikel berita umum |
content,date,summary,title,url
"Teks artikel...", "2025-01-01", "Teks ringkasan...", "Judul", "URL"
{
"id": "...",
"paragraphs": [[[token, ...], [token, ...]], ...],
"gold_labels": [[false, true], [true, false], ...]
}
Tahap 1 (5 epoch): BERT dibekukan โ Latih Inter-Sentence Transformer + Classifier
Tahap 2 (3 epoch): BERT dicairkan โ Fine-tune end-to-end
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
}
| Metrik | Deskripsi |
|---|---|
| ROUGE-1 | Unigram overlap antara ringkasan & referensi |
| ROUGE-2 | Bigram overlap |
| ROUGE-L | Longest Common Subsequence |
| F1 | F1 score klasifikasi kalimat |
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
Fitur dashboard:
# Kurangi batch size
python src/train.py --batch_size 2
# Atau kurangi max_sentences di konfigurasi
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.
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
# 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')"
Liu, Y. & Lapata, M. (2019). Text Summarization with Pretrained Encoders. EMNLP 2019. arXiv:1908.08345
Wilie, B. et al. (2020). IndoNLU: Benchmark and Resources for Evaluating Indonesian Natural Language Understanding. AACL-IJCNLP 2020.
Kurniawan, K. & Louvan, S. (2018). IndoSum: A New Benchmark Dataset for the Indonesian Automatic Text Summarization Task. IALP 2018.
Devlin, J. et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL 2019.
Lin, C.Y. (2004). ROUGE: A Package for Automatic Evaluation of Summaries. ACL 2004.
Judul: Peringkasan Otomatis Artikel Tentang Ormas Islam di Media Online Menggunakan Algoritma IndoBERT
Metode:
Tools:
8 commits
Python
77.3%
Jupyter Notebook
22.2%
Skripsi โ Natural Language Processing ยท Automatic Text Summarization ยท IndoBERT
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.
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
# 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)"
notebooks/skripsi_indobert.ipynb# 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
# Aktifkan environment dulu
venv\Scripts\activate
# Jalankan dashboard
streamlit run app/streamlit_app.py
Buka browser di: http://localhost:8501
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
| Komponen | Detail |
|---|---|
| Base Model | indobenchmark/indobert-base-p1 |
| Hidden Size | 768 |
| Max Token/Kalimat | 128 |
| Max Kalimat/Dokumen | 40 |
| Inter-Sent Layers | 2 |
| Attention Heads | 8 |
| Total Parameter | ~111M |
| Parameter Dilatih (Tahap 1) | ~5M |
| Dataset | Jumlah | Format | Keterangan |
|---|---|---|---|
| Ormas Liputan6 | 35.065 | CSV | Artikel Ormas Islam dari Liputan6.com |
| IndoSum | 93.860 | JSONL | Train 71.345, Val 3.743, Test 18.772 |
| Liputan6 Canonical | ~50.000+ | JSON | Artikel berita umum |
content,date,summary,title,url
"Teks artikel...", "2025-01-01", "Teks ringkasan...", "Judul", "URL"
{
"id": "...",
"paragraphs": [[[token, ...], [token, ...]], ...],
"gold_labels": [[false, true], [true, false], ...]
}
Tahap 1 (5 epoch): BERT dibekukan โ Latih Inter-Sentence Transformer + Classifier
Tahap 2 (3 epoch): BERT dicairkan โ Fine-tune end-to-end
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
}
| Metrik | Deskripsi |
|---|---|
| ROUGE-1 | Unigram overlap antara ringkasan & referensi |
| ROUGE-2 | Bigram overlap |
| ROUGE-L | Longest Common Subsequence |
| F1 | F1 score klasifikasi kalimat |
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
Fitur dashboard:
# Kurangi batch size
python src/train.py --batch_size 2
# Atau kurangi max_sentences di konfigurasi
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.
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
# 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')"
Liu, Y. & Lapata, M. (2019). Text Summarization with Pretrained Encoders. EMNLP 2019. arXiv:1908.08345
Wilie, B. et al. (2020). IndoNLU: Benchmark and Resources for Evaluating Indonesian Natural Language Understanding. AACL-IJCNLP 2020.
Kurniawan, K. & Louvan, S. (2018). IndoSum: A New Benchmark Dataset for the Indonesian Automatic Text Summarization Task. IALP 2018.
Devlin, J. et al. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL 2019.
Lin, C.Y. (2004). ROUGE: A Package for Automatic Evaluation of Summaries. ACL 2004.
Judul: Peringkasan Otomatis Artikel Tentang Ormas Islam di Media Online Menggunakan Algoritma IndoBERT
Metode:
Tools:
8 commits
Python
77.3%
Jupyter Notebook
22.2%