Kembali ke Beranda
Whitepaper

Semantic Ticket Classification Engine

Dokumen ini menjelaskan Semantic Ticket Classification Engine, yaitu sistem klasifikasi tiket berbasis BGE-M3 embedding dan Logistic Regression untuk memahami isi tiket secara semantik, bukan hanya mencocokkan kata. Alurnya: teks tiket dibersihkan, diubah menjadi embedding 1024 dimensi oleh BGE-M3, lalu diklasifikasikan menggunakan Logistic Regression dengan hasil berupa probabilitas dan rekomendasi Top-N solusi.

SEMANTIC TICKET CLASSIFICATION ENGINE

Arsitektur, Algoritma, dan Implementasi Semantic Ticket Classification Menggunakan BGE-M3 dan Logistic Regression

Version 2.0

---

Executive Summary

Dokumen ini menjelaskan secara mendalam desain dan implementasi Semantic Ticket Classification Engine yang digunakan untuk mengklasifikasikan tiket berdasarkan histori penyelesaian.

Sistem memanfaatkan:

  1. Transformer Embedding (BGE-M3)
  2. Sentence Transformer Framework
  3. Logistic Regression Multiclass
  4. Probability Ranking
  5. Top-N Recommendation

Pendekatan ini memungkinkan sistem memahami makna tiket secara semantik, bukan sekadar pencocokan kata.

---

BAB 1 โ€“ EVOLUSI SISTEM KLASIFIKASI TEKS

Generasi 1 โ€“ Rule Based

Contoh:

PYTHON
if "login" in text:
   category = "SSO"

Kelebihan:

  • Mudah dibuat
  • Cepat

Kekurangan:

  • Sulit dipelihara
  • Tidak memahami sinonim
  • Tidak memahami konteks

---

Generasi 2 โ€“ Bag Of Words

Representasi:

TEXT
login upload billing token

Tiket:

TEXT
login gagal

diubah menjadi:

TEXT
[1,0,0,0]

Masalah:

Urutan kata hilang.

---

Generasi 3 โ€“ TF-IDF

Mengukur pentingnya kata.

TF:

TF(t,d) = jumlah kemunculan term dalam dokumen

IDF:

IDF(t)=log(N/df)

TF-IDF:

TFIDF = TF ร— IDF

Masalah:

Masih belum memahami makna.

---

Generasi 4 โ€“ Word Embedding

Word2Vec

Contoh:

TEXT
King - Man + Woman โ‰ˆ Queen

Model mulai memahami relasi semantik.

---

Generasi 5 โ€“ Transformer Embedding

Digunakan oleh:

  • BERT
  • E5
  • BGE
  • OpenAI Embedding

Representasi berbasis konteks.

Kata:

TEXT
bank

dapat memiliki makna berbeda tergantung kalimat.

---

BAB 2 โ€“ TRANSFORMER ARCHITECTURE

Transformer diperkenalkan dalam paper:

"Attention Is All You Need" (2017)

Transformer menggantikan:

  • RNN
  • LSTM
  • GRU

---

Mengapa RNN Bermasalah?

Kalimat:

TEXT
Saya tidak bisa login ke CEISA karena token SSO expired

RNN membaca kata satu per satu.

Semakin panjang kalimat:

Semakin sulit mengingat konteks awal.

Disebut:

TEXT
Long-Term Dependency Problem

---

Konsep Attention

Manusia tidak membaca semua kata dengan bobot yang sama.

Kalimat:

TEXT
Saya tidak bisa login karena token expired

Kata penting:

TEXT
login
token
expired

Kata kurang penting:

TEXT
saya
karena

Transformer melakukan hal yang sama.

---

Self Attention

Misalnya:

TEXT
Token SSO expired sehingga login gagal

Ketika membaca kata:

TEXT
gagal

Model melihat seluruh kata lain.

Hubungan:

TEXT
gagal โ†” login
gagal โ†” token
gagal โ†” expired

---

Query, Key, Value

Setiap token diubah menjadi:

Q = Query

K = Key

V = Value

Tujuan:

Menentukan token mana yang harus diperhatikan.

