Instructions to use nectec/pathumma-crossborder-guardrail with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use nectec/pathumma-crossborder-guardrail with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="nectec/pathumma-crossborder-guardrail", trust_remote_code=True)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("nectec/pathumma-crossborder-guardrail", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
Pathumma Cross-border Guardrail (OpenThai-SystemOne fine-tune)
โมเดลตัดสินใจ (decision model) ~0.8B สำหรับใช้เป็น guardrail ชั้นแรก ก่อน route prompt ไปยัง LLM: จำแนกว่าข้อความมี ข้อมูลประเภทใด (7 หมวด) แล้ว map เป็น สิทธิ์ส่งประมวลผลนอกประเทศ (3 ระดับ) ตาม PDPA และ ETDA Generative AI Governance Guideline ไม่ใช่โมเดล generative — คืน calibrated probability เหนือ option ที่กำหนด ใน forward pass เดียว
Intended use
ใช้ตัดสิน routing (foreign API vs sovereign/on-prem) เป็นชั้นแรกร่วมกับ regex/DLP pre-filter สำหรับข้อความไทย/อังกฤษในบริบทองค์กรไทย ไม่ได้ ออกแบบมาตรวจเนื้อหาอันตราย (violence, CSAM, hate) — ต้องมี content-safety guardrail แยก
Taxonomy
| # | key | คำอธิบาย | routing |
|---|---|---|---|
| 1 | public |
ความรู้ทั่วไป งานเขียน โค้ด หรือคำถามเชิงแนวคิด ที่ไม่มีชื่อ… | foreign_ok |
| 2 | pdpa_general |
มีข้อมูลระบุตัวบุคคลจริง เช่น ชื่อ-สกุล เบอร์โทร อีเมล ที่อย… | conditional |
| 3 | pdpa_sensitive |
มีข้อมูลบุคคลจริงประเภทอ่อนไหว: สุขภาพ/โรค/ผลตรวจ พันธุกรรม … | sovereign_only |
| 4 | confidential |
เอกสารบริหาร/การเงิน/กฎหมายภายในของบริษัทเอกชน ที่ยังไม่เปิด… | sovereign_only |
| 5 | system_secret |
มี credential หรือรายละเอียดเทคนิคของระบบ: API key รหัสผ่าน … | sovereign_only |
| 6 | govt_classified |
เอกสารของหน่วยงานรัฐ/ทหาร/ตำรวจ/ข่าวกรอง ที่มีชั้นความลับ (ล… | sovereign_only |
| 7 | trade_secret |
ทรัพย์สินทางปัญญาเชิงเทคนิค/วิจัย ที่ยังไม่เปิดเผย: สูตรการผ… | conditional |
conditional = ส่งได้เฉพาะผู้ให้บริการที่มี SCC/BCR/Enterprise DPA พร้อมข้อ no-train หรือมีความยินยอม · sovereign_only = ประมวลผลในประเทศเท่านั้น
How to use
โมเดลถูก fine-tune กับ instructions + criteria ชุดเดียว ซึ่งเก็บใน guardrail_config.json
import json
from openthai_systemone import SystemOneClient, Choice
from huggingface_hub import hf_hub_download
cfg = json.load(open(hf_hub_download("nectec/pathumma-crossborder-guardrail", "guardrail_config.json")))
client = SystemOneClient("nectec/pathumma-crossborder-guardrail")
resp = client.system_one(state={"prompt": "ช่วยสรุปผลตรวจสุขภาพของ นายสมชาย ใจดี HN 123456"},
questions={"data_sensitivity": Choice(instructions=cfg["instructions"], criteria=cfg["criteria"])})
a = resp.answers["data_sensitivity"]
print(a.choice, cfg["routing"][a.choice], round(a.confidence, 3))
Wrapper พร้อม pre-filter/fail-closed: guardrail.py · FastAPI + OpenAI-compatible /v1/moderations: serve.py
Training
- Base:
iapp/OpenThai-SystemOne· full fine-tune backbone + slot head ด้วย loss ที่มากับโมเดล (CE + label_smoothing 0.05 + brier 0.1), shuffle ลำดับ option ทุก batch, temperature calibrate แยกบน held-out val - AdamW lr backbone 1e-05 / head 0.0001, batch 8, ≤4 epochs + early stopping (best epoch n/a), bf16 autocast
- Data: synthetic 3,500 ตัวอย่าง (500/หมวด) จาก template 20-39 แบบต่อหมวด — ชื่อ/เลขบัตร/เบอร์/องค์กร สมมติทั้งหมด, credential ในหมวด 5 เป็น placeholder
- Split ระดับ template 60/15/25 → val/test เป็นรูปประโยคที่ไม่เคยเห็น
Evaluation (template-held-out test, n = 880)
| model | accuracy | macro-F1 |
|---|---|---|
| base zero-shot | 0.8557 | 0.8544 |
| fine-tuned (this repo) | 0.9284 | 0.9267 |
precision recall f1-score support
public 0.953 0.865 0.907 141
pdpa_general 0.867 1.000 0.929 130
pdpa_sensitive 1.000 0.821 0.902 112
confidential 0.745 1.000 0.854 108
system_secret 1.000 1.000 1.000 137
govt_classified 1.000 0.992 0.996 126
trade_secret 1.000 0.817 0.900 126
accuracy 0.928 880
macro avg 0.938 0.928 0.927 880
weighted avg 0.941 0.928 0.929 880
Confusion matrix (rows=gold, cols=pred, 1..7):
[[122 0 0 19 0 0 0]
[ 0 130 0 0 0 0 0]
[ 0 20 92 0 0 0 0]
[ 0 0 0 108 0 0 0]
[ 0 0 0 0 137 0 0]
[ 0 0 0 1 0 125 0]
[ 6 0 0 17 0 0 103]]
Calibration: T = 1.068 (val NLL 0.2766 → 0.2766)
Coverage vs accuracy ตาม confidence threshold (ใช้ตั้ง min_confidence, ค่าเริ่มต้น 0.6):
| threshold | coverage | acc on kept |
|---|---|---|
| 0.5 | 0.993 | 0.935 |
| 0.6 | 0.989 | 0.938 |
| 0.7 | 0.981 | 0.944 |
| 0.8 | 0.975 | 0.946 |
| 0.9 | 0.951 | 0.964 |
Limitations
- ข้อมูลฝึกเป็น synthetic จาก template — ผลบน prompt จริงอาจต่ำกว่านี้ ควร shadow-deploy และ label ข้อมูลจริงเพิ่ม
- ไม่ได้เทรนให้จำ secret จริง → ต้องมี regex/entropy pre-filter เสมอ (มีใน
guardrail.py) - single-label: ข้อความหลายประเภทได้หมวดเข้มงวดสุดตาม priority rule
- ไม่ครอบคลุม content safety · base model มี order sensitivity สำหรับ ≤10 options (fine-tune ด้วย shuffle ช่วยลด)
- ควร fail-closed: confidence ต่ำ/abstain สูง/error →
sovereign_only
Deployment
รันโมเดลนี้ on-prem/ในประเทศเสมอ · pipeline pre-filter → model → threshold → routing · log ทุก decision · เก็บเคส needs_review ส่ง human label แล้ว fine-tune รอบถัดไป
Acknowledgements
Base model และ pipeline โดย iApp Technology (OpenThai-SystemOne, Apache-2.0) ซึ่งได้แรงบันดาลใจจาก TypeSafe AI System One. Taxonomy อ้างอิง ETDA AI Governance Center
Author: Sarawoot Kongyoung, NECTEC/AINRG · Contact: sarawoot.kon@nectec.or.th
- Downloads last month
- 67
Model tree for nectec/pathumma-crossborder-guardrail
Evaluation results
- Accuracy on Template-held-out test setself-reported0.928
- Macro-F1 on Template-held-out test setself-reported0.927