SynapseSmith/ars

Python

0

3 commits

updated Nov 24, 2025

See the code

README

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

Python PyTorch Transformers Flask License

BERT ๊ธฐ๋ฐ˜ Intent Classification + NER์„ ํ™œ์šฉํ•œ ๋ ˆ์Šคํ† ๋ž‘ ์ž๋™ ์‘๋‹ต ์‹œ์Šคํ…œ
๊ณ ๊ฐ ๋ฌธ์˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ดํ•ดํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ ์ •ํ™•ํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” End-to-End ์ฑ—๋ด‡ ์†”๋ฃจ์…˜


๐Ÿ“‹ ๋ชฉ์ฐจ


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

๋ฐฐ๊ฒฝ

๋ ˆ์Šคํ† ๋ž‘์ด๋‚˜ ์นดํŽ˜์™€ ๊ฐ™์€ ์„œ๋น„์Šค ์—…์ข…์—์„œ ๊ณ ๊ฐ ๋ฌธ์˜๋Š” ๋ฐ˜๋ณต์ ์ด๊ณ  ์œ ์‚ฌํ•œ ํŒจํ„ด์„ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฉ”๋‰ด ์•ˆ๋‚ด, ์˜์—…์‹œ๊ฐ„, ๊ฒฐ์ œ ๋ฐฉ๋ฒ•, ์˜ˆ์•ฝ ๋“ฑ์˜ ๋ฌธ์˜๋ฅผ ์ž๋™ํ™”ํ•˜์—ฌ 24/7 ๊ณ ๊ฐ ์‘๋Œ€๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ , ์ง์›์˜ ์—…๋ฌด ๋ถ€๋‹ด์„ ์ค„์ด๋Š” ๊ฒƒ์ด ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ฐ€์น˜

  • ์‹ค์‹œ๊ฐ„ ์‘๋‹ต: ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„ 1์ดˆ ์ด๋‚ด
  • ๋†’์€ ์ •ํ™•๋„: Intent Classification 95%+, NER F1-Score 90%+
  • ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ: ๋‹ค์–‘ํ•œ ์—…์ข…์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆํ˜• ์„ค๊ณ„
  • ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜: SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™๋œ ๋™์  ์‘๋‹ต ์ƒ์„ฑ

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

1. ๐Ÿง  ๊ณ ๊ธ‰ ์ž์—ฐ์–ด ์ดํ•ด (NLU)

  • Intent Classification: 48๊ฐ€์ง€ ์„ธ๋ถ„ํ™”๋œ ์˜๋„ ๋ถ„๋ฅ˜

    • ๋ฉ”๋‰ด ๊ด€๋ จ: ์นดํ…Œ๊ณ ๋ฆฌ, ํŠน์ • ๋ฉ”๋‰ด, ์ธ๊ธฐ/์ถ”์ฒœ, ์ด๋ฒคํŠธ ๋ฉ”๋‰ด ๋“ฑ
    • ์šด์˜ ์ •๋ณด: ์˜์—…์‹œ๊ฐ„, ํœด๋ฌด์ผ, ์ฃผ๋ฌธ/๊ฒฐ์ œ ๋ฐฉ์‹
    • ์‹œ์„ค ์ •๋ณด: ์œ„์น˜, ์ขŒ์„, ๋ฐฐ๋‹ฌ ์ •๋ณด
    • ํ˜œํƒ ์ •๋ณด: ๋ฉค๋ฒ„์‹ญ, ํฌ์ธํŠธ, ์ฟ ํฐ, ์ด๋ฒคํŠธ
  • Named Entity Recognition (NER): 6๊ฐ€์ง€ ์—”ํ‹ฐํ‹ฐ ์ธ์‹

    • B-MENU/I-MENU: ๋ฉ”๋‰ด๋ช… ์ถ”์ถœ
    • B-PAYMENT/I-PAYMENT: ๊ฒฐ์ œ ์ˆ˜๋‹จ
    • B-DAY: ์š”์ผ ์ •๋ณด
    • O: ๊ธฐํƒ€ ํ† ํฐ

2. ๐Ÿ” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ

  • BM25 (Lexical Search): ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ์ •ํ™•ํ•œ ๋งค์นญ
  • Sentence-BERT (Semantic Search): ์˜๋ฏธ ๊ธฐ๋ฐ˜ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰
  • ๊ฐ€์ค‘์น˜ ์กฐํ•ฉ: ๋‘ ๋ฐฉ์‹์„ ๊ฒฐํ•ฉํ•œ ์ตœ์ ์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ

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

  • SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹ค์‹œ๊ฐ„ ๋ฉ”๋‰ด, ๊ฐ€๊ฒฉ, ์žฌ๊ณ  ์ •๋ณด ์กฐํšŒ
  • Template ๊ธฐ๋ฐ˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ์‘๋‹ต ์ƒ์„ฑ
  • ๋™์  ์Šฌ๋กฏ ํ•„๋ง (Slot Filling)

