SynapseSmith/Beaver_ARS

Python

0

9 commits

updated Dec 12, 2025

See the code

README

๐Ÿฆซ Beaver ARS - AI-Powered Automatic Response System

Python PyTorch Transformers Flask Docker License

KLUE/RoBERTa-Large ๊ธฐ๋ฐ˜ Intent Classification (48 classes) + NER (6 entities)์„ ํ™œ์šฉํ•œ ๋ ˆ์Šคํ† ๋ž‘ ์ž๋™ ์‘๋‹ต ์‹œ์Šคํ…œ
๊ณ ๊ฐ ๋ฌธ์˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ดํ•ดํ•˜๊ณ , ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ + SQL DB ๊ธฐ๋ฐ˜ ์ •ํ™•ํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ์ฑ—๋ด‡ ์†”๋ฃจ์…˜


๐Ÿ“‹ ๋ชฉ์ฐจ


๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ ˆ์Šคํ† ๋ž‘ ๋ฐ ์„œ๋น„์Šค ์—…์ข…์˜ ๋ฐ˜๋ณต์ ์ธ ๊ณ ๊ฐ ๋ฌธ์˜(๋ฉ”๋‰ด, ์˜์—…์‹œ๊ฐ„, ๊ฒฐ์ œ ๋ฐฉ๋ฒ• ๋“ฑ)๋ฅผ AI๋กœ ์ž๋™ํ™”ํ•˜์—ฌ 24/7 ๊ณ ๊ฐ ์‘๋Œ€๋ฅผ ์‹คํ˜„ํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ฑ—๋ด‡ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ ํ•ต์‹ฌ ๋ชฉํ‘œ

  • ๋†’์€ ์ •ํ™•๋„: Intent 97.7%, NER 99.5% F1-Score
  • ๋น ๋ฅธ ์‘๋‹ต: 1์ดˆ ์ด๋‚ด ์‘๋‹ต ์ƒ์„ฑ
  • ํ”„๋กœ๋•์…˜ ์ค€๋น„: Docker + Nginx + Prometheus ๋ชจ๋‹ˆํ„ฐ๋ง
  • ํ™•์žฅ ๊ฐ€๋Šฅ: 48๊ฐœ Intent, ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ ์ ์šฉ ๊ฐ€๋Šฅ

๐Ÿ† ํ•ต์‹ฌ ์„ฑ๊ณผ

ํ•ญ๋ชฉ์„ฑ๋Šฅ๋น„๊ณ 
Intent ClassificationAccuracy 97.7%KLUE/RoBERTa-Large
NER ModelF1-Score 99.5%Macro-averaged
์‘๋‹ต ์‹œ๊ฐ„< 1์ดˆIntent + NER + Search + DB
๋ฐ์ดํ„ฐ์…‹2,856 samples48 intents, 6 entity types
๋™์‹œ ์ฒ˜๋ฆฌ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ง€์›Gunicorn multi-worker

๐Ÿ—๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        User Interface                       โ”‚
โ”‚              (Web UI / REST API / WebSocket)                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ”‚
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚      Nginx (Reverse Proxy)  โ”‚
            โ”‚  - Rate Limiting (100 req/m)โ”‚
            โ”‚  - SSL/TLS Termination      โ”‚
            โ”‚  - Load Balancing           โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ”‚
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚    Flask Application Server โ”‚
            โ”‚  (Gunicorn 4 workers)       โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚                  โ”‚                  โ”‚
   โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚ Intent  โ”‚      โ”‚ NER Model   โ”‚   โ”‚   Redis     โ”‚
   โ”‚Classifierโ”‚     โ”‚(Token Class)โ”‚   โ”‚   Cache     โ”‚
   โ”‚ 48 cls  โ”‚      โ”‚  6 entities โ”‚   โ”‚             โ”‚
   โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
        โ”‚                  โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚   Hybrid Search Engine  โ”‚
        โ”‚  - BM25 (40%)           โ”‚
        โ”‚  - Sentence-BERT (60%)  โ”‚
        โ”‚  - Cosine Similarity    โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚   SQL Database (MySQL)  โ”‚
        โ”‚  - Menus Table          โ”‚
        โ”‚  - Business Info        โ”‚
        โ”‚  - Conversation Logs    โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚   Response Generator    โ”‚
        โ”‚  - Slot Filling         โ”‚
        โ”‚  - Template Engine      โ”‚
        โ”‚  - TTS Integration      โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ–ผ
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚   Output    โ”‚
            โ”‚ (JSON/Text) โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   Monitoring Stack                          โ”‚
โ”‚  Prometheus โ†’ Metrics Collection                            โ”‚
โ”‚  Grafana โ†’ Real-time Dashboards                             โ”‚
โ”‚  Node Exporter โ†’ System Metrics                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

1. ๐Ÿง  ์ •๋ฐ€ํ•œ ์ž์—ฐ์–ด ์ดํ•ด (NLU)

Intent Classification - 48๊ฐœ ์„ธ๋ถ„ํ™”๋œ ์˜๋„ ๋ถ„๋ฅ˜

๐Ÿ“Œ ๋ฉ”๋‰ด (11๊ฐœ): ์นดํ…Œ๊ณ ๋ฆฌ, ๊ฐ€๊ฒฉ, ์˜ต์…˜, ์ธ๊ธฐ/์ถ”์ฒœ, ํ• ์ธ, ์‹ ๋ฉ”๋‰ด ๋“ฑ
๐Ÿ“Œ ์ฃผ๋ฌธ/๊ฒฐ์ œ (5๊ฐœ): ์ฃผ๋ฌธ ๋ฐฉ์‹, ๊ฒฐ์ œ ์ˆ˜๋‹จ, ๊ฐœ๋ณ„ ๊ฒฐ์ œ ๋“ฑ
๐Ÿ“Œ ์˜์—… ์ •๋ณด (6๊ฐœ): ์˜์—…์‹œ๊ฐ„, ํœด๋ฌด์ผ, ๋ธŒ๋ ˆ์ดํฌ ํƒ€์ž„, ํŠน์ • ์š”์ผ ๋“ฑ
๐Ÿ“Œ ๋ฐฐ๋‹ฌ (3๊ฐœ): ๋ฐฐ๋‹ฌ ์ง€์—ญ, ๋ฐฐ๋‹ฌ๋น„, ์ตœ์†Œ ์ฃผ๋ฌธ ๊ธˆ์•ก
๐Ÿ“Œ ์‹œ์„ค (7๊ฐœ): ์ฃผ์†Œ, ์ฃผ์ฐจ, ์ขŒ์„, ๋‹จ์ฒด์„, ํ…Œ๋ผ์Šค ๋“ฑ
๐Ÿ“Œ ํ˜œํƒ (8๊ฐœ): ๋ฉค๋ฒ„์‹ญ, ํฌ์ธํŠธ, ์ฟ ํฐ, ์ด๋ฒคํŠธ ๋“ฑ
๐Ÿ“Œ ๊ธฐํƒ€ (8๊ฐœ): ๊ฐ์‚ฌ, ์ธ์‚ฌ, Fallback ๋“ฑ

Named Entity Recognition - 6๊ฐœ ์—”ํ‹ฐํ‹ฐ ์ถ”์ถœ

{
  "MENU": ["๋–ก๋ณถ์ด", "๊น€๋ฐฅ"],        # B-MENU, I-MENU
  "PAYMENT": ["์นด๋“œ", "์ œ๋กœํŽ˜์ด"],   # B-PAYMENT, I-PAYMENT
  "DAY": ["์›”์š”์ผ"]                 # B-DAY
}

2. ๐Ÿ” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ์—”์ง„

# ํ‚ค์›Œ๋“œ + ์˜๋ฏธ ์œ ์‚ฌ๋„ ๊ฒฐํ•ฉ
final_score = 0.4 * BM25_score + 0.6 * SBERT_score
  • BM25: ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ์ •ํ™• ๋งค์นญ (Lexical)
  • Sentence-BERT: ์˜๋ฏธ ๊ธฐ๋ฐ˜ ์œ ์‚ฌ๋„ (Semantic)
  • TF-IDF: ๋ณด์กฐ ๊ฒ€์ƒ‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜

3. ๐Ÿ“Š SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™

  • ๋™์  ์‘๋‹ต ์ƒ์„ฑ: DB์—์„œ ์‹ค์‹œ๊ฐ„ ๋ฉ”๋‰ด/๊ฐ€๊ฒฉ ์กฐํšŒ
  • Slot Filling: NER ์ถ”์ถœ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‘๋‹ต ํ…œํ”Œ๋ฆฟ์— ์‚ฝ์ž…
  • MySQL/SQLite ์ง€์›: ํ”„๋กœ๋•์…˜/๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ

4. ๐Ÿš€ ํ”„๋กœ๋•์…˜๊ธ‰ ์ธํ”„๋ผ

  • Docker ์ปจํ…Œ์ด๋„ˆํ™”: ์ผ๊ด€๋œ ๋ฐฐํฌ ํ™˜๊ฒฝ
  • Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ: Rate limiting, SSL/TLS
  • Prometheus + Grafana: ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
  • CI/CD: GitHub Actions ์ž๋™ ๋ฐฐํฌ

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๐Ÿค– Machine Learning & NLP

CategoryTechnologyVersion
FrameworkPyTorch2.7.0 (CUDA 12.4)
TransformersHugging Face4.57.1
Pre-trained ModelKLUE/RoBERTa-Large1024 hidden, 24 layers
SearchSentence-BERTparaphrase-multilingual-MiniLM-L12-v2
Evaluationseqeval, scikit-learn1.2.2, 1.2.0
Experiment TrackingW&B0.15+

๐ŸŒ Backend & Infrastructure

CategoryTechnologyPurpose
Web ServerFlask 2.0+REST API
WSGIGunicornProduction server (4 workers)
DatabaseMySQL 8.0Data storage
CacheRedis 7.0Response caching
ProxyNginxRate limiting, SSL/TLS
ContainerDocker 24.0+Containerization

๐Ÿ“Š Monitoring & DevOps

  • Metrics: Prometheus (time-series metrics)
  • Visualization: Grafana (real-time dashboards)
  • CI/CD: GitHub Actions
  • Logging: Python logging module

๐Ÿ” Search Engine Components

  • BM25: Keyword-based exact matching (rank-bm25)
  • Sentence-BERT: Semantic similarity
  • TF-IDF: Fallback search mechanism

