Skip to content

ParkHangah/test

Β 
Β 

Repository files navigation

<<<<<<< HEAD

AIFFEL_quest_eng

Repository Structure

AIFFEL_quest_eng
β”œβ”€β”€ Computer_Vision
β”‚   β”œβ”€β”€ CV01
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ CV02
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   └── CV03
β”‚       β”œβ”€β”€ README.md
β”‚       └── .ipynb
β”œβ”€β”€ Data_Analysis
β”‚   β”œβ”€β”€ DA01
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   └── DA02
β”‚       β”œβ”€β”€ README.md
β”‚       └── .ipynb
β”œβ”€β”€ Deployment
β”‚   β”œβ”€β”€ Contents
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   └── Final_Code
β”‚       β”œβ”€β”€ README.md
β”‚       └── .ipynb
β”œβ”€β”€ LLM_Application
β”‚   β”œβ”€β”€ LLM01
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ LLM02
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ LLM03
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ LLM04
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   └── LLM05
β”‚       β”œβ”€β”€ README.md
β”‚       └── .ipynb
β”œβ”€β”€ MLOps
β”‚   β”œβ”€β”€ MLOps01
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ MLOps02
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ MLOps03
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ MLOps04
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ MLOps05
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ MLOps06
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   └── MLOps07
β”‚       β”œβ”€β”€ README.md
β”‚       └── .ipynb
β”œβ”€β”€ Main_Quest
β”‚   β”œβ”€β”€ Quest01
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ Quest02
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ Quest03
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ Quest04
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   └── Quest05
β”‚       └── README.md
β”œβ”€β”€ NLP
β”‚   β”œβ”€β”€ NLP01
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ NLP02
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ NLP03
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ NLP04
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   └── NLP05
β”‚       β”œβ”€β”€ README.md
β”‚       └── .ipynb
β”œβ”€β”€ Python
β”‚   β”œβ”€β”€ Py01
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ Py02
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   β”œβ”€β”€ Py03
β”‚   β”‚   β”œβ”€β”€ README.md
β”‚   β”‚   └── .ipynb
β”‚   └── Py04
β”‚       β”œβ”€β”€ README.md
β”‚       └── .ipynb
└── README.md

=======

ν•œκ΅­μ–΄ 챗봇 ν”„λ‘œμ νŠΈ

RTX 4090을 ν™œμš©ν•œ ν•œκ΅­μ–΄ 챗봇 개발 ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€. 트랜슀포머 기반 μ‹œν€€μŠ€-투-μ‹œν€€μŠ€ λͺ¨λΈμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ κ°œμš”

이 ν”„λ‘œμ νŠΈλŠ” λ‹€μŒ 단계λ₯Ό λ”°λ¦…λ‹ˆλ‹€:

  1. Step 1-2: 데이터 μ „μ²˜λ¦¬ (01_preprocess.py)

    • CSV 데이터 λ‘œλ“œ
    • μ •κ·œμ‹μ„ μ‚¬μš©ν•œ 데이터 μ •μ œ
    • κ²°μΈ‘κ°’ 및 쀑볡 제거
  2. Step 3: Mecab μ½”νΌμŠ€ ꡬ좕 (02_build_corpus.py)

    • KoNLPy Mecab을 μ‚¬μš©ν•œ ν˜•νƒœμ†Œ 뢄석
    • μ–΄νœ˜ 사전 ꡬ좕
    • ν† ν°ν™”λœ 데이터 μ €μž₯
  3. Step 4: 데이터 증강 (03_augmentation.py)

    • Word2Vec (ko.bin) 기반 μœ μ‚¬ 단어 생성
    • 데이터λ₯Ό 3배둜 증강
  4. Step 5-6: λͺ¨λΈ ν•™μŠ΅ (04_train.py)

    • Transformer 기반 Seq2Seq λͺ¨λΈ
    • , 토큰 μΆ”κ°€
    • RTX 4090 μ΅œμ ν™” 배치 μ‚¬μ΄μ¦ˆ μ„€μ •
    • λͺ¨λΈ ν•™μŠ΅ 및 검증

μ‹œμŠ€ν…œ μš”κ΅¬μ‚¬ν•­

  • GPU: RTX 4090 (24GB VRAM)
  • Python: 3.10+
  • CUDA: 12.1+
  • Mecab μ„€μΉ˜ ν•„μš”

μ„€μΉ˜ 방법

1. μ €μž₯μ†Œ 클둠 및 ν™˜κ²½ μ„€μ •

cd /workspace/chatbot_project
python -m venv venv
source venv/bin/activate  # Linux/Mac
# λ˜λŠ” venv\Scripts\activate (Windows)

2. μ˜μ‘΄μ„± μ„€μΉ˜

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt

3. Mecab μ„€μΉ˜ (Linux)

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y mecab mecab-ko mecab-ko-dic

# λ˜λŠ” Condaλ₯Ό μ‚¬μš©ν•  경우
conda install -c conda-forge mecab mecab-ko-dic

4. ν•œκ΅­μ–΄ Word2Vec λͺ¨λΈ λ‹€μš΄λ‘œλ“œ