---

Perhitungan Attention:

Attention(Q,K,V)=softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)V

---

Penjelasan:

QKแต€ menghasilkan skor kemiripan.

Semakin besar nilainya:

Semakin penting hubungan kedua token.

---

Multi Head Attention

Transformer tidak hanya memiliki satu attention.

Misalnya:

Head 1:

Hubungan grammar

Head 2:

Hubungan objek

Head 3:

Hubungan semantik

dst.

Output semua head digabungkan.

---

BAB 3 โ€“ TOKENIZATION

Komputer tidak membaca kata.

Komputer membaca token.

Kalimat:

TEXT
Tidak bisa login CEISA

menjadi:

TEXT
["Tidak","bisa","login","CEISA"]

atau

TEXT
["Ti","dak","bisa","login","CE","ISA"]

tergantung tokenizer.

---

Mengapa Tokenisasi Penting?

Model tidak pernah melihat teks asli.

Model hanya melihat ID token.

Misalnya:

TEXT
login = 2481

token = 5291

expired = 7712

---

BAB 4 โ€“ BGE-M3 INTERNAL ARCHITECTURE

Model:

TEXT
BAAI/bge-m3

---

Tahap 1 โ€“ Tokenization

Input:

TEXT
Upload PIB gagal

โ†“

Token

TEXT
[Upload, PIB, gagal]

โ†“

Token ID

TEXT
[1244,8821,3344]

---

Tahap 2 โ€“ Embedding Layer

Setiap token memiliki vector awal.

Contoh:

TEXT
Upload
=
[0.21,0.44,-0.88,...]

---

Tahap 3 โ€“ Positional Encoding

Transformer tidak memahami urutan.

Karena itu posisi ditambahkan.

Contoh:

TEXT
Upload
Posisi 1

PIB Posisi 2

---

Tahap 4 โ€“ Transformer Encoder

Token melewati puluhan layer transformer.

Setiap layer:

  1. Self Attention
  2. Feed Forward Network
  3. Layer Normalization
  4. Residual Connection

---

Tahap 5 โ€“ Pooling

Output transformer:

TEXT
Token1 Vector
Token2 Vector
Token3 Vector

harus menjadi:

TEXT
1 Kalimat = 1 Vector

Proses ini disebut:

Pooling

---

Mean Pooling:

SentenceEmbedding=\frac{1}{n}\sum{i=1}^{n}TokenEmbeddingi

---

Mengapa Hasilnya 1024 Dimensi?

Arsitektur BGE-M3 memiliki hidden dimension:

TEXT
1024

Maka hasil pooling:

TEXT
[0.12,
-0.55,
0.88,
...
1024 angka]

---

BAB 5 โ€“ COSINE SIMILARITY

Setelah embedding terbentuk.

Kita dapat mengukur kemiripan.

Formula:

CosineSimilarity=\frac{A\cdot B}{||A||\ ||B||}

---

Nilai:

1 = identik

0 = tidak berhubungan

-1 = berlawanan

---

BAB 6 โ€“ LOGISTIC REGRESSION DARI NOL

Banyak engineer menggunakan Logistic Regression.

Namun tidak memahami matematika di baliknya.

---

Misalkan embedding disederhanakan menjadi:

TEXT
x = [2,3]

Bobot:

TEXT
w = [0.5,0.8]

Bias:

TEXT
b = -1

---

Hitung Linear Score

z=w^Tx+b

---

Substitusi:

TEXT
z=(2ร—0.5)+(3ร—0.8)-1

z=2.4

---

Sigmoid

Mengubah score menjadi probabilitas.

\sigma(z)=\frac{1}{1+e^{-z}}

---

Substitusi:

TEXT
ฯƒ(2.4)

โ‰ˆ0.916

Interpretasi:

TEXT
91.6%

kemungkinan masuk kategori tersebut.

---

BAB 7 โ€“ MULTICLASS LOGISTIC REGRESSION

Kasus nyata:

Kategori:

TEXT
SSO
Billing
Dokumen
Manifes

Menghasilkan:

TEXT
[2.4,1.2,0.3,-0.5]