4. ๐ŸŒ ์›น ์ธํ„ฐํŽ˜์ด์Šค

  • Flask ๊ธฐ๋ฐ˜ RESTful API
  • ์‹ค์‹œ๊ฐ„ ์Œ์„ฑ ์ž…๋ ฅ/์ถœ๋ ฅ ์ง€์›
  • ๋ฐ˜์‘ํ˜• ์›น UI

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

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   User Input    โ”‚ (์Œ์„ฑ/ํ…์ŠคํŠธ)
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”
    โ”‚  Flask  โ”‚ Web Server
    โ”‚  Server โ”‚ (Port: 5007)
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  Intent Classifier  โ”‚ (KLUE/RoBERTa-Large)
    โ”‚  (48 classes)       โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  NER Model       โ”‚ (KLUE/RoBERTa-Large)
    โ”‚  (6 entity tags) โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  Hybrid Search Engine โ”‚
    โ”‚  (BM25 + Sentence-BERT)โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  SQL Database  โ”‚
    โ”‚  Query         โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  Response Generator โ”‚
    โ”‚  (Template-based)   โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  Output  โ”‚ (์Œ์„ฑ/ํ…์ŠคํŠธ)
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

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

Machine Learning & NLP

  • Framework: PyTorch 2.0+
  • Transformer: Hugging Face Transformers 4.30+
  • Pre-trained Model: KLUE/RoBERTa-Large, KLUE/BERT-Base
  • NER: Token Classification (IO/BIO Tagging)
  • Evaluation: seqeval, scikit-learn

Backend & Database

  • Web Framework: Flask 2.0+
  • Database: SQLite / MySQL (SQL ์—ฐ๋™)
  • Search Engine:
    • BM25 (rank-bm25)
    • Sentence-BERT (sentence-transformers)
    • TF-IDF (scikit-learn)

Frontend & UI

  • HTML5/CSS3/JavaScript
  • Real-time Communication: AJAX, WebSocket
  • TTS: AWS Polly / Google TTS / RealtimeTTS

Development Tools

  • Experiment Tracking: Weights & Biases (wandb)
  • Data Processing: pandas, numpy
  • Version Control: Git

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

Beaver_ARS/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“„ README.md                    # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ (๋ณธ ํŒŒ์ผ)
โ”œโ”€โ”€ ๐Ÿ“„ requirements.txt             # ์˜์กด์„ฑ ํŒจํ‚ค์ง€
โ”œโ”€โ”€ ๐Ÿ“„ .gitignore                   # Git ์ œ์™ธ ํŒŒ์ผ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ 241215_BERT/                 # Intent Classification ๋ชจ๋“ˆ
โ”‚   โ”œโ”€โ”€ 241215_step0_intent_mapping.py       # ์˜๋„ ๋ผ๋ฒจ ๋งคํ•‘
โ”‚   โ”œโ”€โ”€ 241215_step1_train_cls_intent.py     # Intent ๋ถ„๋ฅ˜ ๋ชจ๋ธ ํ•™์Šต
โ”‚   โ”œโ”€โ”€ 241215_step1_inference_cls_intent.py # ์ถ”๋ก 
โ”‚   โ”œโ”€โ”€ 241215_step1_evaluation_cls_intent.py # ํ‰๊ฐ€
โ”‚   โ”œโ”€โ”€ 241215_step2_response_template.py    # ์‘๋‹ต ํ…œํ”Œ๋ฆฟ ์„ค๊ณ„
โ”‚   โ”œโ”€โ”€ 241215_step3_web_server_main.py      # Flask ์›น ์„œ๋ฒ„
โ”‚   โ”œโ”€โ”€ data/                                # ํ•™์Šต ๋ฐ์ดํ„ฐ
โ”‚   โ”‚   โ”œโ”€โ”€ user_intent_v*.csv               # Intent ๋ฐ์ดํ„ฐ์…‹ (๋ฒ„์ „๋ณ„)
โ”‚   โ”‚   โ””โ”€โ”€ intent_v*.xlsx                   # Excel ํ˜•์‹ ๋ฐ์ดํ„ฐ
โ”‚   โ”œโ”€โ”€ checkpoint/                          # ํ•™์Šต๋œ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ
โ”‚   โ”œโ”€โ”€ logs/                                # ํ•™์Šต/์ถ”๋ก  ๋กœ๊ทธ
โ”‚   โ”œโ”€โ”€ templates/                           # HTML ํ…œํ”Œ๋ฆฟ
โ”‚   โ””โ”€โ”€ static/                              # CSS, JS, ์ด๋ฏธ์ง€
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ 241218_NER/                  # Named Entity Recognition ๋ชจ๋“ˆ
โ”‚   โ”œโ”€โ”€ 241218_step1_ner_train_i_tagging.py  # NER ๋ชจ๋ธ ํ•™์Šต (IO Tagging)
โ”‚   โ”œโ”€โ”€ 241218_step2_ner_evaluation.py       # NER ํ‰๊ฐ€
โ”‚   โ”œโ”€โ”€ data/                                # NER ํ•™์Šต ๋ฐ์ดํ„ฐ
โ”‚   โ”‚   โ””โ”€โ”€ NER_labeled_data_v*.conll        # CoNLL ํ˜•์‹ ๋ผ๋ฒจ๋ง ๋ฐ์ดํ„ฐ
โ”‚   โ””โ”€โ”€ logs/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ 241219_BERT_NER/             # Intent + NER ํ†ตํ•ฉ ์‹œ์Šคํ…œ
โ”‚   โ”œโ”€โ”€ 250102_step3_MAIN_ars_chat_SQL_ju_v4_template_a6000.py  # ์ตœ์ข… ํ†ตํ•ฉ ์‹œ์Šคํ…œ
โ”‚   โ”œโ”€โ”€ 241215_step3_web_server_mp3.py       # ์Œ์„ฑ ์ถœ๋ ฅ ์›น ์„œ๋ฒ„
โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”‚   โ””โ”€โ”€ dataset_SQL_general_ju_*.xlsx    # SQL ์—ฐ๋™ ๋ฐ์ดํ„ฐ์…‹
โ”‚   โ”œโ”€โ”€ checkpoint/                          # ํ†ตํ•ฉ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ
โ”‚   โ”œโ”€โ”€ templates/
โ”‚   โ”‚   โ”œโ”€โ”€ main_index_polly.html            # AWS Polly TTS UI
โ”‚   โ”‚   โ””โ”€โ”€ main_index_polly_text.html       # ํ…์ŠคํŠธ ์ „์šฉ UI
โ”‚   โ””โ”€โ”€ static/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ docs/                        # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ
โ”‚   โ”œโ”€โ”€ ARCHITECTURE.md             # ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์ƒ์„ธ
โ”‚   โ”œโ”€โ”€ API_REFERENCE.md            # API ๋ช…์„ธ์„œ
โ”‚   โ”œโ”€โ”€ TRAINING_GUIDE.md           # ๋ชจ๋ธ ํ•™์Šต ๊ฐ€์ด๋“œ
โ”‚   โ””โ”€โ”€ DEPLOYMENT.md               # ๋ฐฐํฌ ๊ฐ€์ด๋“œ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ tests/                       # ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
โ”‚   โ”œโ”€โ”€ test_intent_classification.py
โ”‚   โ”œโ”€โ”€ test_ner_model.py
โ”‚   โ””โ”€โ”€ test_api_endpoints.py
โ”‚
โ””โ”€โ”€ ๐Ÿ“‚ scripts/                     # ์œ ํ‹ธ๋ฆฌํ‹ฐ ์Šคํฌ๋ฆฝํŠธ
    โ”œโ”€โ”€ data_preprocessing.py
    โ”œโ”€โ”€ model_evaluation.py
    โ””โ”€โ”€ export_model.py

๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰

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

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

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

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

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

# Intent Classification ๋ฐ์ดํ„ฐ
# data/user_intent_v4.csv ํ˜•์‹:
# text,intent,intent_num
# "๋ฉ”๋‰ดํŒ ์ข€ ๋ณด์—ฌ์ฃผ์„ธ์š”",๋ฉ”๋‰ด ์นดํ…Œ๊ณ ๋ฆฌ ์•ˆ๋‚ด,0

# NER ๋ฐ์ดํ„ฐ
# data/NER_labeled_data_v2.conll ํ˜•์‹:
# ๋–ก๋ณถ์ด B-MENU
# ๊ฐ€๊ฒฉ์ด O
# ์–ผ๋งˆ์˜ˆ์š” O

3. ๋ชจ๋ธ ํ•™์Šต

# Step 1: Intent Classification ํ•™์Šต
cd 241215_BERT
python 241215_step1_train_cls_intent.py

# Step 2: NER ๋ชจ๋ธ ํ•™์Šต
cd ../241218_NER
python 241218_step1_ner_train_i_tagging.py

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

# ํ†ตํ•ฉ ์‹œ์Šคํ…œ ์‹คํ–‰
cd 241219_BERT_NER
python 250102_step3_MAIN_ars_chat_SQL_ju_v4_template_a6000.py

# ์›น ์„œ๋ฒ„ ์‹คํ–‰ (๋ณ„๋„ ํ„ฐ๋ฏธ๋„)
python 241215_step3_web_server_mp3.py

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

๐Ÿ”ฌ ๋ชจ๋ธ ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ

Phase 1: Intent Classification

# 1. ๋ฐ์ดํ„ฐ ๋งคํ•‘ ๋ฐ ์ „์ฒ˜๋ฆฌ
241215_step0_intent_mapping.py
- ์˜๋„(intent) โ†’ ์ˆซ์ž ๋ผ๋ฒจ ๋งคํ•‘
- 48๊ฐœ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฅ˜

# 2. ๋ชจ๋ธ ํ•™์Šต
241215_step1_train_cls_intent.py
- ๋ชจ๋ธ: KLUE/RoBERTa-Large
- ํ•™์Šต: 20 epochs, batch size 16
- Optimizer: AdamW (lr=2e-5)
- ํ‰๊ฐ€: Accuracy, F1-Score

# 3. ์ถ”๋ก  ๋ฐ ํ‰๊ฐ€
241215_step1_inference_cls_intent.py
241215_step1_evaluation_cls_intent.py

Phase 2: Named Entity Recognition

# 1. NER ํ•™์Šต (IO Tagging)
241218_step1_ner_train_i_tagging.py
- CoNLL ํ˜•์‹ ๋ฐ์ดํ„ฐ ๋กœ๋“œ
- Token Classification (6๊ฐœ ํƒœ๊ทธ)
- seqeval ํ‰๊ฐ€

