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:

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:

login upload billing token

Tiket:

login gagal

diubah menjadi:

[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:

King - Man + Woman ≈ Queen

Model mulai memahami relasi semantik.


Generasi 5 – Transformer Embedding

Digunakan oleh:

  • BERT
  • E5
  • BGE
  • OpenAI Embedding

Representasi berbasis konteks.

Kata:

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:

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:

Long-Term Dependency Problem

Konsep Attention

Manusia tidak membaca semua kata dengan bobot yang sama.

Kalimat:

Saya tidak bisa login karena token expired

Kata penting:

login
token
expired

Kata kurang penting:

saya
karena

Transformer melakukan hal yang sama.


Self Attention

Misalnya:

Token SSO expired sehingga login gagal

Ketika membaca kata:

gagal

Model melihat seluruh kata lain.

Hubungan:

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:

Tidak bisa login CEISA

menjadi:

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

atau

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

tergantung tokenizer.


Mengapa Tokenisasi Penting?

Model tidak pernah melihat teks asli.

Model hanya melihat ID token.

Misalnya:

login = 2481

token = 5291

expired = 7712

BAB 4 – BGE-M3 INTERNAL ARCHITECTURE

Model:

BAAI/bge-m3

Tahap 1 – Tokenization

Input:

Upload PIB gagal

Token

[Upload, PIB, gagal]

Token ID

[1244,8821,3344]

Tahap 2 – Embedding Layer

Setiap token memiliki vector awal.

Contoh:

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

Tahap 3 – Positional Encoding

Transformer tidak memahami urutan.

Karena itu posisi ditambahkan.

Contoh:

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:

Token1 Vector
Token2 Vector
Token3 Vector

harus menjadi:

1 Kalimat = 1 Vector

Proses ini disebut:

Pooling


Mean Pooling:

SentenceEmbedding=\frac{1}{n}\sum_{i=1}^{n}TokenEmbedding_i


Mengapa Hasilnya 1024 Dimensi?

Arsitektur BGE-M3 memiliki hidden dimension:

1024

Maka hasil pooling:

[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:

x = [2,3]

Bobot:

w = [0.5,0.8]

Bias:

b = -1

Hitung Linear Score

z=w^Tx+b


Substitusi:

z=(2×0.5)+(3×0.8)-1

z=2.4

Sigmoid

Mengubah score menjadi probabilitas.

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


Substitusi:

σ(2.4)

≈0.916

Interpretasi:

91.6%

kemungkinan masuk kategori tersebut.


BAB 7 – MULTICLASS LOGISTIC REGRESSION

Kasus nyata:

Kategori:

SSO
Billing
Dokumen
Manifes

Menghasilkan:

[2.4,1.2,0.3,-0.5]

Softmax

Mengubah score menjadi probabilitas.

P(y=i)=\frac{e^{z_i}}{\sum_j 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:

SSO

One Hot:

[1,0,0,0]

Prediksi:

[0.676,0.204,0.082,0.038]

Loss:

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


Substitusi:

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:

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

import json
import re
import pickle

json

Digunakan untuk membaca dataset.

Contoh file:

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

Ketika menjalankan:

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:

re.sub(pattern,replacement,text)

digunakan untuk:

  • menghapus email
  • menghapus token
  • menghapus karakter tertentu

pickle

Digunakan untuk serialisasi model.

Konsep:

Object Python
      ↓
File
      ↓
Object Python

Tanpa pickle:

setiap startup aplikasi harus training ulang.


Load Dataset

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

Artinya:

Cari seluruh file JSON.

Misalnya:

ticket_2024.json
ticket_2025.json
ticket_2026.json

Semuanya digabung menjadi satu dataset.


Clean Text

clean_text()

Tahap ini sering dianggap sederhana.

Padahal sangat menentukan kualitas model.

Prinsip umum:

Garbage In
=
Garbage Out

Jika data kotor:

hasil model buruk.


BAB 15 – MENGAPA NORMALIZE_EMBEDDINGS=TRUE SANGAT PENTING

Pada source code:

embedder.encode(
    text,
    normalize_embeddings=True
)

Parameter ini sering dianggap tidak penting.

Padahal sangat krusial.


Apa Itu Panjang Vector?

Misalnya:

Vector A

[1,1]

Panjang:

√2


Vector B

[100,100]

Panjang:

141.42


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

Bukan:

Magnitude

Rumus Normalisasi

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


Setelah normalisasi:

Semua vector memiliki panjang:

1

Mengapa BGE-M3 Sangat Diuntungkan?

BGE-M3 dilatih menggunakan objective berbasis cosine similarity.

Cosine similarity mengasumsikan:

Semua vector sudah ternormalisasi

Jika tidak:

hasil similarity menjadi tidak stabil.


BAB 16 – VISUALISASI RUANG VEKTOR 1024 DIMENSI

Secara teoritis.

Setiap tiket menjadi titik.

Misalnya:

Ticket A
=
Tidak bisa login

[0.23,-0.11,0.77,...]

Ticket B
=
Token SSO expired

[0.19,-0.09,0.71,...]

Karena maknanya mirip.

Posisinya dekat.


Ilustrasi 2 Dimensi

                 Billing

                    ●


      Login
        ●

             ●
      Token Expired


                              Manifes
                                 ●

Pada kenyataannya:

Bukan 2 dimensi.

Melainkan:

1024 dimensi

Mengapa Tidak Bisa Digambar?

Manusia hanya bisa memvisualisasikan:

  • 2 dimensi
  • 3 dimensi

Embedding berada pada:

R¹⁰²⁴

PCA dan t-SNE

Untuk visualisasi biasanya digunakan:

PCA

atau

t-SNE

yang mereduksi:

1024 dimensi
↓
2 dimensi

BAB 17 – BAGAIMANA predict_proba() BEKERJA

Banyak engineer menggunakan:

clf.predict_proba()

tanpa mengetahui proses internalnya.


Misal embedding:

x=[0.5,0.8]

Bobot kelas:

w=[2,3]

Bias:

b=-1

Hitung score:

z=w^Tx+b


Substitusi:

z=(2×0.5)+(3×0.8)-1

z=2.4

Untuk multiclass.

Setiap kategori memiliki score.

Misal:

AL83 = 2.4

AL55 = 1.7

AL21 = 0.8

Softmax

Mengubah score menjadi probabilitas.

P(y=i)=\frac{e^{z_i}}{\sum_j e^{z_j}}


Hasil:

AL83 = 0.61

AL55 = 0.27

AL21 = 0.12

Inilah yang dikembalikan:

predict_proba()

BAB 18 – TOP 5 RECOMMENDATION ENGINE

Source code:

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

Proses:

Probabilitas:

AL83 = 0.61
AL55 = 0.27
AL21 = 0.12
AL44 = 0.04
AL90 = 0.02

Sorting:

0.61
0.27
0.12
0.04
0.02

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:

Halo min

Tidak memiliki informasi.


Mohon dibantu

Tidak menjelaskan masalah.


Noise seperti ini menurunkan akurasi.


Duplicate Ticket

Contoh:

Upload PIB gagal

muncul:

500 kali

karena tiket hasil copy-paste.


Akibat:

Model menjadi bias.


Imbalance Dataset

Contoh:

KategoriJumlah
AL8310000
AL55200
AL21100

Model akan cenderung memilih:

AL83

Visualisasi Dataset Ideal


Mislabeled Ticket

Kasus paling berbahaya.

Contoh:

Token expired

label:

Billing

Padahal seharusnya:

SSO

Model akan belajar informasi yang salah.


BAB 20 – ARSITEKTUR PRODUKSI ENTERPRISE

Versi source code saat ini:

CLI
↓
Embedding
↓
Classifier

Cukup untuk PoC.

Belum cukup untuk produksi.


Arsitektur Enterprise

User
 │
 ▼
FastAPI
 │
 ├── Redis Cache
 │
 ├── BGE-M3 Service
 │
 ├── Logistic Regression
 │
 ├── PostgreSQL
 │
 ├── MLflow Registry
 │
 └── Prometheus Monitoring

FastAPI

Berfungsi sebagai API Layer.

Endpoint:

POST /predict

Input:

{
  "ticket":"Upload PIB gagal"
}

Output:

{
  "prediction":"AL83",
  "confidence":0.91
}

Redis

Digunakan sebagai cache.

Jika tiket yang sama muncul:

Upload PIB gagal

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:

Model V1
Accuracy 91%
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
Nirantara Logo

Published by Nirantara

Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by admin.

Learn more about Nirantara