---

Softmax

Mengubah score menjadi probabilitas.

P(y=i)=\frac{e^{zi}}{\sumj e^{z_j}}

---

Perhitungan:

eยฒยทโด = 11.02

eยนยทยฒ = 3.32

eโฐยทยณ = 1.35

eโปโฐยทโต = 0.61

Total:

16.30

---

Probabilitas:

SSO:

11.02 / 16.30

= 67.6%

Billing:

20.4%

Dokumen:

8.2%

Manifes:

3.8%

---

BAB 8 โ€“ CROSS ENTROPY LOSS

Misal label sebenarnya:

TEXT
SSO

One Hot:

TEXT
[1,0,0,0]

Prediksi:

TEXT
[0.676,0.204,0.082,0.038]

---

Loss:

L=-\sum yi\log(\hat{yi})

---

Substitusi:

TEXT
L = -log(0.676)

L = 0.391

Semakin kecil loss:

Semakin baik model.

---

BAB 9 โ€“ KOMPLEKSITAS WAKTU

TF-IDF

Training:

O(Nร—V)

N = jumlah dokumen

V = vocabulary

---

Logistic Regression

Training:

O(Nร—D)

D = dimensi embedding

---

Transformer Embedding

Attention:

O(nยฒ)

n = jumlah token

Karena setiap token membandingkan dirinya dengan seluruh token lain.

---

BAB 10 โ€“ PERBANDINGAN ALGORITMA

TF-IDF

  • Cepat
  • Murah
  • Tidak semantik

---

SVM

  • Akurat
  • Lambat pada dataset besar

---

Random Forest

  • Mudah dipahami
  • Kurang cocok untuk embedding dense

---

XGBoost

  • Sangat kuat
  • Hyperparameter kompleks

---

Logistic Regression

  • Cepat
  • Stabil
  • Cocok embedding

---

LLM

  • Pemahaman terbaik
  • Mahal
  • Lambat
  • Sulit dikontrol

---

BAB 11 โ€“ HYPERPARAMETER TUNING

Parameter Logistic Regression:

C

max_iter

solver

class_weight

---

Contoh:

PYTHON
LogisticRegression(
    C=1.0,
    max_iter=5000
)

---

C kecil

โ†“

Regularisasi besar

โ†“

Lebih sederhana

---

C besar

โ†“

Model lebih kompleks

โ†“

Risiko overfitting

---

BAB 12 โ€“ EVALUASI DATASET TIKET CEISA

Dataset ideal:

Minimal:

500 tiket per kategori

Baik:

2000 tiket per kategori

Sangat Baik:

5000 tiket per kategori

---

Distribusi tidak boleh timpang.

Contoh buruk:

SSO = 10.000

Manifes = 50

Billing = 30

---

Model akan bias ke kategori terbesar.

---

BAB 13 โ€“ REKOMENDASI ENTERPRISE

Versi Saat Ini

BGE-M3

*

Logistic Regression

---

Versi Enterprise

BGE-M3

โ†“

Logistic Regression

โ†“

Confidence Threshold

โ†“

LLM Validation

โ†“

Feedback Learning

โ†“

Continuous Retraining

---

Target Akurasi

Top-1 Accuracy: 90โ€“95%

Top-5 Accuracy: 95โ€“99%

pada dataset tiket yang telah dibersihkan dan memiliki kualitas label yang baik.

BAB 14 โ€“ ANALISIS SOURCE CODE BARIS-PER-BARIS

Tujuan bab ini adalah menjelaskan secara detail apa yang sebenarnya terjadi ketika source code dijalankan.

---

Import Library

PYTHON
import json
import re
import pickle

---

json

Digunakan untuk membaca dataset.

Contoh file:

JSON
{
  "detail_tiket": "Upload PIB gagal",
  "kode_solusi": "AL83"
}

Ketika menjalankan:

PYTHON
json.load(f)

Python mengubah file JSON menjadi object Python.

---

re

Digunakan untuk Regular Expression.

Regular Expression adalah bahasa khusus untuk pencarian pola teks.

Contoh:

PYTHON
re.sub(pattern,replacement,text)