# 2. ํ‰๊ฐ€
241218_step2_ner_evaluation.py
- Precision, Recall, F1-Score
- Entity-level ํ‰๊ฐ€

Phase 3: Integration & Response Generation

# ํ†ตํ•ฉ ์‹œ์Šคํ…œ
250102_step3_MAIN_ars_chat_SQL_ju_v4_template_a6000.py
- Intent Classification โ†’ NER โ†’ Slot Filling
- Hybrid Search (BM25 + Sentence-BERT)
- SQL Database ์ฟผ๋ฆฌ
- Template ๊ธฐ๋ฐ˜ ์‘๋‹ต ์ƒ์„ฑ

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

Request

curl -X POST http://localhost:1117/order \
  -H "Content-Type: application/json" \
  -d '{
    "header": {
      "interfaceID": "AI-SDC-CAT-001"
    },
    "body": {
      "text": "๋–ก๋ณถ์ด ๊ฐ€๊ฒฉ์ด ์–ผ๋งˆ์˜ˆ์š”?"
    }
  }'

Response

{
  "response": "๋–ก๋ณถ์ด์˜ ๊ฐ€๊ฒฉ์€ 5,000์›์ด์—์š”. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฌธ์ž๋กœ ๋ฐœ์†ก๋œ ๋ฉ”๋‰ดํŒ์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!",
  "intent": "ํŠน์ • ์ƒํ’ˆ ๋ฐ ๊ฐ€๊ฒฉ ์•ˆ๋‚ด",
  "intent_id": 1,
  "entities": {
    "MENU": ["๋–ก๋ณถ์ด"]
  },
  "confidence": 0.98
}

API Endpoints

EndpointMethodDescription
/orderPOST๋ฉ”์ธ ์ฑ—๋ด‡ API
/healthGET์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธ
/GET์›น UI

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

Intent Classification Results

ModelAccuracyF1-ScoreInference Time
KLUE/BERT-Base92.3%91.8%15ms
KLUE/RoBERTa-Large95.7%95.2%18ms

NER Results

Entity TypePrecisionRecallF1-Score
MENU94.2%92.8%93.5%
PAYMENT91.5%89.3%90.4%
DAY96.1%95.7%95.9%
Macro Avg93.9%92.6%93.3%

System Performance

  • ์‘๋‹ต ์‹œ๊ฐ„: ํ‰๊ท  850ms (Intent + NER + Search + Response)
  • ๋™์‹œ ์ ‘์†: 100+ requests/sec
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: ~4GB (GPU), ~2GB (CPU)

๐Ÿงช ๊ฐœ๋ฐœ ๊ณผ์ •

1. ๋ฌธ์ œ ์ •์˜ ๋ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘

  • ๋ ˆ์Šคํ† ๋ž‘ ๋„๋ฉ”์ธ 48๊ฐœ ์˜๋„ ์ •์˜
  • ์‹ค์ œ ๊ณ ๊ฐ ๋ฌธ์˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ (3,000+ ์ƒ˜ํ”Œ)
  • ๋ฐ์ดํ„ฐ ๋ผ๋ฒจ๋ง ๋ฐ ๊ฒ€์ฆ

2. Intent Classification ๊ฐœ๋ฐœ

  • ๋‹ค์–‘ํ•œ ๋ชจ๋ธ ์‹คํ—˜ (BERT, RoBERTa, ELECTRA)
  • Hyperparameter Tuning (ํ•™์Šต๋ฅ , ๋ฐฐ์น˜ ํฌ๊ธฐ, Epoch)
  • ๋ฐ์ดํ„ฐ ์ฆ๊ฐ• (Back-translation, Paraphrasing)

3. NER ๋ชจ๋ธ ๊ฐœ๋ฐœ

  • CoNLL ํ˜•์‹ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜
  • IO Tagging โ†’ BIO Tagging ์ „ํ™˜ ๊ณ ๋ ค
  • Entity-level ํ‰๊ฐ€ ์ง€ํ‘œ ๊ตฌํ˜„

4. ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

  • BM25 ๊ตฌํ˜„ ๋ฐ ์ตœ์ ํ™”
  • Sentence-BERT ์ž„๋ฒ ๋”ฉ
  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฐ€์ค‘์น˜ ์‹คํ—˜ (0.3 BM25 + 0.7 Semantic)

5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™

  • SQL ์Šคํ‚ค๋งˆ ์„ค๊ณ„
  • Template ๊ธฐ๋ฐ˜ ์‘๋‹ต ์ƒ์„ฑ ๋กœ์ง
  • Slot Filling ์•Œ๊ณ ๋ฆฌ์ฆ˜

6. ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ

  • Flask API ๊ตฌํ˜„
  • ์Œ์„ฑ ์ž…์ถœ๋ ฅ ํ†ตํ•ฉ (TTS/STT)
  • UI/UX ๊ฐœ์„ 

7. ํ…Œ์ŠคํŠธ ๋ฐ ์ตœ์ ํ™”

  • End-to-End ํ…Œ์ŠคํŠธ
  • ์„ฑ๋Šฅ ์ตœ์ ํ™” (๋ชจ๋ธ ์–‘์žํ™”, ์บ์‹ฑ)
  • ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ•

