VoiceKeeper ยท KLUE-BERT ๋ณด์ด์Šคํ”ผ์‹ฑ ๋ถ„๋ฅ˜๊ธฐ

klue/bert-base๋ฅผ ๋ณด์ด์Šคํ”ผ์‹ฑ/์ •์ƒ ์ด์ง„ ๋ถ„๋ฅ˜๋กœ ํŒŒ์ธํŠœ๋‹ํ•˜๊ณ  int8 ONNX(111 MB)๋กœ ๋‚ด๋ณด๋‚ธ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. VoiceKeeper ์„œ๋น„์Šค์—์„œ LLM ํŒ์ •๊ณผ ๋‚˜๋ž€ํžˆ ์“ฐ์ด๋Š” ๋…๋ฆฝ ์—”์ง„์ž…๋‹ˆ๋‹ค (onnxruntime + tokenizers๋งŒ์œผ๋กœ CPU ์ถ”๋ก ).

ํ•™์Šต ๋ฐ์ดํ„ฐ

  • ์‹œ๋“œ 48๊ฑด: ๊ธˆ์œต๊ฐ๋…์› ๋ณด์ด์Šคํ”ผ์‹ฑ ์ง€ํ‚ด์ด ๊ณต๊ฐœ ์‚ฌ๋ก€ ์œ ํ˜•์„ ๋”ฐ๋ผ ์ˆ˜์ž‘์—… ์ž‘์„ฑ (๊ธฐ๊ด€ ์‚ฌ์นญยท์•ˆ์ „๊ณ„์ขŒยท์ž๋…€ ์‚ฌ์นญยท์Šค๋ฏธ์‹ฑยท๋Œ€์ถœยทํˆฌ์ž ๋“ฑ). ํ•™์Šต์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ถ„ํฌ ๋ฐ– ๊ฒ€์ฆ์—๋งŒ ์‚ฌ์šฉ.
  • ํ•ฉ์„ฑ 1,302๊ฑด: Gemini๋กœ 14๊ฐœ ์‚ฌ๊ธฐ ์œ ํ˜• ร— 3 ํ˜•์‹(ํ†ตํ™” ์ „์‚ฌยท๋ฌธ์žยท์นดํ†ก)๊ณผ 12๊ฐœ ์ •์ƒ ์œ ํ˜•์„ ์ƒ์„ฑ. ์ •์ƒ OTP ๋ฌธ์ž, ์€ํ–‰ ์ž…๊ธˆ ์•Œ๋ฆผ, ํƒ๋ฐฐ ์•ˆ๋‚ด์ฒ˜๋Ÿผ ์‚ฌ๊ธฐ ๋‹จ์–ด๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ์–ด๋ ค์šด ์ •์ƒ ์˜ˆ์‹œ ํฌํ•จ.
  • ํ•™์Šต/๊ฒ€์ฆ ๋ถ„ํ• ์€ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ ์•ˆ์—์„œ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ์†Œ์ˆ˜ ํด๋ž˜์Šค๋Š” ์˜ค๋ฒ„์ƒ˜ํ”Œ๋ง.

์„ฑ๋Šฅ

์„ธํŠธ n ์ •ํ™•๋„ ์ •๋ฐ€๋„ ์žฌํ˜„์œจ F1
ํ•ฉ์„ฑ ๊ฒ€์ฆ 162 0.988 1.000 0.977 0.988
์‹œ๋“œ(๋ถ„ํฌ ๋ฐ–) 48 0.917 1.000 0.833 0.909

int8 ์–‘์žํ™” ์ „ํ›„ ํ™•๋ฅ  ํ‰๊ท  ์ฐจ์ด 0.005. ๋†“์นœ ์‚ฌ๋ก€๋Š” ์ •์ค‘ํ•œ ๋งํˆฌ์˜ ๋Œ€์ถœยทํ™˜๊ธ‰ยท๋ฆฌ๋”ฉ๋ฐฉ ์œ ํ˜•์ด์–ด์„œ ์„œ๋น„์Šค์—์„œ๋Š” LLM ํŒ์ •๊ณผ ์•™์ƒ๋ธ”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ

import numpy as np, onnxruntime as ort
from tokenizers import Tokenizer
tok = Tokenizer.from_file('tokenizer.json'); tok.enable_truncation(192)
sess = ort.InferenceSession('model.onnx', providers=['CPUExecutionProvider'])
e = tok.encode('๊ฒ€์ฐฐ์ฒญ์ž…๋‹ˆ๋‹ค. ์•ˆ์ „ํ•œ ๊ณ„์ขŒ๋กœ ๋ˆ์„ ์˜ฎ๊ธฐ๊ณ  ๊ฐ€์กฑ์—๊ฒŒ๋Š” ๋งํ•˜์ง€ ๋งˆ์„ธ์š”.')
logits = sess.run(['logits'], {'input_ids': [e.ids], 'attention_mask': [e.attention_mask], 'token_type_ids': [e.type_ids]})[0][0]
p = np.exp(logits - logits.max()); print('phishing prob', p[1] / p.sum())

์ฐธ๊ณ ์šฉ ์ ์ˆ˜์ด๋ฉฐ ๋ณด์ •๋œ ์‚ฌ๊ธฐ ํ™•๋ฅ ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‹ค์ œ ์‹ ๊ณ  ์›๋ฌธ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™•๋ณด๋˜๋ฉด scripts/ml/train_klue.py๋กœ ์žฌํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "base_model": "klue/bert-base",
  "task": "voice-phishing vs benign (binary)",
  "max_len": 192,
  "epochs": 3,
  "batch": 16,
  "lr": 3e-05,
  "train_rows": 1232,
  "train_rows_note": "synthetic only, class-balanced by oversampling",
  "val_synthetic": {
    "n": 162,
    "accuracy": 0.988,
    "precision": 1.0,
    "recall": 0.977,
    "f1": 0.988
  },
  "seed_holdout_ood": {
    "n": 48,
    "accuracy": 0.917,
    "precision": 1.0,
    "recall": 0.833,
    "f1": 0.909,
    "note": "hand-written FSS-pattern seeds, never used in training"
  },
  "onnx_int8_mean_abs_diff_vs_fp32": 0.0054,
  "onnx_size_mb": 111.4,
  "cpu_latency_48_texts_s": 0.92,
  "data": {
    "seed": 48,
    "synthetic": 1302,
    "generator": "gemini-3.6-flash / 3.5-flash-lite",
    "hard_negatives": "real OTP, bank, parcel, government notices"
  },
  "trained_at": "2026-09-22 01:25",
  "labels": {
    "0": "benign",
    "1": "phishing"
  }
}
Downloads last month
16
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for hyuckpa03/voicekeeper-klue-bert

Base model

klue/bert-base
Quantized
(2)
this model