digunakan untuk:

  • menghapus email
  • menghapus token
  • menghapus karakter tertentu

---

pickle

Digunakan untuk serialisasi model.

Konsep:

TEXT
Object Python
      โ†“
File
      โ†“
Object Python

Tanpa pickle:

setiap startup aplikasi harus training ulang.

---

Load Dataset

PYTHON
for file in Path(DATA_DIR).glob("*.json")

Artinya:

Cari seluruh file JSON.

Misalnya:

TEXT
ticket_2024.json
ticket_2025.json
ticket_2026.json

Semuanya digabung menjadi satu dataset.

---

Clean Text

PYTHON
clean_text()

Tahap ini sering dianggap sederhana.

Padahal sangat menentukan kualitas model.

Prinsip umum:

TEXT
Garbage In
=
Garbage Out

Jika data kotor:

hasil model buruk.

---

BAB 15 โ€“ MENGAPA NORMALIZEEMBEDDINGS=TRUE SANGAT PENTING

Pada source code:

PYTHON
embedder.encode(
    text,
    normalize_embeddings=True
)

Parameter ini sering dianggap tidak penting.

Padahal sangat krusial.

---

Apa Itu Panjang Vector?

Misalnya:

Vector A

TEXT
[1,1]

Panjang:

โˆš2

---

Vector B

TEXT
[100,100]

Panjang:

141.42

`

CODE
Padahal keduanya mengarah ke arah yang sama.

---

Analogi Dunia Nyata

Bayangkan dua orang menunjuk ke Jakarta.

Orang pertama:

1 meter dari Anda.

Orang kedua:

100 meter dari Anda.

Arah tetap sama.

Tujuan tetap sama.

Yang berbeda hanya jaraknya.

---

Dalam embedding:

Yang penting adalah:

text Arah Semantik `
CODE
Bukan:
text Magnitude
CODE
---

Rumus Normalisasi

\hat{x}=\frac{x}{|x|}

---

Setelah normalisasi:

Semua vector memiliki panjang:

text 1
CODE
---

Mengapa BGE-M3 Sangat Diuntungkan?

BGE-M3 dilatih menggunakan objective berbasis cosine similarity.

Cosine similarity mengasumsikan:

text Semua vector sudah ternormalisasi
CODE
Jika tidak:

hasil similarity menjadi tidak stabil.

---

BAB 16 โ€“ VISUALISASI RUANG VEKTOR 1024 DIMENSI

Secara teoritis.

Setiap tiket menjadi titik.

Misalnya:

text Ticket A = Tidak bisa login
CODE
โ†“
text [0.23,-0.11,0.77,...]
CODE
---
text Ticket B = Token SSO expired
CODE
โ†“
text [0.19,-0.09,0.71,...]
CODE
---

Karena maknanya mirip.

Posisinya dekat.

---

Ilustrasi 2 Dimensi

text Billing

โ—

Login โ—

โ— Token Expired

Manifes โ—

CODE
Pada kenyataannya:

Bukan 2 dimensi.

Melainkan:

text 1024 dimensi
CODE
---

Mengapa Tidak Bisa Digambar?

Manusia hanya bisa memvisualisasikan:

  • 2 dimensi
  • 3 dimensi

Embedding berada pada:

text Rยนโฐยฒโด
CODE
---

PCA dan t-SNE

Untuk visualisasi biasanya digunakan:

PCA

atau

t-SNE

yang mereduksi:

text 1024 dimensi โ†“ 2 dimensi
CODE
---

BAB 17 โ€“ BAGAIMANA predictproba() BEKERJA

Banyak engineer menggunakan:

python clf.predict_proba()
CODE
tanpa mengetahui proses internalnya.

---

Misal embedding:

text x=[0.5,0.8]
CODE
---

Bobot kelas:

text w=[2,3]
CODE
Bias:
text b=-1
CODE
---

Hitung score:

z=w^Tx+b

---

Substitusi:

text z=(2ร—0.5)+(3ร—0.8)-1

z=2.4

CODE
---

Untuk multiclass.

Setiap kategori memiliki score.

Misal:

