Buzzy2045 commited on
Commit
541fa1f
·
0 Parent(s):
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +4 -0
  2. .gitignore +16 -0
  3. README.md +151 -0
  4. app.py +183 -0
  5. artifacts/classical/fold_metrics.csv +101 -0
  6. artifacts/classical/keyword_counts.csv +25 -0
  7. artifacts/classical/oof_tfidf_extra_trees.csv +0 -0
  8. artifacts/classical/oof_tfidf_gradient_boosting.csv +0 -0
  9. artifacts/classical/oof_tfidf_linear_svm.csv +0 -0
  10. artifacts/classical/oof_tfidf_logistic_regression.csv +0 -0
  11. artifacts/classical/oof_tfidf_random_forest.csv +0 -0
  12. artifacts/classical/oof_word2vec_extra_trees.csv +0 -0
  13. artifacts/classical/oof_word2vec_gradient_boosting.csv +0 -0
  14. artifacts/classical/oof_word2vec_linear_svm.csv +0 -0
  15. artifacts/classical/oof_word2vec_logistic_regression.csv +0 -0
  16. artifacts/classical/oof_word2vec_random_forest.csv +0 -0
  17. artifacts/classical/report_tfidf_extra_trees.json +27 -0
  18. artifacts/classical/report_tfidf_gradient_boosting.json +27 -0
  19. artifacts/classical/report_tfidf_linear_svm.json +27 -0
  20. artifacts/classical/report_tfidf_logistic_regression.json +27 -0
  21. artifacts/classical/report_tfidf_random_forest.json +27 -0
  22. artifacts/classical/report_word2vec_extra_trees.json +27 -0
  23. artifacts/classical/report_word2vec_gradient_boosting.json +27 -0
  24. artifacts/classical/report_word2vec_linear_svm.json +27 -0
  25. artifacts/classical/report_word2vec_logistic_regression.json +27 -0
  26. artifacts/classical/report_word2vec_random_forest.json +27 -0
  27. artifacts/classical/results.csv +11 -0
  28. artifacts/classical/top_words_tfidf.csv +121 -0
  29. artifacts/figures/classical_best_confusion_matrix.png +3 -0
  30. artifacts/figures/classical_best_roc_auc.png +3 -0
  31. artifacts/figures/confusion_matrix_ChristopherA08__IndoELECTRA.png +3 -0
  32. artifacts/figures/confusion_matrix_cahya__distilbert-base-indonesian.png +3 -0
  33. artifacts/figures/confusion_matrix_flax-community__indonesian-roberta-base.png +3 -0
  34. artifacts/figures/confusion_matrix_indobenchmark__indobert-base-p1.png +3 -0
  35. artifacts/figures/confusion_matrix_indobenchmark__indobert-base-p2.png +3 -0
  36. artifacts/figures/confusion_matrix_indolem__indobert-base-uncased.png +3 -0
  37. artifacts/figures/confusion_matrix_indolem__indobertweet-base-uncased.png +3 -0
  38. artifacts/figures/confusion_matrix_naufalihsan__indonesian-sbert-large.png +3 -0
  39. artifacts/figures/confusion_matrix_sentence-transformers__paraphrase-multilingual-MiniLM-L12-v2.png +3 -0
  40. artifacts/figures/confusion_matrix_w11wo__indonesian-roberta-base-sentiment-classifier.png +3 -0
  41. artifacts/figures/roc_auc_ChristopherA08__IndoELECTRA.png +3 -0
  42. artifacts/figures/roc_auc_cahya__distilbert-base-indonesian.png +3 -0
  43. artifacts/figures/roc_auc_flax-community__indonesian-roberta-base.png +3 -0
  44. artifacts/figures/roc_auc_indobenchmark__indobert-base-p1.png +3 -0
  45. artifacts/figures/roc_auc_indobenchmark__indobert-base-p2.png +3 -0
  46. artifacts/figures/roc_auc_indolem__indobert-base-uncased.png +3 -0
  47. artifacts/figures/roc_auc_indolem__indobertweet-base-uncased.png +3 -0
  48. artifacts/figures/roc_auc_naufalihsan__indonesian-sbert-large.png +3 -0
  49. artifacts/figures/roc_auc_sentence-transformers__paraphrase-multilingual-MiniLM-L12-v2.png +3 -0
  50. artifacts/figures/roc_auc_w11wo__indonesian-roberta-base-sentiment-classifier.png +3 -0