๐Ÿ’ป Hardware Requirements

  • Training: NVIDIA RTX 5090 32GB VRAM
  • Production: 8+ CPU cores, 16GB RAM
  • Storage: 50GB+ (models + data + logs)

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Beaver_ARS/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“„ README.md                    # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ
โ”œโ”€โ”€ ๐Ÿ“„ DATA_GUIDE.md                # ๋ฐ์ดํ„ฐ์…‹ ๊ฐ€์ด๋“œ
โ”œโ”€โ”€ ๐Ÿ“„ requirements.txt             # Python ์˜์กด์„ฑ
โ”œโ”€โ”€ ๐Ÿ“„ train.sh                     # ์ž๋™ํ™”๋œ ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ ๐Ÿ“„ train_quick.py               # ๋น ๋ฅธ ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ ๐Ÿ“„ docker-compose.yml           # ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ์„ค์ •
โ”œโ”€โ”€ ๐Ÿ“„ Dockerfile                   # ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ •์˜
โ”œโ”€โ”€ ๐Ÿ“„ gunicorn_config.py           # WSGI ์„œ๋ฒ„ ์„ค์ •
โ”œโ”€โ”€ ๐Ÿ“„ deploy.sh                    # ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ ๐Ÿ“„ rollback.sh                  # ๋กค๋ฐฑ ์Šคํฌ๋ฆฝํŠธ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ data/                        # ๋ฐ์ดํ„ฐ์…‹
โ”‚   โ”œโ”€โ”€ train/
โ”‚   โ”‚   โ”œโ”€โ”€ intent_data.csv         # Intent ํ•™์Šต ๋ฐ์ดํ„ฐ (2,824 samples)
โ”‚   โ”‚   โ””โ”€โ”€ ner_data.conll          # NER ํ•™์Šต ๋ฐ์ดํ„ฐ (CoNLL format)
โ”‚   โ”œโ”€โ”€ sample/                     # ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ
โ”‚   โ””โ”€โ”€ processed/                  # ์ „์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ (์ž๋™ ์ƒ์„ฑ)
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ src/                         # ์†Œ์Šค ์ฝ”๋“œ
โ”‚   โ”œโ”€โ”€ intent_mapping.py           # Intent ๋ผ๋ฒจ ๋งคํ•‘
โ”‚   โ”œโ”€โ”€ intent_training.py          # Intent ๋ถ„๋ฅ˜ ํ•™์Šต
โ”‚   โ”œโ”€โ”€ intent_inference.py         # Intent ์ถ”๋ก 
โ”‚   โ”œโ”€โ”€ intent_evaluation.py        # Intent ํ‰๊ฐ€
โ”‚   โ”œโ”€โ”€ ner_training.py             # NER ํ•™์Šต
โ”‚   โ”œโ”€โ”€ ner_evaluation.py           # NER ํ‰๊ฐ€
โ”‚   โ”œโ”€โ”€ response_templates.py       # ์‘๋‹ต ํ…œํ”Œ๋ฆฟ
โ”‚   โ”œโ”€โ”€ main_ars_system.py          # ํ†ตํ•ฉ ARS ์‹œ์Šคํ…œ (๋ฉ”์ธ)
โ”‚   โ”œโ”€โ”€ web_server.py               # Flask ์›น ์„œ๋ฒ„
โ”‚   โ””โ”€โ”€ main_system.py              # ์‹œ์Šคํ…œ ์—”ํŠธ๋ฆฌํฌ์ธํŠธ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ models/                      # ํ•™์Šต๋œ ๋ชจ๋ธ
โ”‚   โ”œโ”€โ”€ intent_classifier/          # Intent ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ
โ”‚   โ””โ”€โ”€ ner_model/                  # NER ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ templates/                   # HTML ํ…œํ”Œ๋ฆฟ
โ”‚   โ””โ”€โ”€ index.html                  # ์›น UI
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ static/                      # ์ •์  ํŒŒ์ผ
โ”‚   โ”œโ”€โ”€ css/
โ”‚   โ”œโ”€โ”€ js/
โ”‚   โ””โ”€โ”€ audio/                      # TTS ์˜ค๋””์˜ค ํŒŒ์ผ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ config/                      # ์„ค์ • ํŒŒ์ผ
โ”‚   โ”œโ”€โ”€ config.yaml                 # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •
โ”‚   โ””โ”€โ”€ database.yaml               # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ database/                    # DB ์ดˆ๊ธฐํ™”
โ”‚   โ”œโ”€โ”€ init.sql                    # ์Šคํ‚ค๋งˆ ๋ฐ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ
โ”‚   โ””โ”€โ”€ my.cnf                      # MySQL ์„ค์ •
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ nginx/                       # Nginx ์„ค์ •
โ”‚   โ””โ”€โ”€ nginx.conf                  # ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ •
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ monitoring/                  # ๋ชจ๋‹ˆํ„ฐ๋ง
โ”‚   โ”œโ”€โ”€ prometheus.yml              # Prometheus ์„ค์ •
โ”‚   โ””โ”€โ”€ grafana/                    # Grafana ๋Œ€์‹œ๋ณด๋“œ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ logs/                        # ๋กœ๊ทธ ํŒŒ์ผ (์ž๋™ ์ƒ์„ฑ)
โ”‚   โ””โ”€โ”€ YYYY-MM-DD/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ tests/                       # ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
โ”‚   โ”œโ”€โ”€ test_intent_classification.py
โ”‚   โ”œโ”€โ”€ test_ner_model.py
โ”‚   โ””โ”€โ”€ test_api_endpoints.py
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ scripts/                     # ์œ ํ‹ธ๋ฆฌํ‹ฐ ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ””โ”€โ”€ data_preprocessing.py
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ docs/                        # ์ƒ์„ธ ๋ฌธ์„œ
โ”‚   โ”œโ”€โ”€ ARCHITECTURE.md
โ”‚   โ”œโ”€โ”€ API_REFERENCE.md
โ”‚   โ””โ”€โ”€ DEPLOYMENT.md
โ”‚
โ””โ”€โ”€ ๐Ÿ“‚ .github/                     # CI/CD
    โ””โ”€โ”€ workflows/
        โ””โ”€โ”€ ci-cd.yml               # GitHub Actions

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. ํ™˜๊ฒฝ ์„ค์ •

# ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋ก 
git clone https://github.com/SynapseSmith/Beaver_ARS.git
cd Beaver_ARS

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ (๊ถŒ์žฅ)
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

2. ๋ฐ์ดํ„ฐ ์ค€๋น„

๋ฐ์ดํ„ฐ๋Š” data/train/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • intent_data.csv: 2,856๊ฐœ Intent ์ƒ˜ํ”Œ
  • ner_data.conll: 2,170์ค„ NER ๋ผ๋ฒจ๋ง ๋ฐ์ดํ„ฐ

์ƒ์„ธํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” DATA_GUIDE.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

3. ๋ชจ๋ธ ํ•™์Šต (์„ ํƒ์‚ฌํ•ญ)

์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# ์ž๋™ํ™”๋œ ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ (๊ถŒ์žฅ)
chmod +x train.sh
./train.sh

# ๋˜๋Š” ๋น ๋ฅธ ํ•™์Šต (์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ)
python train_quick.py

4. ์„œ๋ฒ„ ์‹คํ–‰

# Flask ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
cd src
python web_server.py

# ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘์†
# http://localhost:5000

5. API ํ…Œ์ŠคํŠธ

curl -X POST http://localhost:5000/chat \
  -H "Content-Type: application/json" \
  -d '{"text": "๋–ก๋ณถ์ด ๊ฐ€๊ฒฉ์ด ์–ผ๋งˆ์˜ˆ์š”?"}'

๐ŸŽ“ ๋ชจ๋ธ ํ•™์Šต

์ž๋™ํ™”๋œ ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ (train.sh)

./train.sh

7๋‹จ๊ณ„ ์ž๋™ ์‹คํ–‰:

  1. โœ… Prerequisites ํ™•์ธ (Python, GPU, packages)
  2. โœ… ๋””๋ ‰ํ† ๋ฆฌ ์ค€๋น„
  3. โœ… ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
  4. โœ… Intent Classification ํ•™์Šต (50 epochs)
  5. โœ… Intent ๋ชจ๋ธ ํ‰๊ฐ€
  6. โœ… NER ๋ชจ๋ธ ํ•™์Šต (30 epochs)
  7. โœ… NER ๋ชจ๋ธ ํ‰๊ฐ€

์ตœ์ข… ํ•™์Šต ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐIntentNER
ModelKLUE/RoBERTa-LargeKLUE/RoBERTa-Large
Epochs5030
Batch Size1616
Learning Rate5e-52e-5
Gradient Accumulation44
Effective Batch6432

W&B ์‹คํ—˜ ์ถ”์ 

# W&B ๋กœ๊ทธ์ธ
wandb login

# ํ•™์Šต ์ค‘ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
# https://wandb.ai/your-team/beaver-ars

๐Ÿณ ๋ฐฐํฌ

Docker Compose (๊ถŒ์žฅ)

# ์ „์ฒด ์Šคํƒ ์‹คํ–‰ (App + MySQL + Redis + Nginx + Prometheus + Grafana)
docker-compose up -d

# ๋กœ๊ทธ ํ™•์ธ
docker-compose logs -f app

# ์ค‘์ง€
docker-compose down

๊ฐœ๋ณ„ Docker ๋นŒ๋“œ

# ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker build -t beaver-ars:latest .

# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker run -p 5000:5000 beaver-ars:latest

ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ

# ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
chmod +x deploy.sh
./deploy.sh

# ๋กค๋ฐฑ (๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ)
./rollback.sh

๐Ÿ“ก API ์‚ฌ์šฉ๋ฒ•

์ฑ—๋ด‡ API

Endpoint: POST /chat

Request:

{
  "text": "๋–ก๋ณถ์ด ๊ฐ€๊ฒฉ์ด ์–ผ๋งˆ์˜ˆ์š”?"
}

Response:

{
  "response": "๋–ก๋ณถ์ด์˜ ๊ฐ€๊ฒฉ์€ 5,000์›์ž…๋‹ˆ๋‹ค.",
  "intent": "ํŠน์ • ์ƒํ’ˆ ๋ฐ ๊ฐ€๊ฒฉ ์•ˆ๋‚ด",
  "intent_id": 1,
  "confidence": 0.98,
  "entities": {
    "MENU": ["๋–ก๋ณถ์ด"]
  },
  "response_time_ms": 850
}

ํ—ฌ์Šค์ฒดํฌ API

Endpoint: GET /health

Response:

{
  "status": "healthy",
  "model_loaded": true,
  "db_connected": true,
  "uptime_seconds": 3600
}

Prometheus ๋ฉ”ํŠธ๋ฆญ

Endpoint: GET /metrics

# ์‹œ์Šคํ…œ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
# - ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„
# - API ํ˜ธ์ถœ ์นด์šดํŠธ
# - ์—๋Ÿฌ ๋ฐœ์ƒ๋ฅ 
# - ๋ชจ๋ธ ๋กœ๋”ฉ ์ƒํƒœ

๐Ÿ“Š ์„ฑ๋Šฅ ํ‰๊ฐ€

Intent Classification ๊ฒฐ๊ณผ

MetricValue
Accuracy97.7%
Weighted F1-Score97.7%
Eval Loss0.153
ModelKLUE/RoBERTa-Large

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

  • ์ด 2,856 ์ƒ˜ํ”Œ (Train: 2,284 / Eval: 572)
  • 48๊ฐœ Intent ํด๋ž˜์Šค
  • 50 Epochs, Batch 16, LR 1e-4, Gradient Accumulation 4

NER ๊ฒฐ๊ณผ

Entity TypePrecisionRecallF1-ScoreSupport
MENU98.9%100.0%99.5%70
PAYMENT100.0%100.0%100.0%5
DAY100.0%100.0%100.0%17
Macro Avg98.9%100.0%99.5%92

์‹œ์Šคํ…œ ์„ฑ๋Šฅ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ํ•ญ๋ชฉ                     โ”‚ ์„ฑ๋Šฅ               โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Intent ๋ถ„๋ฅ˜              โ”‚ 97.7% Accuracy     โ”‚
โ”‚ NER ์ถ”์ถœ                 โ”‚ 99.5% F1-Score     โ”‚
โ”‚ ํ•™์Šต ๋ฐ์ดํ„ฐ              โ”‚ 2,856 samples      โ”‚
โ”‚ ์ง€์› Intent              โ”‚ 48 classes         โ”‚
โ”‚ ์ง€์› Entity              โ”‚ 6 types (MENU/DAY) โ”‚
โ”‚ GPU (ํ•™์Šต)               โ”‚ RTX 5090 32GB      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ”ง ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

1. NER ํ† ํฐ ์ •๋ ฌ ๋ฌธ์ œ

๋ฌธ์ œ: WordPiece ํ† ํฌ๋‚˜์ด์ € ์„œ๋ธŒํ† ํฐ ๋ถˆ์ผ์น˜
ํ•ด๊ฒฐ: offset_mapping ๊ธฐ๋ฐ˜ ์ฒซ ์„œ๋ธŒํ† ํฐ๋งŒ ํƒœ๊น…
๊ฒฐ๊ณผ: NER F1-Score 99.5% ๋‹ฌ์„ฑ

2. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๊ตฌํ˜„

๋ฌธ์ œ: ๋‹จ์ผ ๊ฒ€์ƒ‰ ๋ฐฉ์‹์˜ ํ•œ๊ณ„
ํ•ด๊ฒฐ: BM25(ํ‚ค์›Œ๋“œ) + SBERT(์˜๋ฏธ) ๊ฒฐํ•ฉ (4:6 ๊ฐ€์ค‘์น˜)
๊ฒฐ๊ณผ: ์ •ํ™•๋„์™€ ์œ ์—ฐ์„ฑ ๋ชจ๋‘ ํ™•๋ณด

3. GPU ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”

๋ฌธ์ œ: ๋Œ€์šฉ๋Ÿ‰ ๋ชจ๋ธ ํ•™์Šต ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ
ํ•ด๊ฒฐ: Gradient Accumulation (4 steps) ์ ์šฉ
๊ฒฐ๊ณผ: Batch 16์œผ๋กœ Effective Batch 64 ํšจ๊ณผ

4. 48๊ฐœ Intent ์„ธ๋ถ„ํ™”

๋ฌธ์ œ: ํฌ๊ด„์  Intent๋กœ ์ •ํ™•๋„ ์ €ํ•˜
ํ•ด๊ฒฐ: ๋ฉ”๋‰ด/์˜์—…/๋ฐฐ๋‹ฌ/์‹œ์„ค/ํ˜œํƒ ๋“ฑ 48๊ฐœ๋กœ ์„ธ๋ถ„ํ™”
๊ฒฐ๊ณผ: ๋„๋ฉ”์ธ๋ณ„ ์ •๋ฐ€ํ•œ ์‘๋‹ต ์ƒ์„ฑ ๊ฐ€๋Šฅ


SynapseSmith/Beaver_ARS

Python

0

9 commits

updated Dec 12, 2025

See the code

README

๐Ÿฆซ Beaver ARS - AI-Powered Automatic Response System

Python PyTorch Transformers Flask Docker License

KLUE/RoBERTa-Large ๊ธฐ๋ฐ˜ Intent Classification (48 classes) + NER (6 entities)์„ ํ™œ์šฉํ•œ ๋ ˆ์Šคํ† ๋ž‘ ์ž๋™ ์‘๋‹ต ์‹œ์Šคํ…œ
๊ณ ๊ฐ ๋ฌธ์˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ดํ•ดํ•˜๊ณ , ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ + SQL DB ๊ธฐ๋ฐ˜ ์ •ํ™•ํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ์ฑ—๋ด‡ ์†”๋ฃจ์…˜


๐Ÿ“‹ ๋ชฉ์ฐจ


๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ ˆ์Šคํ† ๋ž‘ ๋ฐ ์„œ๋น„์Šค ์—…์ข…์˜ ๋ฐ˜๋ณต์ ์ธ ๊ณ ๊ฐ ๋ฌธ์˜(๋ฉ”๋‰ด, ์˜์—…์‹œ๊ฐ„, ๊ฒฐ์ œ ๋ฐฉ๋ฒ• ๋“ฑ)๋ฅผ AI๋กœ ์ž๋™ํ™”ํ•˜์—ฌ 24/7 ๊ณ ๊ฐ ์‘๋Œ€๋ฅผ ์‹คํ˜„ํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ฑ—๋ด‡ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ ํ•ต์‹ฌ ๋ชฉํ‘œ

  • ๋†’์€ ์ •ํ™•๋„: Intent 97.7%, NER 99.5% F1-Score
  • ๋น ๋ฅธ ์‘๋‹ต: 1์ดˆ ์ด๋‚ด ์‘๋‹ต ์ƒ์„ฑ
  • ํ”„๋กœ๋•์…˜ ์ค€๋น„: Docker + Nginx + Prometheus ๋ชจ๋‹ˆํ„ฐ๋ง
  • ํ™•์žฅ ๊ฐ€๋Šฅ: 48๊ฐœ Intent, ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ ์ ์šฉ ๊ฐ€๋Šฅ

๐Ÿ† ํ•ต์‹ฌ ์„ฑ๊ณผ

ํ•ญ๋ชฉ์„ฑ๋Šฅ๋น„๊ณ 
Intent ClassificationAccuracy 97.7%KLUE/RoBERTa-Large
NER ModelF1-Score 99.5%Macro-averaged
์‘๋‹ต ์‹œ๊ฐ„< 1์ดˆIntent + NER + Search + DB
๋ฐ์ดํ„ฐ์…‹2,856 samples48 intents, 6 entity types
๋™์‹œ ์ฒ˜๋ฆฌ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ง€์›Gunicorn multi-worker

๐Ÿ—๏ธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        User Interface                       โ”‚
โ”‚              (Web UI / REST API / WebSocket)                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ”‚
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚      Nginx (Reverse Proxy)  โ”‚
            โ”‚  - Rate Limiting (100 req/m)โ”‚
            โ”‚  - SSL/TLS Termination      โ”‚
            โ”‚  - Load Balancing           โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ”‚
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚    Flask Application Server โ”‚
            โ”‚  (Gunicorn 4 workers)       โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚                  โ”‚                  โ”‚
   โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚ Intent  โ”‚      โ”‚ NER Model   โ”‚   โ”‚   Redis     โ”‚
   โ”‚Classifierโ”‚     โ”‚(Token Class)โ”‚   โ”‚   Cache     โ”‚
   โ”‚ 48 cls  โ”‚      โ”‚  6 entities โ”‚   โ”‚             โ”‚
   โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
        โ”‚                  โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚   Hybrid Search Engine  โ”‚
        โ”‚  - BM25 (40%)           โ”‚
        โ”‚  - Sentence-BERT (60%)  โ”‚
        โ”‚  - Cosine Similarity    โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚   SQL Database (MySQL)  โ”‚
        โ”‚  - Menus Table          โ”‚
        โ”‚  - Business Info        โ”‚
        โ”‚  - Conversation Logs    โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚   Response Generator    โ”‚
        โ”‚  - Slot Filling         โ”‚
        โ”‚  - Template Engine      โ”‚
        โ”‚  - TTS Integration      โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚
                   โ–ผ
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚   Output    โ”‚
            โ”‚ (JSON/Text) โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   Monitoring Stack                          โ”‚
โ”‚  Prometheus โ†’ Metrics Collection                            โ”‚
โ”‚  Grafana โ†’ Real-time Dashboards                             โ”‚
โ”‚  Node Exporter โ†’ System Metrics                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

1. ๐Ÿง  ์ •๋ฐ€ํ•œ ์ž์—ฐ์–ด ์ดํ•ด (NLU)

Intent Classification - 48๊ฐœ ์„ธ๋ถ„ํ™”๋œ ์˜๋„ ๋ถ„๋ฅ˜

๐Ÿ“Œ ๋ฉ”๋‰ด (11๊ฐœ): ์นดํ…Œ๊ณ ๋ฆฌ, ๊ฐ€๊ฒฉ, ์˜ต์…˜, ์ธ๊ธฐ/์ถ”์ฒœ, ํ• ์ธ, ์‹ ๋ฉ”๋‰ด ๋“ฑ
๐Ÿ“Œ ์ฃผ๋ฌธ/๊ฒฐ์ œ (5๊ฐœ): ์ฃผ๋ฌธ ๋ฐฉ์‹, ๊ฒฐ์ œ ์ˆ˜๋‹จ, ๊ฐœ๋ณ„ ๊ฒฐ์ œ ๋“ฑ
๐Ÿ“Œ ์˜์—… ์ •๋ณด (6๊ฐœ): ์˜์—…์‹œ๊ฐ„, ํœด๋ฌด์ผ, ๋ธŒ๋ ˆ์ดํฌ ํƒ€์ž„, ํŠน์ • ์š”์ผ ๋“ฑ
๐Ÿ“Œ ๋ฐฐ๋‹ฌ (3๊ฐœ): ๋ฐฐ๋‹ฌ ์ง€์—ญ, ๋ฐฐ๋‹ฌ๋น„, ์ตœ์†Œ ์ฃผ๋ฌธ ๊ธˆ์•ก
๐Ÿ“Œ ์‹œ์„ค (7๊ฐœ): ์ฃผ์†Œ, ์ฃผ์ฐจ, ์ขŒ์„, ๋‹จ์ฒด์„, ํ…Œ๋ผ์Šค ๋“ฑ
๐Ÿ“Œ ํ˜œํƒ (8๊ฐœ): ๋ฉค๋ฒ„์‹ญ, ํฌ์ธํŠธ, ์ฟ ํฐ, ์ด๋ฒคํŠธ ๋“ฑ
๐Ÿ“Œ ๊ธฐํƒ€ (8๊ฐœ): ๊ฐ์‚ฌ, ์ธ์‚ฌ, Fallback ๋“ฑ