SynapseSmith/ars

Python

0

3 commits

updated Nov 24, 2025

See the code

README

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

Python PyTorch Transformers Flask License

BERT ๊ธฐ๋ฐ˜ Intent Classification + NER์„ ํ™œ์šฉํ•œ ๋ ˆ์Šคํ† ๋ž‘ ์ž๋™ ์‘๋‹ต ์‹œ์Šคํ…œ
๊ณ ๊ฐ ๋ฌธ์˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ดํ•ดํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ ์ •ํ™•ํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” End-to-End ์ฑ—๋ด‡ ์†”๋ฃจ์…˜


๐Ÿ“‹ ๋ชฉ์ฐจ


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

๋ฐฐ๊ฒฝ

๋ ˆ์Šคํ† ๋ž‘์ด๋‚˜ ์นดํŽ˜์™€ ๊ฐ™์€ ์„œ๋น„์Šค ์—…์ข…์—์„œ ๊ณ ๊ฐ ๋ฌธ์˜๋Š” ๋ฐ˜๋ณต์ ์ด๊ณ  ์œ ์‚ฌํ•œ ํŒจํ„ด์„ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฉ”๋‰ด ์•ˆ๋‚ด, ์˜์—…์‹œ๊ฐ„, ๊ฒฐ์ œ ๋ฐฉ๋ฒ•, ์˜ˆ์•ฝ ๋“ฑ์˜ ๋ฌธ์˜๋ฅผ ์ž๋™ํ™”ํ•˜์—ฌ 24/7 ๊ณ ๊ฐ ์‘๋Œ€๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ , ์ง์›์˜ ์—…๋ฌด ๋ถ€๋‹ด์„ ์ค„์ด๋Š” ๊ฒƒ์ด ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ฐ€์น˜

  • ์‹ค์‹œ๊ฐ„ ์‘๋‹ต: ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„ 1์ดˆ ์ด๋‚ด
  • ๋†’์€ ์ •ํ™•๋„: Intent Classification 95%+, NER F1-Score 90%+
  • ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ: ๋‹ค์–‘ํ•œ ์—…์ข…์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆํ˜• ์„ค๊ณ„
  • ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜: SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™๋œ ๋™์  ์‘๋‹ต ์ƒ์„ฑ

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

1. ๐Ÿง  ๊ณ ๊ธ‰ ์ž์—ฐ์–ด ์ดํ•ด (NLU)

  • Intent Classification: 48๊ฐ€์ง€ ์„ธ๋ถ„ํ™”๋œ ์˜๋„ ๋ถ„๋ฅ˜

    • ๋ฉ”๋‰ด ๊ด€๋ จ: ์นดํ…Œ๊ณ ๋ฆฌ, ํŠน์ • ๋ฉ”๋‰ด, ์ธ๊ธฐ/์ถ”์ฒœ, ์ด๋ฒคํŠธ ๋ฉ”๋‰ด ๋“ฑ
    • ์šด์˜ ์ •๋ณด: ์˜์—…์‹œ๊ฐ„, ํœด๋ฌด์ผ, ์ฃผ๋ฌธ/๊ฒฐ์ œ ๋ฐฉ์‹
    • ์‹œ์„ค ์ •๋ณด: ์œ„์น˜, ์ขŒ์„, ๋ฐฐ๋‹ฌ ์ •๋ณด
    • ํ˜œํƒ ์ •๋ณด: ๋ฉค๋ฒ„์‹ญ, ํฌ์ธํŠธ, ์ฟ ํฐ, ์ด๋ฒคํŠธ
  • Named Entity Recognition (NER): 6๊ฐ€์ง€ ์—”ํ‹ฐํ‹ฐ ์ธ์‹

    • B-MENU/I-MENU: ๋ฉ”๋‰ด๋ช… ์ถ”์ถœ
    • B-PAYMENT/I-PAYMENT: ๊ฒฐ์ œ ์ˆ˜๋‹จ
    • B-DAY: ์š”์ผ ์ •๋ณด
    • O: ๊ธฐํƒ€ ํ† ํฐ

2. ๐Ÿ” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ

  • BM25 (Lexical Search): ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ์ •ํ™•ํ•œ ๋งค์นญ
  • Sentence-BERT (Semantic Search): ์˜๋ฏธ ๊ธฐ๋ฐ˜ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰
  • ๊ฐ€์ค‘์น˜ ์กฐํ•ฉ: ๋‘ ๋ฐฉ์‹์„ ๊ฒฐํ•ฉํ•œ ์ตœ์ ์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ

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

  • SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹ค์‹œ๊ฐ„ ๋ฉ”๋‰ด, ๊ฐ€๊ฒฉ, ์žฌ๊ณ  ์ •๋ณด ์กฐํšŒ
  • Template ๊ธฐ๋ฐ˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ์‘๋‹ต ์ƒ์„ฑ
  • ๋™์  ์Šฌ๋กฏ ํ•„๋ง (Slot Filling)