ko.bin λͺ¨λΈμ„ λ‹€μš΄λ‘œλ“œν•˜μ—¬ models/ 폴더에 μ €μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ˜΅μ…˜ 1: Kyubyong의 wordvectors λ‹€μš΄λ‘œλ“œ

cd models
wget https://github.com/Kyubyong/wordvectors/releases/download/korean/ko.bin
cd ..

μ˜΅μ…˜ 2: FastText CBOW λͺ¨λΈ μ‚¬μš©

cd models
wget https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.ko.300.bin.gz
gunzip cc.ko.300.bin.gz
mv cc.ko.300.bin ko.bin
cd ..

5. 데이터 μ€€λΉ„

챗봇 데이터 CSV νŒŒμΌμ„ μ€€λΉ„ν•˜μ„Έμš”:

  • 파일λͺ…: ChatbotData.csv
  • μœ„μΉ˜: data/raw/ChatbotData.csv
  • ν˜•μ‹: μ΅œμ†Œ 2개 컬럼 (question, answer)
question,answer
μ•ˆλ…•ν•˜μ„Έμš”,μ•ˆλ…•ν•˜μ„Έμš”! μ–΄λ–»κ²Œ λ„μ™€λ“œλ¦΄κΉŒμš”?
날씨가 μ–΄λ–»κ²Œ λ˜λ‚˜μš”?,날씨 μ •λ³΄λŠ” ν˜„μž¬ μ œκ³΅ν•˜κ³  μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ‹€ν–‰ 방법

Step별 μ‹€ν–‰

Augmentation tip:

  • 03_augmentation.pyκ°€ UnicodeDecodeErrorλ₯Ό λ‚΄λ©΄ ko.bin ν˜•μ‹μ΄ 잘λͺ»λ˜μ—ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€ν¬λ¦½νŠΈκ°€ λ°”μ΄λ„ˆλ¦¬/ν…μŠ€νŠΈ/FastText ν˜•μ‹μ„ μžλ™μœΌλ‘œ μ‹œλ„ν•˜λ―€λ‘œ μ½”λ“œκ°€ 이전보닀 μ•ˆμ •μ μž…λ‹ˆλ‹€.
  • λͺ¨λΈ λ‘œλ”©μ΄ λ„ˆλ¬΄ 였래 κ±Έλ¦¬κ±°λ‚˜ λ°˜μ‘μ΄ μ—†μœΌλ©΄, ko.bin 파일이 맀우 μ»€μ„œ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 경우 μŠ€ν¬λ¦½νŠΈλŠ” μžλ™μœΌλ‘œ 증강을 κ±΄λ„ˆλ›°κ³  원본 데이터λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μ™„μ „νžˆ 증강 단계λ₯Ό 끄렀면 config.pyμ—μ„œ USE_AUGMENTATION = False둜 μ„€μ •ν•˜μ„Έμš”.
# Step 1-2: 데이터 μ „μ²˜λ¦¬
python scripts/01_preprocess.py

# Step 3: Mecab μ½”νΌμŠ€ ꡬ좕
python scripts/02_build_corpus.py

# Step 4: 데이터 증강
python scripts/03_augmentation.py

# Step 5-6: λͺ¨λΈ ν•™μŠ΅
python scripts/04_train.py

전체 νŒŒμ΄ν”„λΌμΈ μ‹€ν–‰ (슀크립트)

bash run_pipeline.sh

RTX 4090 μ΅œμ ν™” μ„€μ •

이 ν”„λ‘œμ νŠΈλŠ” RTX 4090의 μ„±λŠ₯을 μ΅œλŒ€ν•œ ν™œμš©ν•˜λ„λ‘ μ΅œμ ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

  • Batch Size: 128 (RTX 4090의 24GB VRAM μ΅œμ ν™”)
  • Model Size:
    • d_model: 768 (was 512, increased for RTX 4090)
    • num_heads: 12
    • num_layers: 6
    • dim_feedforward: 3072
  • Mixed Precision: κ°€λŠ₯ (μΆ”κ°€ μ΅œμ ν™”)
  • Memory Usage: ~15-18GB per batch

배치 μ‚¬μ΄μ¦ˆλ₯Ό μ‘°μ •ν•˜λ €λ©΄ config.py의 BATCH_SIZEλ₯Ό μˆ˜μ •ν•˜μ„Έμš”.

μ„€μ • 파일

config.pyμ—μ„œ λ‹€μŒμ„ μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€:

# 데이터 경둜
VOCAB_SIZE = 10000
EMBEDDING_DIM = 300
MAX_SEQ_LENGTH = 50

# νŠΈλ ˆμ΄λ‹ νŒŒλΌλ―Έν„°
BATCH_SIZE = 128
EPOCHS = 20
LEARNING_RATE = 0.001
DROPOUT_RATE = 0.3

# 트랜슀포머 νŒŒλΌλ―Έν„°
TRANSFORMER_D_MODEL = 768  # increased for RTX 4090
TRANSFORMER_NHEAD = 12
TRANSFORMER_NUM_LAYERS = 6
TRANSFORMER_DIM_FEEDFORWARD = 3072

ν”„λ‘œμ νŠΈ ꡬ쑰

chatbot_project/
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ raw/                    # 원본 데이터
β”‚   β”‚   └── ChatbotData.csv
β”‚   └── processed/              # 처리된 데이터
β”‚       β”œβ”€β”€ cleaned_data.csv
β”‚       β”œβ”€β”€ augmented_data.csv
β”‚       └── corpus.pkl
β”œβ”€β”€ models/
β”‚   β”œβ”€β”€ ko.bin                  # Word2Vec λͺ¨λΈ
β”‚   β”œβ”€β”€ chatbot_model.pt        # ν•™μŠ΅λœ λͺ¨λΈ
β”‚   β”œβ”€β”€ tokenizer.pkl           # ν† ν¬λ‚˜μ΄μ €
β”‚   └── training_results.json   # ν•™μŠ΅ κ²°κ³Ό
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ 01_preprocess.py        # μ „μ²˜λ¦¬
β”‚   β”œβ”€β”€ 02_build_corpus.py      # μ½”νΌμŠ€ ꡬ좕
β”‚   β”œβ”€β”€ 03_augmentation.py      # 데이터 증강
β”‚   └── 04_train.py             # λͺ¨λΈ ν•™μŠ΅
β”œβ”€β”€ notebooks/
β”‚   └── analysis.ipynb          # 뢄석 및 μ‹œκ°ν™”
β”œβ”€β”€ config.py                   # μ„€μ • 파일
β”œβ”€β”€ requirements.txt            # μ˜μ‘΄μ„±
└── README.md                   # 이 파일

좜λ ₯ 파일

각 λ‹¨κ³„λ³„λ‘œ μƒμ„±λ˜λŠ” 파일:

단계 좜λ ₯ 파일 μ„€λͺ…
1-2 data/processed/cleaned_data.csv μ •μ œλœ 데이터
3 data/processed/corpus.pkl Mecab 토큰화 κ²°κ³Ό 및 μ–΄νœ˜μ‚¬μ „
4 data/processed/augmented_data.csv μ¦κ°•λœ 데이터
5-6 models/chatbot_model.pt ν•™μŠ΅λœ λͺ¨λΈ
5-6 models/tokenizer.pkl ν† ν¬λ‚˜μ΄μ €
5-6 models/training_results.json ν•™μŠ΅ λ©”νŠΈλ¦­

λͺ¨λ‹ˆν„°λ§

ν•™μŠ΅ 진행상황을 λͺ¨λ‹ˆν„°λ§ν•˜λ €λ©΄:

# ν„°λ―Έλ„μ—μ„œ μ‹€μ‹œκ°„ 둜그 확인
tail -f logs/training.log

# ν•™μŠ΅ 곑선 확인 (Jupyter Notebook)
jupyter notebook notebooks/analysis.ipynb

문제 ν•΄κ²°

Mecab μ„€μΉ˜ 였λ₯˜

# Linux (Ubuntu/Debian)
sudo apt-get install -y libmecab-dev mecab mecab-ko mecab-ko-dic

# macOS
brew install mecab mecab-ko mecab-ko-dic

# Conda (크둜슀 ν”Œλž«νΌ)
conda install -c conda-forge mecab mecab-ko-dic

ko.bin λͺ¨λΈ λ‘œλ“œ 였λ₯˜

  • λͺ¨λΈμ΄ models/ko.bin에 μžˆλŠ”μ§€ 확인
  • λͺ¨λΈ 파일 크기 > 1GB 확인
  • 파일이 μ†μƒλ˜μ—ˆμ„ 경우 λ‹€μ‹œ λ‹€μš΄λ‘œλ“œ

Out of Memory 였λ₯˜

  • config.pyμ—μ„œ BATCH_SIZE κ°μ†Œ (128 β†’ 64 λ˜λŠ” 32)
  • TRANSFORMER_D_MODEL κ°μ†Œ (512 β†’ 256)
  • MAX_SEQ_LENGTH κ°μ†Œ (50 β†’ 32)

CUDA 였λ₯˜

# CUDA 버전 확인
nvcc --version

# PyTorch CUDA ν˜Έν™˜μ„± 확인
python -c "import torch; print(torch.cuda.is_available())"

Performance μ˜ˆμƒμΉ˜

RTX 4090μ—μ„œμ˜ μ˜ˆμƒ μ„±λŠ₯ (배치 μ‚¬μ΄μ¦ˆ: 128):

  • Data 처리: ~100K samples/sec
  • λͺ¨λΈ ν•™μŠ΅: ~500 samples/sec
  • 20 epochs, 100K samples: ~40λΆ„

λΌμ΄μ„ μŠ€

MIT License

참고자료

문의

ν”„λ‘œμ νŠΈ κ΄€λ ¨ 질문이 μžˆμœΌμ‹œλ©΄ 이슈λ₯Ό λ“±λ‘ν•΄μ£Όμ„Έμš”.

9e320f7 (Upload chatbot project to NLP02/chatbot)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Jupyter Notebook 99.5%
  • Other 0.5%