Named Entity Recognition - 6๊ฐœ ์—”ํ‹ฐํ‹ฐ ์ถ”์ถœ

{
  "MENU": ["๋–ก๋ณถ์ด", "๊น€๋ฐฅ"],        # B-MENU, I-MENU
  "PAYMENT": ["์นด๋“œ", "์ œ๋กœํŽ˜์ด"],   # B-PAYMENT, I-PAYMENT
  "DAY": ["์›”์š”์ผ"]                 # B-DAY
}

2. ๐Ÿ” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ์—”์ง„

# ํ‚ค์›Œ๋“œ + ์˜๋ฏธ ์œ ์‚ฌ๋„ ๊ฒฐํ•ฉ
final_score = 0.4 * BM25_score + 0.6 * SBERT_score
  • BM25: ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ์ •ํ™• ๋งค์นญ (Lexical)
  • Sentence-BERT: ์˜๋ฏธ ๊ธฐ๋ฐ˜ ์œ ์‚ฌ๋„ (Semantic)
  • TF-IDF: ๋ณด์กฐ ๊ฒ€์ƒ‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜

3. ๐Ÿ“Š SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™

  • ๋™์  ์‘๋‹ต ์ƒ์„ฑ: DB์—์„œ ์‹ค์‹œ๊ฐ„ ๋ฉ”๋‰ด/๊ฐ€๊ฒฉ ์กฐํšŒ
  • Slot Filling: NER ์ถ”์ถœ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‘๋‹ต ํ…œํ”Œ๋ฆฟ์— ์‚ฝ์ž…
  • MySQL/SQLite ์ง€์›: ํ”„๋กœ๋•์…˜/๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ

4. ๐Ÿš€ ํ”„๋กœ๋•์…˜๊ธ‰ ์ธํ”„๋ผ

  • Docker ์ปจํ…Œ์ด๋„ˆํ™”: ์ผ๊ด€๋œ ๋ฐฐํฌ ํ™˜๊ฒฝ
  • Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ: Rate limiting, SSL/TLS
  • Prometheus + Grafana: ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
  • CI/CD: GitHub Actions ์ž๋™ ๋ฐฐํฌ

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๐Ÿค– Machine Learning & NLP

CategoryTechnologyVersion
FrameworkPyTorch2.7.0 (CUDA 12.4)
TransformersHugging Face4.57.1
Pre-trained ModelKLUE/RoBERTa-Large1024 hidden, 24 layers
SearchSentence-BERTparaphrase-multilingual-MiniLM-L12-v2
Evaluationseqeval, scikit-learn1.2.2, 1.2.0
Experiment TrackingW&B0.15+

๐ŸŒ Backend & Infrastructure

CategoryTechnologyPurpose
Web ServerFlask 2.0+REST API
WSGIGunicornProduction server (4 workers)
DatabaseMySQL 8.0Data storage
CacheRedis 7.0Response caching
ProxyNginxRate limiting, SSL/TLS
ContainerDocker 24.0+Containerization

๐Ÿ“Š Monitoring & DevOps

  • Metrics: Prometheus (time-series metrics)
  • Visualization: Grafana (real-time dashboards)
  • CI/CD: GitHub Actions
  • Logging: Python logging module

๐Ÿ” Search Engine Components

  • BM25: Keyword-based exact matching (rank-bm25)
  • Sentence-BERT: Semantic similarity
  • TF-IDF: Fallback search mechanism

๐Ÿ’ป Hardware Requirements

  • Training: NVIDIA RTX 5090 32GB VRAM
  • Production: 8+ CPU cores, 16GB RAM
  • Storage: 50GB+ (models + data + logs)

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Beaver_ARS/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“„ README.md                    # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ
โ”œโ”€โ”€ ๐Ÿ“„ DATA_GUIDE.md                # ๋ฐ์ดํ„ฐ์…‹ ๊ฐ€์ด๋“œ
โ”œโ”€โ”€ ๐Ÿ“„ requirements.txt             # Python ์˜์กด์„ฑ
โ”œโ”€โ”€ ๐Ÿ“„ train.sh                     # ์ž๋™ํ™”๋œ ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ ๐Ÿ“„ train_quick.py               # ๋น ๋ฅธ ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ ๐Ÿ“„ docker-compose.yml           # ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ์„ค์ •
โ”œโ”€โ”€ ๐Ÿ“„ Dockerfile                   # ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ •์˜
โ”œโ”€โ”€ ๐Ÿ“„ gunicorn_config.py           # WSGI ์„œ๋ฒ„ ์„ค์ •
โ”œโ”€โ”€ ๐Ÿ“„ deploy.sh                    # ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ ๐Ÿ“„ rollback.sh                  # ๋กค๋ฐฑ ์Šคํฌ๋ฆฝํŠธ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ data/                        # ๋ฐ์ดํ„ฐ์…‹
โ”‚   โ”œโ”€โ”€ train/
โ”‚   โ”‚   โ”œโ”€โ”€ intent_data.csv         # Intent ํ•™์Šต ๋ฐ์ดํ„ฐ (2,824 samples)
โ”‚   โ”‚   โ””โ”€โ”€ ner_data.conll          # NER ํ•™์Šต ๋ฐ์ดํ„ฐ (CoNLL format)
โ”‚   โ”œโ”€โ”€ sample/                     # ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ
โ”‚   โ””โ”€โ”€ processed/                  # ์ „์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ (์ž๋™ ์ƒ์„ฑ)
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ src/                         # ์†Œ์Šค ์ฝ”๋“œ
โ”‚   โ”œโ”€โ”€ intent_mapping.py           # Intent ๋ผ๋ฒจ ๋งคํ•‘
โ”‚   โ”œโ”€โ”€ intent_training.py          # Intent ๋ถ„๋ฅ˜ ํ•™์Šต
โ”‚   โ”œโ”€โ”€ intent_inference.py         # Intent ์ถ”๋ก 
โ”‚   โ”œโ”€โ”€ intent_evaluation.py        # Intent ํ‰๊ฐ€
โ”‚   โ”œโ”€โ”€ ner_training.py             # NER ํ•™์Šต
โ”‚   โ”œโ”€โ”€ ner_evaluation.py           # NER ํ‰๊ฐ€
โ”‚   โ”œโ”€โ”€ response_templates.py       # ์‘๋‹ต ํ…œํ”Œ๋ฆฟ
โ”‚   โ”œโ”€โ”€ main_ars_system.py          # ํ†ตํ•ฉ ARS ์‹œ์Šคํ…œ (๋ฉ”์ธ)
โ”‚   โ”œโ”€โ”€ web_server.py               # Flask ์›น ์„œ๋ฒ„
โ”‚   โ””โ”€โ”€ main_system.py              # ์‹œ์Šคํ…œ ์—”ํŠธ๋ฆฌํฌ์ธํŠธ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ models/                      # ํ•™์Šต๋œ ๋ชจ๋ธ
โ”‚   โ”œโ”€โ”€ intent_classifier/          # Intent ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ
โ”‚   โ””โ”€โ”€ ner_model/                  # NER ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ templates/                   # HTML ํ…œํ”Œ๋ฆฟ
โ”‚   โ””โ”€โ”€ index.html                  # ์›น UI
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ static/                      # ์ •์  ํŒŒ์ผ
โ”‚   โ”œโ”€โ”€ css/
โ”‚   โ”œโ”€โ”€ js/
โ”‚   โ””โ”€โ”€ audio/                      # TTS ์˜ค๋””์˜ค ํŒŒ์ผ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ config/                      # ์„ค์ • ํŒŒ์ผ
โ”‚   โ”œโ”€โ”€ config.yaml                 # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •
โ”‚   โ””โ”€โ”€ database.yaml               # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ database/                    # DB ์ดˆ๊ธฐํ™”
โ”‚   โ”œโ”€โ”€ init.sql                    # ์Šคํ‚ค๋งˆ ๋ฐ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ
โ”‚   โ””โ”€โ”€ my.cnf                      # MySQL ์„ค์ •
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ nginx/                       # Nginx ์„ค์ •
โ”‚   โ””โ”€โ”€ nginx.conf                  # ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ •
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ monitoring/                  # ๋ชจ๋‹ˆํ„ฐ๋ง
โ”‚   โ”œโ”€โ”€ prometheus.yml              # Prometheus ์„ค์ •
โ”‚   โ””โ”€โ”€ grafana/                    # Grafana ๋Œ€์‹œ๋ณด๋“œ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ logs/                        # ๋กœ๊ทธ ํŒŒ์ผ (์ž๋™ ์ƒ์„ฑ)
โ”‚   โ””โ”€โ”€ YYYY-MM-DD/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ tests/                       # ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
โ”‚   โ”œโ”€โ”€ test_intent_classification.py
โ”‚   โ”œโ”€โ”€ test_ner_model.py
โ”‚   โ””โ”€โ”€ test_api_endpoints.py
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ scripts/                     # ์œ ํ‹ธ๋ฆฌํ‹ฐ ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ””โ”€โ”€ data_preprocessing.py
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ docs/                        # ์ƒ์„ธ ๋ฌธ์„œ
โ”‚   โ”œโ”€โ”€ ARCHITECTURE.md
โ”‚   โ”œโ”€โ”€ API_REFERENCE.md
โ”‚   โ””โ”€โ”€ DEPLOYMENT.md
โ”‚
โ””โ”€โ”€ ๐Ÿ“‚ .github/                     # CI/CD
    โ””โ”€โ”€ workflows/
        โ””โ”€โ”€ ci-cd.yml               # GitHub Actions

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. ํ™˜๊ฒฝ ์„ค์ •

# ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋ก 
git clone https://github.com/SynapseSmith/Beaver_ARS.git
cd Beaver_ARS

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ (๊ถŒ์žฅ)
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

2. ๋ฐ์ดํ„ฐ ์ค€๋น„

๋ฐ์ดํ„ฐ๋Š” data/train/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • intent_data.csv: 2,856๊ฐœ Intent ์ƒ˜ํ”Œ
  • ner_data.conll: 2,170์ค„ NER ๋ผ๋ฒจ๋ง ๋ฐ์ดํ„ฐ

์ƒ์„ธํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” DATA_GUIDE.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

3. ๋ชจ๋ธ ํ•™์Šต (์„ ํƒ์‚ฌํ•ญ)

์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# ์ž๋™ํ™”๋œ ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ (๊ถŒ์žฅ)
chmod +x train.sh
./train.sh

# ๋˜๋Š” ๋น ๋ฅธ ํ•™์Šต (์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ)
python train_quick.py

4. ์„œ๋ฒ„ ์‹คํ–‰

# Flask ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
cd src
python web_server.py

# ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘์†
# http://localhost:5000

5. API ํ…Œ์ŠคํŠธ

curl -X POST http://localhost:5000/chat \
  -H "Content-Type: application/json" \
  -d '{"text": "๋–ก๋ณถ์ด ๊ฐ€๊ฒฉ์ด ์–ผ๋งˆ์˜ˆ์š”?"}'

๐ŸŽ“ ๋ชจ๋ธ ํ•™์Šต

์ž๋™ํ™”๋œ ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ (train.sh)

./train.sh

7๋‹จ๊ณ„ ์ž๋™ ์‹คํ–‰:

  1. โœ… Prerequisites ํ™•์ธ (Python, GPU, packages)
  2. โœ… ๋””๋ ‰ํ† ๋ฆฌ ์ค€๋น„
  3. โœ… ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
  4. โœ… Intent Classification ํ•™์Šต (50 epochs)
  5. โœ… Intent ๋ชจ๋ธ ํ‰๊ฐ€
  6. โœ… NER ๋ชจ๋ธ ํ•™์Šต (30 epochs)
  7. โœ… NER ๋ชจ๋ธ ํ‰๊ฐ€

์ตœ์ข… ํ•™์Šต ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐIntentNER
ModelKLUE/RoBERTa-LargeKLUE/RoBERTa-Large
Epochs5030
Batch Size1616
Learning Rate5e-52e-5
Gradient Accumulation44
Effective Batch6432