text AL83 = 2.4

AL55 = 1.7

AL21 = 0.8

CODE
---

Softmax

Mengubah score menjadi probabilitas.

P(y=i)=\frac{e^{zi}}{\sumj e^{z_j}}

---

Hasil:

text AL83 = 0.61

AL55 = 0.27

AL21 = 0.12

CODE
---

Inilah yang dikembalikan:

python predict_proba()
CODE
---

BAB 18 โ€“ TOP 5 RECOMMENDATION ENGINE

Source code:

python idx = prob.argsort()[-5:][::-1]
CODE
---

Proses:

Probabilitas:

text AL83 = 0.61 AL55 = 0.27 AL21 = 0.12 AL44 = 0.04 AL90 = 0.02
CODE
---

Sorting:

text 0.61 0.27 0.12 0.04 0.02
CODE
---

Ambil 5 terbesar.

Operator tidak hanya melihat 1 solusi.

Tetapi beberapa kandidat.

---

BAB 19 โ€“ ANALISIS DATASET TIKET CEISA

Dalam proyek nyata.

Model sering gagal bukan karena algoritma.

Tetapi karena dataset.

---

Noise

Contoh:

text Halo min
CODE
Tidak memiliki informasi.

---

text Mohon dibantu
CODE
Tidak menjelaskan masalah.

---

Noise seperti ini menurunkan akurasi.

---

Duplicate Ticket

Contoh:

text Upload PIB gagal
CODE
muncul:
text 500 kali
CODE
karena tiket hasil copy-paste.

---

Akibat:

Model menjadi bias.

---

Imbalance Dataset

Contoh:

KategoriJumlah
AL8310000
AL55200
AL21100

Model akan cenderung memilih:

text AL83
CODE
---

Visualisasi Dataset Ideal

---

Mislabeled Ticket

Kasus paling berbahaya.

Contoh:

text Token expired
CODE
label:
text Billing
CODE
Padahal seharusnya:
text SSO
CODE
---

Model akan belajar informasi yang salah.

---

BAB 20 โ€“ ARSITEKTUR PRODUKSI ENTERPRISE

Versi source code saat ini:

text CLI โ†“ Embedding โ†“ Classifier
CODE
Cukup untuk PoC.

Belum cukup untuk produksi.

---

Arsitektur Enterprise

text User โ”‚ โ–ผ FastAPI โ”‚ โ”œโ”€โ”€ Redis Cache โ”‚ โ”œโ”€โ”€ BGE-M3 Service โ”‚ โ”œโ”€โ”€ Logistic Regression โ”‚ โ”œโ”€โ”€ PostgreSQL โ”‚ โ”œโ”€โ”€ MLflow Registry โ”‚ โ””โ”€โ”€ Prometheus Monitoring
CODE
---

FastAPI

Berfungsi sebagai API Layer.

Endpoint:

http POST /predict
CODE
Input:
json { "ticket":"Upload PIB gagal" }
CODE
Output:
json { "prediction":"AL83", "confidence":0.91 }
CODE
---

Redis

Digunakan sebagai cache.

Jika tiket yang sama muncul:

text Upload PIB gagal
CODE
hasil langsung diambil dari cache.

Tanpa inferensi ulang.

---

PostgreSQL

Menyimpan:

  • tiket
  • hasil prediksi
  • feedback user
  • audit log

---

MLflow

Digunakan untuk:

  • model versioning
  • experiment tracking
  • model registry

---

Contoh:

text Model V1 Accuracy 91%
CODE
text Model V2 Accuracy 94% ```

---

Prometheus

Monitoring:

  • response time
  • error rate
  • prediction count
  • memory usage

---

Roadmap Enterprise

V1 Semantic Classification

V2 Confidence Threshold

V3 LLM Validation

V4 Active Learning

V5 Auto Retraining

V6 Autonomous Ticket Routing

Target akhir adalah sistem yang tidak hanya mengklasifikasikan tiket, tetapi juga menentukan solusi, assignment group, prioritas, dan routing secara otomatis berdasarkan histori penyelesaian.

classificationsemantic searchbge-m3logistic regression