.gitattributes ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ *.bin filter=lfs diff=lfs merge=lfs -text
2
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
3
+ models/** filter=lfs diff=lfs merge=lfs -text
4
+ *.png filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .cache/
2
+ __pycache__/
3
+ *.pyc
4
+ .pytest_cache/
5
+ .mypy_cache/
6
+ .venv/
7
+ venv/
8
+ env/
9
+
10
+ # Training checkpoints (regenerable; large)
11
+ artifacts/transformers/*/checkpoints/
12
+ models/transformers/*/checkpoints/
13
+
14
+ # Per-candidate transformer weights are regenerable.
15
+ # Keep only models/best_transformer tracked with Git LFS.
16
+ models/transformers/*/model/model.safetensors
README.md ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Matcha Sentiment
3
+ emoji: 🍵
4
+ colorFrom: green
5
+ colorTo: yellow
6
+ sdk: gradio
7
+ sdk_version: 5.0.1
8
+ app_file: app.py
9
+ python_version: "3.12"
10
+ pinned: false
11
+ license: mit
12
+ ---
13
+
14
+ # Matcha Sentiment
15
+
16
+ Sentiment analysis bahasa Indonesia untuk review Matchaya/IKUYO. Dataset dibersihkan menjadi klasifikasi biner `Negatif` dan `Positif`, lalu dibandingkan dengan baseline machine learning klasik dan fine-tuning 9 model Transformer Indonesia.
17
+
18
+ ![Dashboard](docs/images/dashboard_home_wide.png)
19
+
20
+ ## Ringkasan
21
+
22
+ | Area | Hasil |
23
+ | --- | --- |
24
+ | Dataset final | 2028 review |
25
+ | Label | 1014 `Negatif`, 1014 `Positif` |
26
+ | Label dihapus | 14 `Netral` |
27
+ | Duplikat dibuang | 219 teks |
28
+ | Best classical | `TF-IDF + Linear SVM` |
29
+ | Best Transformer | `indolem/indobert-base-uncased` |
30
+ | Runtime | Docker + NVIDIA GPU |
31
+ | Dashboard | Gradio, siap Hugging Face Spaces |
32
+
33
+ > Catatan push: model Transformer terbaik disimpan di `models/best_transformer` dan ditrack lewat Git LFS. Weight kandidat di `models/transformers/*/model/model.safetensors` di-ignore karena bisa dibuat ulang dari pipeline training.
34
+
35
+ ## Hasil Utama
36
+
37
+ ### Transformer
38
+
39
+ | Model | Accuracy | Precision | Recall | F1 | ROC AUC |
40
+ | --- | ---: | ---: | ---: | ---: | ---: |
41
+ | `indolem/indobert-base-uncased` | 0.9951 | 0.9902 | 1.0000 | 0.9951 | 0.9998 |
42
+ | `naufalihsan/indonesian-sbert-large` | 0.9901 | 0.9806 | 1.0000 | 0.9902 | 0.9998 |
43
+ | `flax-community/indonesian-roberta-base` | 0.9901 | 0.9806 | 1.0000 | 0.9902 | 0.9997 |
44
+ | `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2` | 0.9901 | 0.9806 | 1.0000 | 0.9902 | 0.9996 |
45
+ | `indobenchmark/indobert-base-p1` | 0.9901 | 0.9806 | 1.0000 | 0.9902 | 0.9989 |
46
+ | `ChristopherA08/IndoELECTRA` | 0.9901 | 0.9806 | 1.0000 | 0.9902 | 0.9989 |
47
+ | `cahya/distilbert-base-indonesian` | 0.9901 | 0.9901 | 0.9901 | 0.9901 | 0.9998 |
48
+ | `indolem/indobertweet-base-uncased` | 0.9852 | 0.9804 | 0.9901 | 0.9852 | 0.9994 |
49
+ | `w11wo/indonesian-roberta-base-sentiment-classifier` | 0.9803 | 0.9619 | 1.0000 | 0.9806 | 1.0000 |
50
+
51
+ Model terbaik sudah disimpan di:
52
+
53
+ ```text
54
+ models/best_transformer
55
+ ```
56
+
57
+ ### Machine Learning Klasik
58
+
59
+ TF-IDF dan Word2Vec diuji dengan Stratified 10-fold cross validation. Hasil lengkap:
60
+
61
+ | Feature | Model | Accuracy | Precision | Recall | F1 | ROC AUC |
62
+ | --- | --- | ---: | ---: | ---: | ---: | ---: |
63
+ | TF-IDF | Linear SVM | 0.9684 | 0.9788 | 0.9576 | 0.9681 | 0.9951 |
64
+ | Word2Vec | Logistic Regression | 0.9635 | 0.9663 | 0.9606 | 0.9634 | 0.9939 |
65
+ | Word2Vec | Extra Trees | 0.9625 | 0.9653 | 0.9596 | 0.9624 | 0.9940 |
66
+ | TF-IDF | Logistic Regression | 0.9610 | 0.9756 | 0.9458 | 0.9604 | 0.9933 |
67
+ | Word2Vec | Linear SVM | 0.9596 | 0.9660 | 0.9527 | 0.9593 | 0.9924 |
68
+ | Word2Vec | Random Forest | 0.9591 | 0.9632 | 0.9546 | 0.9589 | 0.9927 |
69
+ | Word2Vec | Gradient Boosting | 0.9571 | 0.9603 | 0.9536 | 0.9570 | 0.9933 |
70
+ | TF-IDF | Extra Trees | 0.9522 | 0.9580 | 0.9458 | 0.9519 | 0.9918 |
71
+ | TF-IDF | Random Forest | 0.9443 | 0.9353 | 0.9546 | 0.9449 | 0.9882 |
72
+ | TF-IDF | Gradient Boosting | 0.9147 | 0.9304 | 0.8964 | 0.9131 | 0.9735 |
73
+
74
+ ## Visual Evaluasi
75
+
76
+ ![Results Gallery](docs/images/results_gallery.png)
77
+
78
+ ### Dashboard
79
+
80
+ | Prediksi | Visual | Kata Kunci |
81
+ | --- | --- | --- |
82
+ | ![Dashboard Home](docs/images/dashboard_home_wide.png) | ![Dashboard Visual](docs/images/dashboard_visual_tab.png) | ![Dashboard Keywords](docs/images/dashboard_keywords_tab.png) |
83
+
84
+ ### Detail Plot
85
+
86
+ | Training Loss | Confusion Matrix | ROC AUC |
87
+ | --- | --- | --- |
88
+ | ![Training Loss](docs/images/transformer_best_training_loss.png) | ![Confusion Matrix](docs/images/transformer_best_confusion_matrix.png) | ![ROC AUC](docs/images/transformer_best_roc_auc.png) |
89
+
90
+ | Top Words | Word Cloud Positif | Word Cloud Negatif |
91
+ | --- | --- | --- |
92
+ | ![Top Words](docs/images/top_words_tfidf.png) | ![Word Cloud Positif](docs/images/wordcloud_positif.png) | ![Word Cloud Negatif](docs/images/wordcloud_negatif.png) |
93
+
94
+ ## Kata Kunci Bermakna
95
+
96
+ Beberapa kata yang paling membantu membaca arah sentimen:
97
+
98
+ | Kata | Positif Docs | Negatif Docs | Dominan |
99
+ | --- | ---: | ---: | --- |
100
+ | `enak` | 173 | 10 | Positif |
101
+ | `nyaman` | 54 | 10 | Positif |
102
+ | `ramah` | 37 | 9 | Positif |
103
+ | `terbaik` | 18 | 0 | Positif |
104
+ | `mahal` | 10 | 24 | Negatif |
105
+ | `harga` | 10 | 28 | Negatif |
106
+ | `buruk` | 0 | 19 | Negatif |
107
+ | `antrean` | 0 | 19 | Negatif |
108
+ | `lama` | 1 | 16 | Negatif |
109
+
110
+ File lengkapnya ada di:
111
+
112
+ ```text
113
+ artifacts/classical/keyword_counts.csv
114
+ ```
115
+
116
+ ## Struktur Proyek
117
+
118
+ ```text
119
+ .
120
+ ├── app.py
121
+ ├── Dockerfile
122
+ ├── docker-compose.yml
123
+ ├── INSTALL_DOCKER.md
124
+ ├── data/processed/matcha_sentiment_binary.csv
125
+ ├── docs/images/
126
+ ├── artifacts/
127
+ ├── models/best_transformer/
128
+ ├── models/classical/best_model.joblib
129
+ ├── scripts/
130
+ └── src/matcha_sentiment/
131
+ ```
132
+
133
+ ## Quick Start
134
+
135
+ ```bash
136
+ docker build -t matcha-sentiment .
137
+ docker run --rm --gpus all -p 7860:7860 -v "${PWD}:/workspace" matcha-sentiment
138
+ ```
139
+
140
+ Buka:
141
+
142
+ ```text
143
+ http://localhost:7860
144
+ ```
145
+
146
+ Panduan dari nol sampai deploy ada di [INSTALL_DOCKER.md](INSTALL_DOCKER.md).
147
+
148
+ ## Catatan
149
+
150
+ Skor evaluasi sangat tinggi karena dataset masih kecil dan domainnya sempit. Model ini sudah bagus untuk demo, dashboard, dan eksperimen sentiment analysis review matcha, tetapi untuk production lintas brand atau lintas kategori sebaiknya ditambah data baru yang lebih beragam.
151
+ # matchaSentiment
app.py ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import os
5
+ import sys
6
+ from pathlib import Path
7
+
8
+ import gradio as gr
9
+ import joblib
10
+ import numpy as np
11
+ import pandas as pd
12
+ import torch
13
+ from transformers import AutoModelForSequenceClassification, AutoTokenizer
14
+
15
+ sys.path.append(str(Path(__file__).resolve().parent / "src"))
16
+
17
+ from matcha_sentiment.config import ARTIFACT_DIR, ID2LABEL, MODEL_DIR
18
+ from matcha_sentiment.text import normalize_text
19
+
20
+
21
+ ROOT = Path(__file__).resolve().parent
22
+ FIG_DIR = ARTIFACT_DIR / "figures"
23
+ TRANSFORMER_MODEL_PATH = Path(os.getenv("MODEL_DIR", MODEL_DIR / "best_transformer"))
24
+ CLASSICAL_MODEL_PATH = Path(os.getenv("CLASSICAL_MODEL_PATH", MODEL_DIR / "classical" / "best_model.joblib"))
25
+ MODEL_ID = os.getenv("MODEL_ID", "")
26
+
27
+
28
+ class Predictor:
29
+ def __init__(self):
30
+ self.kind = "none"
31
+ self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
32
+ self.tokenizer = None
33
+ self.model = None
34
+ self.classical = None
35
+ self.load()
36
+
37
+ def load(self) -> None:
38
+ model_source = None
39
+ if (TRANSFORMER_MODEL_PATH / "config.json").exists():
40
+ model_source = str(TRANSFORMER_MODEL_PATH)
41
+ elif MODEL_ID:
42
+ model_source = MODEL_ID
43
+
44
+ if model_source:
45
+ self.tokenizer = AutoTokenizer.from_pretrained(model_source)
46
+ self.model = AutoModelForSequenceClassification.from_pretrained(model_source)
47
+ self.model.to(self.device)
48
+ self.model.eval()
49
+ self.kind = "transformer"
50
+ return
51
+
52
+ if CLASSICAL_MODEL_PATH.exists():
53
+ self.classical = joblib.load(CLASSICAL_MODEL_PATH)
54
+ self.kind = "classical"
55
+
56
+ def predict(self, text: str) -> tuple[dict[str, float] | None, str]:
57
+ text = normalize_text(text)
58
+ if not text:
59
+ return None, "Masukkan teks review."
60
+
61
+ if self.kind == "transformer":
62
+ encoded = self.tokenizer(
63
+ text,
64
+ truncation=True,
65
+ padding=True,
66
+ max_length=160,
67
+ return_tensors="pt",
68
+ )
69
+ encoded = {key: value.to(self.device) for key, value in encoded.items()}
70
+ with torch.no_grad():
71
+ logits = self.model(**encoded).logits
72
+ probs = torch.softmax(logits, dim=-1).detach().cpu().numpy()[0]
73
+ scores = {ID2LABEL[idx]: float(probs[idx]) for idx in range(len(probs))}
74
+ label = ID2LABEL[int(np.argmax(probs))]
75
+ return scores, f"{label} - {self.kind} on {self.device.type}"
76
+
77
+ if self.kind == "classical":
78
+ pred = int(self.classical.predict([text])[0])
79
+ if hasattr(self.classical, "predict_proba"):
80
+ proba = self.classical.predict_proba([text])
81
+ if proba is not None:
82
+ probs = proba[0]
83
+ return {ID2LABEL[idx]: float(probs[idx]) for idx in range(len(probs))}, f"{ID2LABEL[pred]} - classical"
84
+ if hasattr(self.classical, "decision_function"):
85
+ score = self.classical.decision_function([text])
86
+ if score is not None:
87
+ p_pos = 1.0 / (1.0 + np.exp(-float(np.ravel(score)[0])))
88
+ return {"Negatif": 1.0 - p_pos, "Positif": p_pos}, f"{ID2LABEL[pred]} - classical"
89
+ return {ID2LABEL[pred]: 1.0}, f"{ID2LABEL[pred]} - classical"
90
+
91
+ return None, "Model belum tersedia."
92
+
93
+
94
+ predictor = Predictor()
95
+
96
+
97
+ def predict_review(text: str):
98
+ return predictor.predict(text)
99
+
100
+
101
+ def read_json(path: Path) -> dict:
102
+ if not path.exists():
103
+ return {}
104
+ return json.loads(path.read_text(encoding="utf-8"))
105
+
106
+
107
+ def read_csv(path: Path) -> pd.DataFrame:
108
+ if not path.exists():
109
+ return pd.DataFrame()
110
+ return pd.read_csv(path)
111
+
112
+
113
+ def image_value(name: str):
114
+ path = FIG_DIR / name
115
+ return str(path) if path.exists() else None
116
+
117
+
118
+ summary = read_json(ROOT / "data" / "processed" / "summary.json")
119
+ classical_results = read_csv(ARTIFACT_DIR / "classical" / "results.csv")
120
+ transformer_results = read_csv(ARTIFACT_DIR / "transformers" / "results.csv")
121
+ top_words = read_csv(ARTIFACT_DIR / "classical" / "top_words_tfidf.csv")
122
+ keyword_counts = read_csv(ARTIFACT_DIR / "classical" / "keyword_counts.csv")
123
+
124
+
125
+ css = """
126
+ .metric-card textarea { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
127
+ .gradio-container { max-width: 1180px !important; }
128
+ """
129
+
130
+
131
+ with gr.Blocks(title="Matcha Sentiment", css=css) as demo:
132
+ gr.Markdown("# Matcha Sentiment")
133
+
134
+ with gr.Tab("Prediksi"):
135
+ with gr.Row():
136
+ review = gr.Textbox(
137
+ label="Review",
138
+ lines=7,
139
+ value="Matchanya enak, tempatnya nyaman, tapi harganya agak mahal.",
140
+ )
141
+ with gr.Column():
142
+ output_label = gr.Label(label="Sentimen")
143
+ output_text = gr.Textbox(label="Model", interactive=False)
144
+ submit = gr.Button("Analisis", variant="primary")
145
+ submit.click(predict_review, inputs=review, outputs=[output_label, output_text])
146
+ gr.Examples(
147
+ examples=[
148
+ ["Matchanya enak dan pelayanannya ramah."],
149
+ ["Harganya terlalu mahal dan rasanya biasa saja."],
150
+ ["Tempat nyaman, tetapi antrean lama dan staf kurang ramah."],
151
+ ],
152
+ inputs=review,
153
+ )
154
+
155
+ with gr.Tab("Metrik"):
156
+ with gr.Row():
157
+ gr.JSON(value=summary, label="Dataset")
158
+ with gr.Row():
159
+ gr.Dataframe(value=classical_results, label="TF-IDF dan Word2Vec 10-fold", interactive=False)
160
+ with gr.Row():
161
+ gr.Dataframe(value=transformer_results, label="Transformer", interactive=False)
162
+
163
+ with gr.Tab("Visual"):
164
+ with gr.Row():
165
+ gr.Image(value=image_value("transformer_best_training_loss.png"), label="Training loss")
166
+ gr.Image(value=image_value("transformer_best_confusion_matrix.png"), label="Confusion matrix transformer")
167
+ with gr.Row():
168
+ gr.Image(value=image_value("transformer_best_roc_auc.png"), label="ROC AUC transformer")
169
+ gr.Image(value=image_value("classical_best_confusion_matrix.png"), label="Confusion matrix klasik")
170
+ with gr.Row():
171
+ gr.Image(value=image_value("classical_best_roc_auc.png"), label="ROC AUC klasik")
172
+ gr.Image(value=image_value("top_words_tfidf.png"), label="Top words")
173
+ with gr.Row():
174
+ gr.Image(value=image_value("wordcloud_positif.png"), label="Word cloud positif")
175
+ gr.Image(value=image_value("wordcloud_negatif.png"), label="Word cloud negatif")
176
+
177
+ with gr.Tab("Kata Kunci"):
178
+ gr.Dataframe(value=top_words, label="Top words TF-IDF", interactive=False)
179
+ gr.Dataframe(value=keyword_counts, label="Keyword penting", interactive=False)
180
+
181
+
182
+ if __name__ == "__main__":
183
+ demo.launch(server_name="0.0.0.0", server_port=int(os.getenv("PORT", "7860")))
artifacts/classical/fold_metrics.csv ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ accuracy,precision,recall,f1,roc_auc,feature,model,fold,n_valid
2
+ 0.9605911330049262,0.979381443298969,0.9405940594059405,0.9595959595959596,0.9887400504756357,tfidf,logistic_regression,1,203
3
+ 0.9753694581280788,1.0,0.9504950495049505,0.9746192893401016,0.9933022714036109,tfidf,logistic_regression,2,203
4
+ 0.9753694581280788,0.9897959183673469,0.9603960396039604,0.9748743718592965,0.9939817511162882,tfidf,logistic_regression,3,203
5
+ 0.9458128078817734,0.96875,0.9207920792079208,0.9441624365482234,0.9888371190060182,tfidf,logistic_regression,4,203
6
+ 0.9408866995073891,0.96875,0.9117647058823529,0.9393939393939394,0.9936905455251408,tfidf,logistic_regression,5,203
7
+ 0.9556650246305419,0.9345794392523364,0.9803921568627451,0.9569377990430622,0.9921374490390216,tfidf,logistic_regression,6,203
8
+ 0.9753694581280788,0.970873786407767,0.9803921568627451,0.975609756097561,0.9968938070277615,tfidf,logistic_regression,7,203
9
+ 0.9605911330049262,0.9895833333333334,0.9313725490196079,0.9595959595959596,0.9946612308289653,tfidf,logistic_regression,8,203
10
+ 0.9504950495049505,0.9789473684210527,0.9207920792079208,0.9489795918367347,0.9940201940986177,tfidf,logistic_regression,9,202
11
+ 0.9702970297029703,0.9797979797979798,0.9603960396039604,0.97,0.9972551710616606,tfidf,logistic_regression,10,202
12
+ 0.9704433497536946,0.9896907216494846,0.9504950495049505,0.9696969696969697,0.9955348476024073,tfidf,linear_svm,1,203
13
+ 0.9852216748768473,1.0,0.9702970297029703,0.9849246231155779,0.99524364201126,tfidf,linear_svm,2,203
14
+ 0.9852216748768473,0.99,0.9801980198019802,0.9850746268656716,0.9951465734808775,tfidf,linear_svm,3,203
15
+ 0.9458128078817734,0.9591836734693877,0.9306930693069307,0.9447236180904522,0.9890312560667831,tfidf,linear_svm,4,203
16
+ 0.9458128078817734,0.9690721649484536,0.9215686274509803,0.9447236180904522,0.9958260531935546,tfidf,linear_svm,5,203
17
+ 0.9556650246305419,0.9514563106796117,0.9607843137254902,0.9560975609756097,0.9938846825859057,tfidf,linear_svm,6,203
18
+ 0.9901477832512315,0.9807692307692307,1.0,0.9902912621359223,0.9966996699669967,tfidf,linear_svm,7,203
19
+ 0.9655172413793104,0.9797979797979798,0.9509803921568627,0.9651741293532339,0.9977674238012035,tfidf,linear_svm,8,203
20
+ 0.9603960396039604,0.9894736842105263,0.9306930693069307,0.9591836734693877,0.9941182237035585,tfidf,linear_svm,9,202
21
+ 0.9801980198019802,0.9801980198019802,0.9801980198019802,0.9801980198019802,0.9985295559258895,tfidf,linear_svm,10,202
22
+ 0.9359605911330049,0.9150943396226415,0.9603960396039604,0.9371980676328503,0.9880605707629587,tfidf,random_forest,1,203
23
+ 0.9458128078817734,0.9411764705882353,0.9504950495049505,0.9458128078817734,0.9909726266744321,tfidf,random_forest,2,203
24
+ 0.9704433497536946,0.9702970297029703,0.9702970297029703,0.9702970297029703,0.9925257231605513,tfidf,random_forest,3,203
25
+ 0.9507389162561576,0.941747572815534,0.9603960396039604,0.9509803921568627,0.9841778295476606,tfidf,random_forest,4,203
26
+ 0.9408866995073891,0.9245283018867925,0.9607843137254902,0.9423076923076923,0.9881576392933411,tfidf,random_forest,5,203
27
+ 0.916256157635468,0.8828828828828829,0.9607843137254902,0.92018779342723,0.9802950883323627,tfidf,random_forest,6,203
28
+ 0.9310344827586207,0.9230769230769231,0.9411764705882353,0.9320388349514563,0.9866045428072219,tfidf,random_forest,7,203
29
+ 0.9458128078817734,0.9504950495049505,0.9411764705882353,0.9458128078817734,0.9867986798679869,tfidf,random_forest,8,203
30
+ 0.9356435643564357,0.9489795918367347,0.9207920792079208,0.9346733668341709,0.9912753651602784,tfidf,random_forest,9,202
31
+ 0.9702970297029703,0.9611650485436893,0.9801980198019802,0.9705882352941176,0.9931379276541517,tfidf,random_forest,10,202
32
+ 0.9408866995073891,0.9494949494949495,0.9306930693069307,0.94,0.9880605707629586,tfidf,extra_trees,1,203
33
+ 0.9507389162561576,0.9504950495049505,0.9504950495049505,0.9504950495049505,0.9937876140555232,tfidf,extra_trees,2,203
34
+ 0.9802955665024631,0.98989898989899,0.9702970297029703,0.98,0.9927198602213163,tfidf,extra_trees,3,203
35
+ 0.9507389162561576,0.9690721649484536,0.9306930693069307,0.9494949494949495,0.9913609007959618,tfidf,extra_trees,4,203
36
+ 0.9605911330049262,0.9795918367346939,0.9411764705882353,0.96,0.9951465734808775,tfidf,extra_trees,5,203
37
+ 0.9310344827586207,0.9150943396226415,0.9509803921568627,0.9326923076923077,0.9867016113376043,tfidf,extra_trees,6,203
38
+ 0.9507389162561576,0.9509803921568627,0.9509803921568627,0.9509803921568627,0.9919433119782566,tfidf,extra_trees,7,203
39
+ 0.9310344827586207,0.94,0.9215686274509803,0.9306930693069307,0.9895165987186955,tfidf,extra_trees,8,203
40
+ 0.9554455445544554,0.96,0.9504950495049505,0.9552238805970149,0.9940201940986177,tfidf,extra_trees,9,202
41
+ 0.9702970297029703,0.9797979797979798,0.9603960396039604,0.97,0.9942162533084992,tfidf,extra_trees,10,202
42
+ 0.896551724137931,0.9081632653061225,0.8811881188118812,0.8944723618090452,0.9764123471170647,tfidf,gradient_boosting,1,203
43
+ 0.916256157635468,0.9375,0.8910891089108911,0.9137055837563451,0.9801980198019802,tfidf,gradient_boosting,2,203
44
+ 0.9458128078817734,0.95,0.9405940594059405,0.945273631840796,0.9851970491166764,tfidf,gradient_boosting,3,203
45
+ 0.9014778325123153,0.9354838709677419,0.8613861386138614,0.8969072164948454,0.9653950689186565,tfidf,gradient_boosting,4,203
46
+ 0.9064039408866995,0.9278350515463918,0.8823529411764706,0.9045226130653267,0.9652494661230829,tfidf,gradient_boosting,5,203
47
+ 0.9014778325123153,0.8942307692307693,0.9117647058823529,0.9029126213592233,0.967676179382644,tfidf,gradient_boosting,6,203
48
+ 0.9359605911330049,0.9405940594059405,0.9313725490196079,0.9359605911330049,0.9850514463211028,tfidf,gradient_boosting,7,203
49
+ 0.9064039408866995,0.946236559139785,0.8627450980392157,0.9025641025641026,0.9619976703552708,tfidf,gradient_boosting,8,203
50
+ 0.8960396039603961,0.9166666666666666,0.8712871287128713,0.8934010152284264,0.9630428389373591,tfidf,gradient_boosting,9,202
51
+ 0.9405940594059405,0.9494949494949495,0.9306930693069307,0.94,0.9850504852465445,tfidf,gradient_boosting,10,202
52
+ 0.9704433497536946,0.9702970297029703,0.9702970297029703,0.9702970297029703,0.9916521063871093,word2vec,logistic_regression,1,203
53
+ 0.9950738916256158,1.0,0.9900990099009901,0.9950248756218906,0.9990293146961755,word2vec,logistic_regression,2,203
54
+ 0.9901477832512315,0.9900990099009901,0.9900990099009901,0.9900990099009901,0.9949524364201127,word2vec,logistic_regression,3,203
55
+ 0.9458128078817734,0.96875,0.9207920792079208,0.9441624365482234,0.9911667637351971,word2vec,logistic_regression,4,203
56
+ 0.9359605911330049,0.9405940594059405,0.9313725490196079,0.9359605911330049,0.9918462434478742,word2vec,logistic_regression,5,203
57
+ 0.9507389162561576,0.9339622641509434,0.9705882352941176,0.9519230769230769,0.9905843525529023,word2vec,logistic_regression,6,203
58
+ 0.9556650246305419,0.9428571428571428,0.9705882352941176,0.9565217391304348,0.9963113958454668,word2vec,logistic_regression,7,203
59
+ 0.9704433497536946,0.98,0.9607843137254902,0.9702970297029703,0.9915550378567268,word2vec,logistic_regression,8,203
60
+ 0.9554455445544554,0.9693877551020408,0.9405940594059405,0.9547738693467337,0.9929418684442702,word2vec,logistic_regression,9,202
61
+ 0.9653465346534653,0.97,0.9603960396039604,0.9651741293532339,0.9954906381727282,word2vec,logistic_regression,10,202
62
+ 0.9655172413793104,0.9795918367346939,0.9504950495049505,0.964824120603015,0.9859250630945448,word2vec,linear_svm,1,203
63
+ 0.9901477832512315,1.0,0.9801980198019802,0.99,0.998932246165793,word2vec,linear_svm,2,203
64
+ 0.9802955665024631,0.98989898989899,0.9702970297029703,0.98,0.9962143273150845,word2vec,linear_svm,3,203
65
+ 0.9408866995073891,0.968421052631579,0.9108910891089109,0.9387755102040817,0.9890312560667832,word2vec,linear_svm,4,203
66
+ 0.9458128078817734,0.9595959595959596,0.9313725490196079,0.945273631840796,0.9890312560667831,word2vec,linear_svm,5,203
67
+ 0.9458128078817734,0.9252336448598131,0.9705882352941176,0.9473684210526315,0.9887400504756357,word2vec,linear_svm,6,203
68
+ 0.9507389162561576,0.9339622641509434,0.9705882352941176,0.9519230769230769,0.9952436420112599,word2vec,linear_svm,7,203
69
+ 0.9655172413793104,0.9797979797979798,0.9509803921568627,0.9651741293532339,0.9964084643758493,word2vec,linear_svm,8,203
70
+ 0.9504950495049505,0.9690721649484536,0.9306930693069307,0.9494949494949495,0.9901970395059307,word2vec,linear_svm,9,202
71
+ 0.9603960396039604,0.9603960396039604,0.9603960396039604,0.9603960396039604,0.9950004901480247,word2vec,linear_svm,10,202
72
+ 0.9458128078817734,0.9411764705882353,0.9504950495049505,0.9458128078817734,0.9868957483983692,word2vec,random_forest,1,203
73
+ 0.9901477832512315,1.0,0.9801980198019802,0.99,0.9985439720442633,word2vec,random_forest,2,203
74
+ 0.9753694581280788,0.9897959183673469,0.9603960396039604,0.9748743718592965,0.9935934769947583,word2vec,random_forest,3,203
75
+ 0.9507389162561576,0.9504950495049505,0.9504950495049505,0.9504950495049505,0.9907784896136672,word2vec,random_forest,4,203
76
+ 0.9507389162561576,0.9509803921568627,0.9509803921568627,0.9509803921568627,0.9945641622985828,word2vec,random_forest,5,203
77
+ 0.9310344827586207,0.9150943396226415,0.9509803921568627,0.9326923076923077,0.9862162686856921,word2vec,random_forest,6,203
78
+ 0.9507389162561576,0.9423076923076923,0.9607843137254902,0.9514563106796117,0.9936905455251408,word2vec,random_forest,7,203
79
+ 0.9605911330049262,0.97,0.9509803921568627,0.9603960396039604,0.9953407105416425,word2vec,random_forest,8,203
80
+ 0.9603960396039604,1.0,0.9207920792079208,0.9587628865979382,0.9967650230369571,word2vec,random_forest,9,202
81
+ 0.9752475247524752,0.98,0.9702970297029703,0.9751243781094527,0.9917655131849819,word2vec,random_forest,10,202
82
+ 0.9556650246305419,0.9509803921568627,0.9603960396039604,0.9556650246305419,0.9923315860997864,word2vec,extra_trees,1,203
83
+ 0.9852216748768473,1.0,0.9702970297029703,0.9849246231155779,0.9992234517569404,word2vec,extra_trees,2,203
84
+ 0.9704433497536946,0.9797979797979798,0.9603960396039604,0.97,0.9923315860997864,word2vec,extra_trees,3,203
85
+ 0.9605911330049262,0.9696969696969697,0.9504950495049505,0.96,0.993302271403611,word2vec,extra_trees,4,203
86
+ 0.9507389162561576,0.9509803921568627,0.9509803921568627,0.9509803921568627,0.9939817511162881,word2vec,extra_trees,5,203
87
+ 0.9507389162561576,0.9259259259259259,0.9803921568627451,0.9523809523809523,0.9889341875364006,word2vec,extra_trees,6,203
88
+ 0.9605911330049262,0.9519230769230769,0.9705882352941176,0.9611650485436893,0.9947582993593477,word2vec,extra_trees,7,203
89
+ 0.9556650246305419,0.9603960396039604,0.9509803921568627,0.9556650246305419,0.9937876140555233,word2vec,extra_trees,8,203
90
+ 0.9603960396039604,0.9894736842105263,0.9306930693069307,0.9591836734693877,0.9962748750122538,word2vec,extra_trees,9,202
91
+ 0.9752475247524752,0.98,0.9702970297029703,0.9751243781094527,0.9954906381727282,word2vec,extra_trees,10,202
92
+ 0.9507389162561576,0.9504950495049505,0.9504950495049505,0.9504950495049505,0.9896136672490778,word2vec,gradient_boosting,1,203
93
+ 0.9852216748768473,0.99,0.9801980198019802,0.9850746268656716,0.9990293146961755,word2vec,gradient_boosting,2,203
94
+ 0.9605911330049262,0.9894736842105263,0.9306930693069307,0.9591836734693877,0.9947582993593478,word2vec,gradient_boosting,3,203
95
+ 0.9458128078817734,0.9411764705882353,0.9504950495049505,0.9458128078817734,0.9926227916909338,word2vec,gradient_boosting,4,203
96
+ 0.9605911330049262,0.9607843137254902,0.9607843137254902,0.9607843137254902,0.9946612308289653,word2vec,gradient_boosting,5,203
97
+ 0.9211822660098522,0.9134615384615384,0.9313725490196079,0.9223300970873787,0.9867016113376044,word2vec,gradient_boosting,6,203
98
+ 0.9507389162561576,0.9423076923076923,0.9607843137254902,0.9514563106796117,0.9947582993593477,word2vec,gradient_boosting,7,203
99
+ 0.9704433497536946,0.9705882352941176,0.9705882352941176,0.9705882352941176,0.9946612308289652,word2vec,gradient_boosting,8,203
100
+ 0.9603960396039604,0.9894736842105263,0.9306930693069307,0.9591836734693877,0.9954906381727282,word2vec,gradient_boosting,9,202
101
+ 0.9653465346534653,0.9607843137254902,0.9702970297029703,0.9655172413793104,0.993333986864033,word2vec,gradient_boosting,10,202
artifacts/classical/keyword_counts.csv ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ term,positif_docs,negatif_docs,positif_rate,negatif_rate,dominant_label,lift
2
+ terbaik,49,0,0.048323471400394474,0.0,Positif,48323472.40039447
3
+ lezat,20,0,0.01972386587771203,0.0,Positif,19723866.87771203
4
+ mantap,18,0,0.01775147928994083,0.0,Positif,17751480.289940827
5
+ nikmat,9,0,0.008875739644970414,0.0,Positif,8875740.644970413
6
+ autentik,21,1,0.020710059171597635,0.0009861932938856016,Positif,20.999979720020566
7
+ enak,510,33,0.5029585798816568,0.03254437869822485,Positif,15.454545010396707
8
+ bagus,91,6,0.08974358974358974,0.005917159763313609,Positif,15.166664272500403
9
+ nyaman,208,23,0.20512820512820512,0.022682445759368838,Positif,9.043477906257104
10
+ direkomendasikan,55,7,0.054240631163708086,0.006903353057199211,Positif,7.857141863836878
11
+ ramah,108,16,0.10650887573964497,0.015779092702169626,Positif,6.749999635593773
12
+ manis,41,30,0.04043392504930966,0.029585798816568046,Positif,1.3666666542733337
13
+ pahit,23,21,0.022682445759368838,0.020710059171597635,Positif,1.0952380906394559
14
+ biasa,18,26,0.01775147928994083,0.02564102564102564,Negatif,0.6923077043076918
15
+ kurang,27,49,0.026627218934911243,0.048323471400394474,Negatif,0.5510204174543939
16
+ harganya,22,43,0.021696252465483234,0.04240631163708087,Negatif,0.5116279184932393
17
+ harga,31,62,0.03057199211045365,0.0611439842209073,Negatif,0.5000000081774192
18
+ kecewa,2,8,0.0019723865877712033,0.007889546351084813,Negatif,0.25000009506248794
19
+ lama,10,42,0.009861932938856016,0.04142011834319527,Negatif,0.23809525648979546
20
+ mahal,11,47,0.010848126232741617,0.046351084812623275,Negatif,0.23404256971661347
21
+ tidak,86,380,0.08481262327416174,0.3747534516765286,Negatif,0.22631579153819942
22
+ murah,2,9,0.0019723865877712033,0.008875739644970414,Negatif,0.222222309851842
23
+ menunggu,4,37,0.0039447731755424065,0.03648915187376726,Negatif,0.10810813255076633
24
+ antrean,2,34,0.0019723865877712033,0.03353057199211045,Negatif,0.05882355748096803
25
+ buruk,0,36,0.0,0.03550295857988166,Negatif,2.816666587330558e-08
artifacts/classical/oof_tfidf_extra_trees.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/oof_tfidf_gradient_boosting.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/oof_tfidf_linear_svm.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/oof_tfidf_logistic_regression.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/oof_tfidf_random_forest.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/oof_word2vec_extra_trees.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/oof_word2vec_gradient_boosting.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/oof_word2vec_linear_svm.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/oof_word2vec_logistic_regression.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/oof_word2vec_random_forest.csv ADDED
The diff for this file is too large to render. See raw diff
 