4. ๐ŸŒ ์›น ์ธํ„ฐํŽ˜์ด์Šค

  • Flask ๊ธฐ๋ฐ˜ RESTful API
  • ์‹ค์‹œ๊ฐ„ ์Œ์„ฑ ์ž…๋ ฅ/์ถœ๋ ฅ ์ง€์›
  • ๋ฐ˜์‘ํ˜• ์›น UI

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

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   User Input    โ”‚ (์Œ์„ฑ/ํ…์ŠคํŠธ)
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”
    โ”‚  Flask  โ”‚ Web Server
    โ”‚  Server โ”‚ (Port: 5007)
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  Intent Classifier  โ”‚ (KLUE/RoBERTa-Large)
    โ”‚  (48 classes)       โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  NER Model       โ”‚ (KLUE/RoBERTa-Large)
    โ”‚  (6 entity tags) โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  Hybrid Search Engine โ”‚
    โ”‚  (BM25 + Sentence-BERT)โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  SQL Database  โ”‚
    โ”‚  Query         โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  Response Generator โ”‚
    โ”‚  (Template-based)   โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  Output  โ”‚ (์Œ์„ฑ/ํ…์ŠคํŠธ)
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

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

Machine Learning & NLP

  • Framework: PyTorch 2.0+
  • Transformer: Hugging Face Transformers 4.30+
  • Pre-trained Model: KLUE/RoBERTa-Large, KLUE/BERT-Base
  • NER: Token Classification (IO/BIO Tagging)
  • Evaluation: seqeval, scikit-learn

Backend & Database

  • Web Framework: Flask 2.0+
  • Database: SQLite / MySQL (SQL ์—ฐ๋™)
  • Search Engine:
    • BM25 (rank-bm25)
    • Sentence-BERT (sentence-transformers)
    • TF-IDF (scikit-learn)

Frontend & UI

  • HTML5/CSS3/JavaScript
  • Real-time Communication: AJAX, WebSocket
  • TTS: AWS Polly / Google TTS / RealtimeTTS

Development Tools

  • Experiment Tracking: Weights & Biases (wandb)
  • Data Processing: pandas, numpy
  • Version Control: Git

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

Beaver_ARS/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“„ README.md                    # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ (๋ณธ ํŒŒ์ผ)
โ”œโ”€โ”€ ๐Ÿ“„ requirements.txt             # ์˜์กด์„ฑ ํŒจํ‚ค์ง€
โ”œโ”€โ”€ ๐Ÿ“„ .gitignore                   # Git ์ œ์™ธ ํŒŒ์ผ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ 241215_BERT/                 # Intent Classification ๋ชจ๋“ˆ
โ”‚   โ”œโ”€โ”€ 241215_step0_intent_mapping.py       # ์˜๋„ ๋ผ๋ฒจ ๋งคํ•‘
โ”‚   โ”œโ”€โ”€ 241215_step1_train_cls_intent.py     # Intent ๋ถ„๋ฅ˜ ๋ชจ๋ธ ํ•™์Šต
โ”‚   โ”œโ”€โ”€ 241215_step1_inference_cls_intent.py # ์ถ”๋ก 
โ”‚   โ”œโ”€โ”€ 241215_step1_evaluation_cls_intent.py # ํ‰๊ฐ€
โ”‚   โ”œโ”€โ”€ 241215_step2_response_template.py    # ์‘๋‹ต ํ…œํ”Œ๋ฆฟ ์„ค๊ณ„
โ”‚   โ”œโ”€โ”€ 241215_step3_web_server_main.py      # Flask ์›น ์„œ๋ฒ„
โ”‚   โ”œโ”€โ”€ data/                                # ํ•™์Šต ๋ฐ์ดํ„ฐ
โ”‚   โ”‚   โ”œโ”€โ”€ user_intent_v*.csv               # Intent ๋ฐ์ดํ„ฐ์…‹ (๋ฒ„์ „๋ณ„)
โ”‚   โ”‚   โ””โ”€โ”€ intent_v*.xlsx                   # Excel ํ˜•์‹ ๋ฐ์ดํ„ฐ
โ”‚   โ”œโ”€โ”€ checkpoint/                          # ํ•™์Šต๋œ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ
โ”‚   โ”œโ”€โ”€ logs/                                # ํ•™์Šต/์ถ”๋ก  ๋กœ๊ทธ
โ”‚   โ”œโ”€โ”€ templates/                           # HTML ํ…œํ”Œ๋ฆฟ
โ”‚   โ””โ”€โ”€ static/                              # CSS, JS, ์ด๋ฏธ์ง€
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ 241218_NER/                  # Named Entity Recognition ๋ชจ๋“ˆ
โ”‚   โ”œโ”€โ”€ 241218_step1_ner_train_i_tagging.py  # NER ๋ชจ๋ธ ํ•™์Šต (IO Tagging)
โ”‚   โ”œโ”€โ”€ 241218_step2_ner_evaluation.py       # NER ํ‰๊ฐ€
โ”‚   โ”œโ”€โ”€ data/                                # NER ํ•™์Šต ๋ฐ์ดํ„ฐ
โ”‚   โ”‚   โ””โ”€โ”€ NER_labeled_data_v*.conll        # CoNLL ํ˜•์‹ ๋ผ๋ฒจ๋ง ๋ฐ์ดํ„ฐ
โ”‚   โ””โ”€โ”€ logs/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ 241219_BERT_NER/             # Intent + NER ํ†ตํ•ฉ ์‹œ์Šคํ…œ
โ”‚   โ”œโ”€โ”€ 250102_step3_MAIN_ars_chat_SQL_ju_v4_template_a6000.py  # ์ตœ์ข… ํ†ตํ•ฉ ์‹œ์Šคํ…œ
โ”‚   โ”œโ”€โ”€ 241215_step3_web_server_mp3.py       # ์Œ์„ฑ ์ถœ๋ ฅ ์›น ์„œ๋ฒ„
โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”‚   โ””โ”€โ”€ dataset_SQL_general_ju_*.xlsx    # SQL ์—ฐ๋™ ๋ฐ์ดํ„ฐ์…‹
โ”‚   โ”œโ”€โ”€ checkpoint/                          # ํ†ตํ•ฉ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ
โ”‚   โ”œโ”€โ”€ templates/
โ”‚   โ”‚   โ”œโ”€โ”€ main_index_polly.html            # AWS Polly TTS UI
โ”‚   โ”‚   โ””โ”€โ”€ main_index_polly_text.html       # ํ…์ŠคํŠธ ์ „์šฉ UI
โ”‚   โ””โ”€โ”€ static/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ docs/                        # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ
โ”‚   โ”œโ”€โ”€ ARCHITECTURE.md             # ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์ƒ์„ธ
โ”‚   โ”œโ”€โ”€ API_REFERENCE.md            # API ๋ช…์„ธ์„œ
โ”‚   โ”œโ”€โ”€ TRAINING_GUIDE.md           # ๋ชจ๋ธ ํ•™์Šต ๊ฐ€์ด๋“œ
โ”‚   โ””โ”€โ”€ DEPLOYMENT.md               # ๋ฐฐํฌ ๊ฐ€์ด๋“œ
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ tests/                       # ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
โ”‚   โ”œโ”€โ”€ test_intent_classification.py
โ”‚   โ”œโ”€โ”€ test_ner_model.py
โ”‚   โ””โ”€โ”€ test_api_endpoints.py
โ”‚
โ””โ”€โ”€ ๐Ÿ“‚ scripts/                     # ์œ ํ‹ธ๋ฆฌํ‹ฐ ์Šคํฌ๋ฆฝํŠธ
    โ”œโ”€โ”€ data_preprocessing.py
    โ”œโ”€โ”€ model_evaluation.py
    โ””โ”€โ”€ export_model.py

๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰

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

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

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

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

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

# Intent Classification ๋ฐ์ดํ„ฐ
# data/user_intent_v4.csv ํ˜•์‹:
# text,intent,intent_num
# "๋ฉ”๋‰ดํŒ ์ข€ ๋ณด์—ฌ์ฃผ์„ธ์š”",๋ฉ”๋‰ด ์นดํ…Œ๊ณ ๋ฆฌ ์•ˆ๋‚ด,0

# NER ๋ฐ์ดํ„ฐ
# data/NER_labeled_data_v2.conll ํ˜•์‹:
# ๋–ก๋ณถ์ด B-MENU
# ๊ฐ€๊ฒฉ์ด O
# ์–ผ๋งˆ์˜ˆ์š” O

3. ๋ชจ๋ธ ํ•™์Šต

# Step 1: Intent Classification ํ•™์Šต
cd 241215_BERT
python 241215_step1_train_cls_intent.py

# Step 2: NER ๋ชจ๋ธ ํ•™์Šต
cd ../241218_NER
python 241218_step1_ner_train_i_tagging.py

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

# ํ†ตํ•ฉ ์‹œ์Šคํ…œ ์‹คํ–‰
cd 241219_BERT_NER
python 250102_step3_MAIN_ars_chat_SQL_ju_v4_template_a6000.py

# ์›น ์„œ๋ฒ„ ์‹คํ–‰ (๋ณ„๋„ ํ„ฐ๋ฏธ๋„)
python 241215_step3_web_server_mp3.py

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

๐Ÿ”ฌ ๋ชจ๋ธ ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ

Phase 1: Intent Classification

# 1. ๋ฐ์ดํ„ฐ ๋งคํ•‘ ๋ฐ ์ „์ฒ˜๋ฆฌ
241215_step0_intent_mapping.py
- ์˜๋„(intent) โ†’ ์ˆซ์ž ๋ผ๋ฒจ ๋งคํ•‘
- 48๊ฐœ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฅ˜

# 2. ๋ชจ๋ธ ํ•™์Šต
241215_step1_train_cls_intent.py
- ๋ชจ๋ธ: KLUE/RoBERTa-Large
- ํ•™์Šต: 20 epochs, batch size 16
- Optimizer: AdamW (lr=2e-5)
- ํ‰๊ฐ€: Accuracy, F1-Score

# 3. ์ถ”๋ก  ๋ฐ ํ‰๊ฐ€
241215_step1_inference_cls_intent.py
241215_step1_evaluation_cls_intent.py

Phase 2: Named Entity Recognition

# 1. NER ํ•™์Šต (IO Tagging)
241218_step1_ner_train_i_tagging.py
- CoNLL ํ˜•์‹ ๋ฐ์ดํ„ฐ ๋กœ๋“œ
- Token Classification (6๊ฐœ ํƒœ๊ทธ)
- seqeval ํ‰๊ฐ€