W&B ์‹คํ—˜ ์ถ”์ 

# W&B ๋กœ๊ทธ์ธ
wandb login

# ํ•™์Šต ์ค‘ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
# https://wandb.ai/your-team/beaver-ars

๐Ÿณ ๋ฐฐํฌ

Docker Compose (๊ถŒ์žฅ)

# ์ „์ฒด ์Šคํƒ ์‹คํ–‰ (App + MySQL + Redis + Nginx + Prometheus + Grafana)
docker-compose up -d

# ๋กœ๊ทธ ํ™•์ธ
docker-compose logs -f app

# ์ค‘์ง€
docker-compose down

๊ฐœ๋ณ„ Docker ๋นŒ๋“œ

# ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker build -t beaver-ars:latest .

# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker run -p 5000:5000 beaver-ars:latest

ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ

# ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
chmod +x deploy.sh
./deploy.sh

# ๋กค๋ฐฑ (๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ)
./rollback.sh

๐Ÿ“ก API ์‚ฌ์šฉ๋ฒ•

์ฑ—๋ด‡ API

Endpoint: POST /chat

Request:

{
  "text": "๋–ก๋ณถ์ด ๊ฐ€๊ฒฉ์ด ์–ผ๋งˆ์˜ˆ์š”?"
}

Response:

{
  "response": "๋–ก๋ณถ์ด์˜ ๊ฐ€๊ฒฉ์€ 5,000์›์ž…๋‹ˆ๋‹ค.",
  "intent": "ํŠน์ • ์ƒํ’ˆ ๋ฐ ๊ฐ€๊ฒฉ ์•ˆ๋‚ด",
  "intent_id": 1,
  "confidence": 0.98,
  "entities": {
    "MENU": ["๋–ก๋ณถ์ด"]
  },
  "response_time_ms": 850
}

ํ—ฌ์Šค์ฒดํฌ API

Endpoint: GET /health

Response:

{
  "status": "healthy",
  "model_loaded": true,
  "db_connected": true,
  "uptime_seconds": 3600
}

Prometheus ๋ฉ”ํŠธ๋ฆญ

Endpoint: GET /metrics

# ์‹œ์Šคํ…œ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
# - ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„
# - API ํ˜ธ์ถœ ์นด์šดํŠธ
# - ์—๋Ÿฌ ๋ฐœ์ƒ๋ฅ 
# - ๋ชจ๋ธ ๋กœ๋”ฉ ์ƒํƒœ

๐Ÿ“Š ์„ฑ๋Šฅ ํ‰๊ฐ€

Intent Classification ๊ฒฐ๊ณผ

MetricValue
Accuracy97.7%
Weighted F1-Score97.7%
Eval Loss0.153
ModelKLUE/RoBERTa-Large

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

  • ์ด 2,856 ์ƒ˜ํ”Œ (Train: 2,284 / Eval: 572)
  • 48๊ฐœ Intent ํด๋ž˜์Šค
  • 50 Epochs, Batch 16, LR 1e-4, Gradient Accumulation 4

NER ๊ฒฐ๊ณผ

Entity TypePrecisionRecallF1-ScoreSupport
MENU98.9%100.0%99.5%70
PAYMENT100.0%100.0%100.0%5
DAY100.0%100.0%100.0%17
Macro Avg98.9%100.0%99.5%92

์‹œ์Šคํ…œ ์„ฑ๋Šฅ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ํ•ญ๋ชฉ                     โ”‚ ์„ฑ๋Šฅ               โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Intent ๋ถ„๋ฅ˜              โ”‚ 97.7% Accuracy     โ”‚
โ”‚ NER ์ถ”์ถœ                 โ”‚ 99.5% F1-Score     โ”‚
โ”‚ ํ•™์Šต ๋ฐ์ดํ„ฐ              โ”‚ 2,856 samples      โ”‚
โ”‚ ์ง€์› Intent              โ”‚ 48 classes         โ”‚
โ”‚ ์ง€์› Entity              โ”‚ 6 types (MENU/DAY) โ”‚
โ”‚ GPU (ํ•™์Šต)               โ”‚ RTX 5090 32GB      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ”ง ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

1. NER ํ† ํฐ ์ •๋ ฌ ๋ฌธ์ œ

๋ฌธ์ œ: WordPiece ํ† ํฌ๋‚˜์ด์ € ์„œ๋ธŒํ† ํฐ ๋ถˆ์ผ์น˜
ํ•ด๊ฒฐ: offset_mapping ๊ธฐ๋ฐ˜ ์ฒซ ์„œ๋ธŒํ† ํฐ๋งŒ ํƒœ๊น…
๊ฒฐ๊ณผ: NER F1-Score 99.5% ๋‹ฌ์„ฑ

2. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๊ตฌํ˜„

๋ฌธ์ œ: ๋‹จ์ผ ๊ฒ€์ƒ‰ ๋ฐฉ์‹์˜ ํ•œ๊ณ„
ํ•ด๊ฒฐ: BM25(ํ‚ค์›Œ๋“œ) + SBERT(์˜๋ฏธ) ๊ฒฐํ•ฉ (4:6 ๊ฐ€์ค‘์น˜)
๊ฒฐ๊ณผ: ์ •ํ™•๋„์™€ ์œ ์—ฐ์„ฑ ๋ชจ๋‘ ํ™•๋ณด

3. GPU ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”

๋ฌธ์ œ: ๋Œ€์šฉ๋Ÿ‰ ๋ชจ๋ธ ํ•™์Šต ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ
ํ•ด๊ฒฐ: Gradient Accumulation (4 steps) ์ ์šฉ
๊ฒฐ๊ณผ: Batch 16์œผ๋กœ Effective Batch 64 ํšจ๊ณผ

4. 48๊ฐœ Intent ์„ธ๋ถ„ํ™”

๋ฌธ์ œ: ํฌ๊ด„์  Intent๋กœ ์ •ํ™•๋„ ์ €ํ•˜
ํ•ด๊ฒฐ: ๋ฉ”๋‰ด/์˜์—…/๋ฐฐ๋‹ฌ/์‹œ์„ค/ํ˜œํƒ ๋“ฑ 48๊ฐœ๋กœ ์„ธ๋ถ„ํ™”
๊ฒฐ๊ณผ: ๋„๋ฉ”์ธ๋ณ„ ์ •๋ฐ€ํ•œ ์‘๋‹ต ์ƒ์„ฑ ๊ฐ€๋Šฅ