artifacts/classical/report_tfidf_extra_trees.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.9464459591041869,
4
+ "recall": 0.9585798816568047,
5
+ "f1-score": 0.9524742773150416,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.958041958041958,
10
+ "recall": 0.9457593688362919,
11
+ "f1-score": 0.9518610421836228,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9521696252465484,
15
+ "macro avg": {
16
+ "precision": 0.9522439585730724,
17
+ "recall": 0.9521696252465484,
18
+ "f1-score": 0.9521676597493323,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9522439585730724,
23
+ "recall": 0.9521696252465484,
24
+ "f1-score": 0.9521676597493323,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/report_tfidf_gradient_boosting.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.9000951474785919,
4
+ "recall": 0.9329388560157791,
5
+ "f1-score": 0.9162227602905569,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.9303991811668373,
10
+ "recall": 0.8964497041420119,
11
+ "f1-score": 0.9131089904570567,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9146942800788954,
15
+ "macro avg": {
16
+ "precision": 0.9152471643227146,
17
+ "recall": 0.9146942800788955,
18
+ "f1-score": 0.9146658753738068,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9152471643227146,
23
+ "recall": 0.9146942800788954,
24
+ "f1-score": 0.9146658753738068,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/report_tfidf_linear_svm.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.9584942084942085,
4
+ "recall": 0.9792899408284024,
5
+ "f1-score": 0.968780487804878,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.9788306451612904,
10
+ "recall": 0.9575936883629191,
11
+ "f1-score": 0.9680957128614157,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9684418145956607,
15
+ "macro avg": {
16
+ "precision": 0.9686624268277495,
17
+ "recall": 0.9684418145956608,
18
+ "f1-score": 0.9684381003331468,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9686624268277494,
23
+ "recall": 0.9684418145956607,
24
+ "f1-score": 0.9684381003331468,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/report_tfidf_logistic_regression.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.9473684210526315,
4
+ "recall": 0.9763313609467456,
5
+ "f1-score": 0.9616318601262749,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.9755849440488301,
10
+ "recall": 0.9457593688362919,
11
+ "f1-score": 0.9604406609914873,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9610453648915187,
15
+ "macro avg": {
16
+ "precision": 0.9614766825507308,
17
+ "recall": 0.9610453648915187,
18
+ "f1-score": 0.9610362605588811,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9614766825507308,
23
+ "recall": 0.9610453648915187,
24
+ "f1-score": 0.961036260558881,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/report_tfidf_random_forest.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.9536757301107754,
4
+ "recall": 0.9339250493096647,
5
+ "f1-score": 0.9436970602889886,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.9352657004830918,
10
+ "recall": 0.9546351084812623,
11
+ "f1-score": 0.9448511469009273,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9442800788954635,
15
+ "macro avg": {
16
+ "precision": 0.9444707152969336,
17
+ "recall": 0.9442800788954635,
18
+ "f1-score": 0.944274103594958,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9444707152969336,
23
+ "recall": 0.9442800788954635,
24
+ "f1-score": 0.9442741035949579,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/report_word2vec_extra_trees.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.9598039215686275,
4
+ "recall": 0.965483234714004,
5
+ "f1-score": 0.9626352015732547,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.9652777777777778,
10
+ "recall": 0.9595660749506904,
11
+ "f1-score": 0.9624134520276953,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9625246548323472,
15
+ "macro avg": {
16
+ "precision": 0.9625408496732026,
17
+ "recall": 0.9625246548323472,
18
+ "f1-score": 0.9625243268004751,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9625408496732026,
23
+ "recall": 0.9625246548323472,
24
+ "f1-score": 0.962524326800475,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/report_word2vec_gradient_boosting.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.9539666993143977,
4
+ "recall": 0.960552268244576,
5
+ "f1-score": 0.9572481572481573,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.9602780536246276,
10
+ "recall": 0.9536489151873767,
11
+ "f1-score": 0.9569520039584364,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9571005917159763,
15
+ "macro avg": {
16
+ "precision": 0.9571223764695127,
17
+ "recall": 0.9571005917159763,
18
+ "f1-score": 0.9571000806032968,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9571223764695126,
23
+ "recall": 0.9571005917159763,
24
+ "f1-score": 0.9571000806032968,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/report_word2vec_linear_svm.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.953307392996109,
4
+ "recall": 0.9664694280078896,
5
+ "f1-score": 0.9598432908912831,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.966,
10
+ "recall": 0.9526627218934911,
11
+ "f1-score": 0.9592850049652433,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9595660749506904,
15
+ "macro avg": {
16
+ "precision": 0.9596536964980544,
17
+ "recall": 0.9595660749506904,
18
+ "f1-score": 0.9595641479282632,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9596536964980545,
23
+ "recall": 0.9595660749506904,
24
+ "f1-score": 0.9595641479282633,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/report_word2vec_logistic_regression.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.9607843137254902,
4
+ "recall": 0.9664694280078896,
5
+ "f1-score": 0.9636184857423795,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.9662698412698413,
10
+ "recall": 0.960552268244576,
11
+ "f1-score": 0.963402571711177,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9635108481262328,
15
+ "macro avg": {
16
+ "precision": 0.9635270774976658,
17
+ "recall": 0.9635108481262328,
18
+ "f1-score": 0.9635105287267782,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9635270774976658,
23
+ "recall": 0.9635108481262328,
24
+ "f1-score": 0.9635105287267783,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/report_word2vec_random_forest.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "Negatif": {
3
+ "precision": 0.9550342130987293,
4
+ "recall": 0.9635108481262328,
5
+ "f1-score": 0.9592538046146294,
6
+ "support": 1014.0
7
+ },
8
+ "Positif": {
9
+ "precision": 0.96318407960199,
10
+ "recall": 0.9546351084812623,
11
+ "f1-score": 0.9588905398712234,
12
+ "support": 1014.0
13
+ },
14
+ "accuracy": 0.9590729783037475,
15
+ "macro avg": {
16
+ "precision": 0.9591091463503596,
17
+ "recall": 0.9590729783037475,
18
+ "f1-score": 0.9590721722429264,
19
+ "support": 2028.0
20
+ },
21
+ "weighted avg": {
22
+ "precision": 0.9591091463503597,
23
+ "recall": 0.9590729783037475,
24
+ "f1-score": 0.9590721722429264,
25
+ "support": 2028.0
26
+ }
27
+ }
artifacts/classical/results.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ accuracy,precision,recall,f1,roc_auc,feature,model,folds,n
2
+ 0.9684418145956607,0.9788306451612904,0.9575936883629191,0.9680957128614157,0.9951448945531786,tfidf,linear_svm,10,2028
3
+ 0.9635108481262328,0.9662698412698413,0.960552268244576,0.963402571711177,0.9938698458270603,word2vec,logistic_regression,10,2028
4
+ 0.9625246548323472,0.9652777777777778,0.9595660749506904,0.9624134520276953,0.9939816922065442,word2vec,extra_trees,10,2028
5
+ 0.9610453648915187,0.9755849440488301,0.9457593688362919,0.9604406609914873,0.993330065473898,tfidf,logistic_regression,10,2028
6
+ 0.9595660749506904,0.966,0.9526627218934911,0.9592850049652433,0.9924450202101543,word2vec,linear_svm,10,2028
7
+ 0.9590729783037475,0.96318407960199,0.9546351084812623,0.9588905398712234,0.9926978902855098,word2vec,random_forest,10,2028
8
+ 0.9571005917159763,0.9602780536246276,0.9536489151873767,0.9569520039584364,0.9932901898081689,word2vec,gradient_boosting,10,2028
9
+ 0.9521696252465484,0.958041958041958,0.9457593688362919,0.9518610421836228,0.9917681064699727,tfidf,extra_trees,10,2028
10
+ 0.9442800788954635,0.9352657004830918,0.9546351084812623,0.9448511469009273,0.9882347334554891,tfidf,random_forest,10,2028
11
+ 0.9146942800788954,0.9303991811668373,0.8964497041420119,0.9131089904570567,0.9734953257939148,tfidf,gradient_boosting,10,2028
artifacts/classical/top_words_tfidf.csv ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ term,weight,label_name
2
+ enak,6.779675935425394,Positif
3
+ bagus,2.8658279629291394,Positif
4
+ nyaman,2.8581534389813177,Positif
5
+ tempatnya,2.627008864949178,Positif
6
+ terbaik,2.1523917977830203,Positif
7
+ suka,2.054488930967297,Positif
8
+ ramah,2.038783583222844,Positif
9
+ sangat enak,1.7820287632132352,Positif
10
+ matcha-nya,1.7207730656764704,Positif
11
+ enak dan,1.7081207989749454,Positif
12
+ mantap,1.6769131021022596,Positif
13
+ pelayanan,1.6575130843871289,Positif
14
+ enak sekali,1.631890295781384,Positif
15
+ braga,1.5049659927850072,Positif
16
+ direkomendasikan,1.4197258991884931,Positif
17
+ lezat,1.3810395926163632,Positif
18
+ autentik,1.322057364683747,Positif
19
+ menarik,1.271781010383556,Positif
20
+ tidak terlalu,1.2681605237449671,Positif
21
+ mencoba,1.24669576582905,Positif
22
+ wajib,1.2148858565278498,Positif
23
+ luar biasa,1.198937692181637,Positif
24
+ keren,1.189645695081413,Positif
25
+ feel,1.1633305392227709,Positif
26
+ feel matcha,1.1633305392227709,Positif
27
+ menyenangkan,1.1611621129155691,Positif
28
+ nyaman dan,1.157465948684494,Positif
29
+ sini,1.1161567380461428,Positif
30
+ pelayanannya,1.1021108164083118,Positif
31
+ pecinta,1.088950917653697,Positif
32
+ pecinta matcha,1.088950917653697,Positif
33
+ dicoba,1.0513872719613726,Positif
34
+ luar,1.0491663284442232,Positif
35
+ cocok,1.0424196999756452,Positif
36
+ bandung,1.037843601039172,Positif
37
+ sangat direkomendasikan,1.0357254221127778,Positif
38
+ favorit,1.011042823809348,Positif
39
+ terlalu manis,0.981645744103316,Positif
40
+ terjangkau,0.973202784805922,Positif
41
+ nikmat,0.9395737633825911,Positif
42
+ creamy,0.9151266830322586,Positif
43
+ yang bagus,0.9079359550103053,Positif
44
+ suasananya,0.9069920858067819,Positif
45
+ matchanya enak,0.8836480085517279,Positif
46
+ di braga,0.876123980986992,Positif
47
+ cepat,0.8748172674136202,Positif
48
+ matcha enak,0.8709581560752803,Positif
49
+ sangat nyaman,0.8692630220462553,Positif
50
+ pilihan,0.8669644030165948,Positif
51
+ good,0.8646022512513619,Positif
52
+ matcha terbaik,0.8621637427659486,Positif
53
+ rasanya enak,0.8468944055617108,Positif
54
+ sangat suka,0.8307670140605237,Positif
55
+ lumayan,0.8289733956058337,Positif
56
+ ramah dan,0.8105082760482645,Positif
57
+ tempatnya nyaman,0.8003474687367536,Positif
58
+ lucu,0.7853360623739081,Positif
59
+ suasana,0.7818980428197028,Positif
60
+ ke sini,0.7725116187773643,Positif
61
+ menyukai,0.7715396284164138,Positif
62
+ tidak,-3.7154029272590687,Negatif
63
+ banget,-1.8565624312210731,Negatif
64
+ beli,-1.7407328065710748,Negatif
65
+ sangat tidak,-1.5329173647435836,Negatif
66
+ pelanggan,-1.5293160222843036,Negatif
67
+ pesanan,-1.4286890774714087,Negatif
68
+ kayak,-1.3870013285793157,Negatif
69
+ bikin,-1.3699115300927542,Negatif
70
+ area,-1.2964871224998862,Negatif
71
+ kasir,-1.288853516329438,Negatif
72
+ gelas,-1.22731379211243,Negatif
73
+ buruk,-1.2158849363519226,Negatif
74
+ terlalu,-1.1562493904459072,Negatif
75
+ malah,-1.1352520953426055,Negatif
76
+ tidak ada,-1.0817406575783368,Negatif
77
+ jam,-1.0680265948999101,Negatif
78
+ meja,-1.0396674798600292,Negatif
79
+ air,-1.026312085826463,Negatif
80
+ padahal,-1.0214326834781853,Negatif
81
+ pakai,-0.9944526416621025,Negatif
82
+ bau,-0.9530867517678938,Negatif
83
+ gerai,-0.9488617313357083,Negatif
84
+ mahal,-0.9450652598687478,Negatif
85
+ staf,-0.8896046049224152,Negatif
86
+ keras,-0.8504849297916145,Negatif
87
+ sangat buruk,-0.8495769270692559,Negatif
88
+ menunggu,-0.8399522169109798,Negatif
89
+ kurang,-0.8220857045133737,Negatif
90
+ lama,-0.8052777380257831,Negatif
91
+ teh,-0.7908825395876438,Negatif
92
+ sepertinya,-0.7769467947991883,Negatif
93
+ biasa saja,-0.770782100556984,Negatif
94
+ kotor,-0.760729009779986,Negatif
95
+ dikasih,-0.7540166847646226,Negatif
96
+ bubuk,-0.739718714033697,Negatif
97
+ harga,-0.7324491727275422,Negatif
98
+ beli matcha,-0.7321285665156619,Negatif
99
+ antrean,-0.7282306924125145,Negatif
100
+ masuk,-0.7234527379574038,Negatif
101
+ sempit,-0.7183160892820316,Negatif
102
+ cuma,-0.7102850475433332,Negatif
103
+ hanya,-0.7021569999486995,Negatif
104
+ tidak nyaman,-0.7018459658083473,Negatif
105
+ minta,-0.7017103575877348,Negatif
106
+ plastik,-0.7008926248184666,Negatif
107
+ menit,-0.6907597159178882,Negatif
108
+ jauh,-0.6907428639139481,Negatif
109
+ pesan,-0.687907417251262,Negatif
110
+ kualitas,-0.685890280204763,Negatif
111
+ lengket,-0.6821969933381855,Negatif
112
+ aneh,-0.6747821234672332,Negatif
113
+ tumpah,-0.666470971743141,Negatif
114
+ krimnya,-0.6574423085479482,Negatif
115
+ satu,-0.6374849785170068,Negatif
116
+ waktu,-0.6349304476706374,Negatif
117
+ zonk,-0.6282434592606427,Negatif
118
+ panas,-0.6201632756305473,Negatif
119
+ ukuran,-0.6152009043724824,Negatif
120
+ porsi,-0.6006432748736134,Negatif
121
+ tangan,-0.600042149862903,Negatif
artifacts/figures/classical_best_confusion_matrix.png ADDED

Git LFS Details

  • SHA256: 505ff0c8692494542b535dd529eaa8b2489bb30c4a91e736cd6fef313a91c343
  • Pointer size: 130 Bytes
  • Size of remote file: 35.7 kB
artifacts/figures/classical_best_roc_auc.png ADDED

Git LFS Details

  • SHA256: 5f5a28d5e61fc4a2b7b16ba89c3e37cf917ab933ab2e6736dc3ea1786062cf7f
  • Pointer size: 130 Bytes
  • Size of remote file: 44.9 kB
artifacts/figures/confusion_matrix_ChristopherA08__IndoELECTRA.png ADDED

Git LFS Details

  • SHA256: 426be3b35dbaeb044b959dda24f057dacc6f3760155d929871b6dc341750215e
  • Pointer size: 130 Bytes
  • Size of remote file: 37.8 kB
artifacts/figures/confusion_matrix_cahya__distilbert-base-indonesian.png ADDED

Git LFS Details

  • SHA256: 3216c8c8bdeb01a305972b2efdaf6716e5201bf9f5bb6c36b39f7264d81c4ca2
  • Pointer size: 130 Bytes
  • Size of remote file: 36.7 kB
artifacts/figures/confusion_matrix_flax-community__indonesian-roberta-base.png ADDED

Git LFS Details

  • SHA256: c0e27faaaeccfc1ab327bb37d1876a3b677db207ddb97d8a2e24d8c292855c3e
  • Pointer size: 130 Bytes
  • Size of remote file: 38.8 kB
artifacts/figures/confusion_matrix_indobenchmark__indobert-base-p1.png ADDED

Git LFS Details

  • SHA256: 6e3efec873117983cc2d0aa97c750d7d5e97b0f261423c9f96a0fce3b8eb6e59
  • Pointer size: 130 Bytes
  • Size of remote file: 38.3 kB
artifacts/figures/confusion_matrix_indobenchmark__indobert-base-p2.png ADDED

Git LFS Details

  • SHA256: e9289de02f3bec9af6a2f8752d4b69bda4af3e7f5bbd1f222fc4e8fda21889ba
  • Pointer size: 130 Bytes
  • Size of remote file: 43 kB
artifacts/figures/confusion_matrix_indolem__indobert-base-uncased.png ADDED

Git LFS Details

  • SHA256: f1ac287d164d0736513ae861be73614e3f28e69eb91a74189cb78e8d92fd7d4f
  • Pointer size: 130 Bytes
  • Size of remote file: 37.3 kB
artifacts/figures/confusion_matrix_indolem__indobertweet-base-uncased.png ADDED

Git LFS Details

  • SHA256: c0474640540c6b1b08d79748845200b6944148335b4c9b314dc5609ac7bb36e2
  • Pointer size: 130 Bytes
  • Size of remote file: 37.6 kB
artifacts/figures/confusion_matrix_naufalihsan__indonesian-sbert-large.png ADDED

Git LFS Details

  • SHA256: ddb8fa3aac03bfc900d3fe58524c0e11775654397ca39371d02cc70e4db3cc2e
  • Pointer size: 130 Bytes
  • Size of remote file: 37.5 kB
artifacts/figures/confusion_matrix_sentence-transformers__paraphrase-multilingual-MiniLM-L12-v2.png ADDED

Git LFS Details

  • SHA256: 0aca4aed3ff65aee93175200cf74987f5d821f390b4a0eb5e22c4d849fb6e49c
  • Pointer size: 130 Bytes
  • Size of remote file: 38.8 kB
artifacts/figures/confusion_matrix_w11wo__indonesian-roberta-base-sentiment-classifier.png ADDED

Git LFS Details

  • SHA256: 0a53eb63ed174824e539df819885b0db3690ff7a09db36cd576df6f2586cb7ab
  • Pointer size: 130 Bytes
  • Size of remote file: 39 kB
artifacts/figures/roc_auc_ChristopherA08__IndoELECTRA.png ADDED

Git LFS Details

  • SHA256: 81df30b14ea56e0a2d91d4e516b9d75777ae11486c3cdd3585de2f0a17c82540
  • Pointer size: 130 Bytes
  • Size of remote file: 45.9 kB
artifacts/figures/roc_auc_cahya__distilbert-base-indonesian.png ADDED

Git LFS Details

  • SHA256: 4865cfa9c8d2422e0a71b95d790d1bdb34b39c0fc843ad5ed9d667f0ffb8eaa2
  • Pointer size: 130 Bytes
  • Size of remote file: 45.9 kB
artifacts/figures/roc_auc_flax-community__indonesian-roberta-base.png ADDED

Git LFS Details

  • SHA256: 0d19f81697c5423fa49cef90ca3ed55725f142149fb40647fc62c2b7caeda0b3
  • Pointer size: 130 Bytes
  • Size of remote file: 47.6 kB
artifacts/figures/roc_auc_indobenchmark__indobert-base-p1.png ADDED

Git LFS Details

  • SHA256: 8df81970c7dc0a4ae1e888122f2b3bf1c275db15391728af68f8db8f81936e44
  • Pointer size: 130 Bytes
  • Size of remote file: 46.1 kB
artifacts/figures/roc_auc_indobenchmark__indobert-base-p2.png ADDED

Git LFS Details

  • SHA256: 3f73cec50b8b9155c3ef87935fb4767c9b2167bbb5603809a17e201b0a466738
  • Pointer size: 130 Bytes
  • Size of remote file: 52.9 kB
artifacts/figures/roc_auc_indolem__indobert-base-uncased.png ADDED

Git LFS Details

  • SHA256: ce29d49b63f1600104e24760523ffbd4b1b8c79ca871e52fa0679621b17d58bd
  • Pointer size: 130 Bytes
  • Size of remote file: 45.9 kB
artifacts/figures/roc_auc_indolem__indobertweet-base-uncased.png ADDED

Git LFS Details

  • SHA256: 1eb4963660418fe11dd05ed66c489b5d419b16632187edc06c24a1af57503a47
  • Pointer size: 130 Bytes
  • Size of remote file: 46.2 kB
artifacts/figures/roc_auc_naufalihsan__indonesian-sbert-large.png ADDED

Git LFS Details

  • SHA256: 793b8602a27d25ce78a4eda425302decdfe4d96e75b1365d6a4aa120d3bfd8d7
  • Pointer size: 130 Bytes
  • Size of remote file: 45.2 kB
artifacts/figures/roc_auc_sentence-transformers__paraphrase-multilingual-MiniLM-L12-v2.png ADDED

Git LFS Details

  • SHA256: 912021ec84ad3cf67a74b6a6daca39285c339e3dd3de73658a57f92a887d1014
  • Pointer size: 130 Bytes
  • Size of remote file: 48.9 kB
artifacts/figures/roc_auc_w11wo__indonesian-roberta-base-sentiment-classifier.png ADDED

Git LFS Details

  • SHA256: 527bb866a6e5311940cb6f294710cc916cd700a1daf9b8e53917eb3bff0465e7
  • Pointer size: 130 Bytes
  • Size of remote file: 48.3 kB