# 2. ํ‰๊ฐ€
241218_step2_ner_evaluation.py
- Precision, Recall, F1-Score
- Entity-level ํ‰๊ฐ€

Phase 3: Integration & Response Generation

# ํ†ตํ•ฉ ์‹œ์Šคํ…œ
250102_step3_MAIN_ars_chat_SQL_ju_v4_template_a6000.py
- Intent Classification โ†’ NER โ†’ Slot Filling
- Hybrid Search (BM25 + Sentence-BERT)
- SQL Database ์ฟผ๋ฆฌ
- Template ๊ธฐ๋ฐ˜ ์‘๋‹ต ์ƒ์„ฑ

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

Request

curl -X POST http://localhost:1117/order \
  -H "Content-Type: application/json" \
  -d '{
    "header": {
      "interfaceID": "AI-SDC-CAT-001"
    },
    "body": {
      "text": "๋–ก๋ณถ์ด ๊ฐ€๊ฒฉ์ด ์–ผ๋งˆ์˜ˆ์š”?"
    }
  }'

Response

{
  "response": "๋–ก๋ณถ์ด์˜ ๊ฐ€๊ฒฉ์€ 5,000์›์ด์—์š”. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฌธ์ž๋กœ ๋ฐœ์†ก๋œ ๋ฉ”๋‰ดํŒ์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!",
  "intent": "ํŠน์ • ์ƒํ’ˆ ๋ฐ ๊ฐ€๊ฒฉ ์•ˆ๋‚ด",
  "intent_id": 1,
  "entities": {
    "MENU": ["๋–ก๋ณถ์ด"]
  },
  "confidence": 0.98
}

API Endpoints

EndpointMethodDescription
/orderPOST๋ฉ”์ธ ์ฑ—๋ด‡ API
/healthGET์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธ
/GET์›น UI

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

Intent Classification Results

ModelAccuracyF1-ScoreInference Time
KLUE/BERT-Base92.3%91.8%15ms
KLUE/RoBERTa-Large95.7%95.2%18ms

NER Results

Entity TypePrecisionRecallF1-Score
MENU94.2%92.8%93.5%
PAYMENT91.5%89.3%90.4%
DAY96.1%95.7%95.9%
Macro Avg93.9%92.6%93.3%

System Performance

  • ์‘๋‹ต ์‹œ๊ฐ„: ํ‰๊ท  850ms (Intent + NER + Search + Response)
  • ๋™์‹œ ์ ‘์†: 100+ requests/sec
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: ~4GB (GPU), ~2GB (CPU)

๐Ÿงช ๊ฐœ๋ฐœ ๊ณผ์ •

1. ๋ฌธ์ œ ์ •์˜ ๋ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘

  • ๋ ˆ์Šคํ† ๋ž‘ ๋„๋ฉ”์ธ 48๊ฐœ ์˜๋„ ์ •์˜
  • ์‹ค์ œ ๊ณ ๊ฐ ๋ฌธ์˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ (3,000+ ์ƒ˜ํ”Œ)
  • ๋ฐ์ดํ„ฐ ๋ผ๋ฒจ๋ง ๋ฐ ๊ฒ€์ฆ

2. Intent Classification ๊ฐœ๋ฐœ

  • ๋‹ค์–‘ํ•œ ๋ชจ๋ธ ์‹คํ—˜ (BERT, RoBERTa, ELECTRA)
  • Hyperparameter Tuning (ํ•™์Šต๋ฅ , ๋ฐฐ์น˜ ํฌ๊ธฐ, Epoch)
  • ๋ฐ์ดํ„ฐ ์ฆ๊ฐ• (Back-translation, Paraphrasing)

3. NER ๋ชจ๋ธ ๊ฐœ๋ฐœ

  • CoNLL ํ˜•์‹ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜
  • IO Tagging โ†’ BIO Tagging ์ „ํ™˜ ๊ณ ๋ ค
  • Entity-level ํ‰๊ฐ€ ์ง€ํ‘œ ๊ตฌํ˜„

4. ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

  • BM25 ๊ตฌํ˜„ ๋ฐ ์ตœ์ ํ™”
  • Sentence-BERT ์ž„๋ฒ ๋”ฉ
  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฐ€์ค‘์น˜ ์‹คํ—˜ (0.3 BM25 + 0.7 Semantic)

5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™

  • SQL ์Šคํ‚ค๋งˆ ์„ค๊ณ„
  • Template ๊ธฐ๋ฐ˜ ์‘๋‹ต ์ƒ์„ฑ ๋กœ์ง
  • Slot Filling ์•Œ๊ณ ๋ฆฌ์ฆ˜

6. ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ

  • Flask API ๊ตฌํ˜„
  • ์Œ์„ฑ ์ž…์ถœ๋ ฅ ํ†ตํ•ฉ (TTS/STT)
  • UI/UX ๊ฐœ์„ 

7. ํ…Œ์ŠคํŠธ ๋ฐ ์ตœ์ ํ™”

  • End-to-End ํ…Œ์ŠคํŠธ
  • ์„ฑ๋Šฅ ์ตœ์ ํ™” (๋ชจ๋ธ ์–‘์žํ™”, ์บ์‹ฑ)
  • ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ•