NELLM(๋ผ๋ฆ)์ ์ค๊ณ ๊ฑฐ๋์์ ํ๋งค์ ๋์ ๊ฐ๊ฒฉ์ ํ์์ 1๋ n์ผ๋ก ๋์ํ๋ ์ฑ๋ด ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
- ๋ฐฐํฌ ๊ธฐ๊ฐ : 23.07.19 21:00 ~ 23.08.18 16:00
- ๋ฐฐํฌ ํํ : ๋ง์ user๋ค์ด ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ ์ํด NELLM๊ณผ ๋ํํ ์ ์๋ ๊ฒ์ ํํ๋ก ๋ฐฐํฌํ์ต๋๋ค.
- ์ด์ฉ ๋ฐฉ๋ฒ :
ํ์ ๋ฑ๋ก
ํํ๋งค ๋ชฉ๋ก
์์ ์ํ๋ ์ํ ํ์ด์ง์ ์ ์ฅํ์ฌ NELLM๊ณผ ๋ํํ ์ ์์ต๋๋ค.
๊น๋ฏผํ | ๊น์์ง | ๊น์ฑ์ฐ | ์ค์ํ | ์ ์ธ์ฐ |
Data | Model | Model | Service | Service |
- Data ์์ง ยท ๋ฒ์ญ - ChatGPT API ํ์ฉ ๋ฐ์ดํฐ ์์ฑ - ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ยท EDA |
- QLoRA ยท Vicuna ํ์ต ๊ตฌํ - ๋ชจ๋ธ ์ถ๋ ฅ ์กฐ์ Advisor ์ ์ - ๋ฐ์ดํฐ ๊ฒ์ |
- LoRA fine-tuning - ๋ฐ์ดํฐ ๊ฒ์ |
- Web API, Model API ์๋น ๋ฐ ๊ด๋ฆฌ - ์ฌ์ฉ์ ๋ฐ์ดํฐ, ๋ก๊ทธ ๋ถ์ |
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ์๋ํ - ์ฌ์ฉ์ ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ํ์ต ๋ฐ์ดํฐ ์ ์ |
๐คNELLM(๋ผ๋ฆ)์ KULLM(๊ตฌ๋ฆ)์ ๋ฐํ์ผ๋ก QLoRA fine-tuning๋ ๋ชจ๋ธ์ ๋๋ค.
fp16์์ int8๋ก quantizingํ ํ LoRA(Low Rank Adaptation)์ ์ ์ฉํ์ฌ ๊ฐ์ฉํ ์์ (NVIDIA V100 VRAM 32GB) ๋ด์์ ํ์ต์ด ๊ฐ๋ฅํ๊ฒ ํ์๋ค.2. Advisor
๊ฐ๊ฒฉ์ regex๋ก ์ถ์ ํ๋ฉฐ rule์ ๊ธฐ๋ฐ ์ผ๋ก NELLM์ ๋ฐํ๋ฅผ ์ผ์ ๋ถ๋ถ ๊ฐ์ ํ์ฌ controlํ์์ต๋๋ค.
- e2e_dataset.py : ํ๋งค์์ ๋ฐํ๋ง ํ์ตํ๋๋ก ๋ฐ์ดํฐ์ ์ ๊ตฌ์ถํ์ฌ ๋ชจ๋ธ์ด ๊ตฌ๋งค์์ ๋ฐํ๊น์ง ํผ๋ํ์ฌ ํจ๊ป ์์ฑํ๋ ํ์์ ๋ฐฉ์งํ์ต๋๋ค.
๐คNELLM ๋ฐ์ดํฐ์
v1: ChatGPT๋ก ์์ฒด ์์ฑํ ๋ฐ์ดํฐ์
๐คNELLM ๋ฐ์ดํฐ์
v2: v1 + ์ ๋ชฉ, ์ํ ์ค๋ช
, ๊ฐ๊ฒฉ ํฌ๋กค๋ง ํ ์ฑํ
๋ง ChatGPT๋ก ์์ฑํ ๋ฐ์ดํฐ์
๐คNELLM ๋ฐ์ดํฐ์
v3: v2์ ์ ์ ๋ก๊ทธ์์ ํน์ด ์ผ์ด์ค(์: ๋ฌด๋ฃ ๋๋ ํด์ฃผ์ธ์.)์ ๋์ํ๋ ๋ฐํ๊ฐ ์ถ๊ฐ๋ ๋ฐ์ดํฐ์
๐ค์ ์ ๋ฐ์ดํฐ์
: ์ฑ ๋ฐฐํฌ ํ ์ฌ์ฉ์๋ก๋ถํฐ ์ป์ด ์ ์ ํ ๋ฐ์ดํฐ์
{
"title":"{์ ๋ชฉ}", // str
"description":"{์ํ ์ ๋ณด}", // str
"price": "์ํ ๊ฐ๊ฒฉ", // int
"result":"ACCEPT ๋๋ DENY", // str
"events":[
{"role":"๊ตฌ๋งค์","message":"์๋
ํ์ธ์! ๋ฌผ๊ฑด ํ๋ ธ๋์?"},
{"role":"ํ๋งค์", "message":"์์ง ์ํ๋ ธ์ต๋๋ค~"},
//...
{"role":"๊ตฌ๋งค์","message":"##<{์ต์ข
์ ์ ๊ฐ๊ฒฉ}>##"},
{"role":"ํ๋งค์", "message":"##<{์๋ฝ/๊ฑฐ์ }>##"},
],
}
์ ์๋ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋๋์ด์ง๋ค. events
์ ๊ธธ์ด๊ฐ ๋ฐ์ดํฐ๋ง๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ json-like data๋ก ์ ์ํ์๋ค.
title
: str- ์ค๊ณ ๊ฑฐ๋ ํ๋งค๊ธ ์ ๋ชฉ
description
: str- ์ค๊ณ ๊ฑฐ๋ ํ๋งค๊ธ ๋ด์ฉ
price
: int- ํ๋งค์๊ฐ ์ฌ๋ฆฐ ๊ฐ๊ฒฉ
result
: str- ๊ฑฐ๋๊ฐ ์ฑ์ฌ๋์๋์ง ์ฌ๋ถ๋ฅผ ์๋ฏธํ๋ค.
"##<์๋ฝ>##"
๋๋"##<๊ฑฐ์ >##"
์ด๋ค.
- ๊ฑฐ๋๊ฐ ์ฑ์ฌ๋์๋์ง ์ฌ๋ถ๋ฅผ ์๋ฏธํ๋ค.
events
: List[Dict]role
๊ณผmessage
๋ฅผ key ๊ฐ์ผ๋ก ๊ฐ์ง๋ dictionary๋ค์ ์์๋ก ๊ฐ์ง๊ณ , ๋ํ ํด์ ๊ธธ์ด๋ ๋ฐ์ดํฐ๋ง๋ค ๋ค๋ฅด๋ค.
๊ธฐ์กด ์์ด ๋ฐ์ดํฐ์ ์ธ CraigslistBargain๋ฅผ ๋ฒ์ญํ์ฌ ์ฌ์ฉํ์ผ๋, ๋จ์ํ ๋ํํจํด, ๋ฒ์ญ์ฒด, ๋ฌธํ ์ฐจ์ด์ ๋ฐ๋ฅธ ๋ถ์ ์ ํ ๋ด์ฉ ๋ฑ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ ์ ChatGPT API๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ง์ ์์ฑํ๋ค.
- ๊ตญ๋ด ์ค๊ณ ๊ฑฐ๋ ํ๋ซํผ์์ ์ฌ์ฉ๋๋ ์ฉ์ด ๋ฐ์ (ex. ๋ค๊ณ , ์ฟจ๊ฑฐ๋ ๋ฑ)
- ๋ํ ํจํด ๋ค์ํ
- ๊ตฌ๋งค์์ ํ๋ฅด์๋ ๋ถ์ฌ
- ๊ทธ์ ๋ฐ๋ฅธ ํ๋งค์์ ๋ฐ์
- ๊ฐ๊ฒฉ ์ ์์ ๊ทผ๊ฑฐ๋ก ์ํ ์ค๋ช ํ์ฉ
- ๊ฑฐ๋๊ฐ ์ฑ์ฌ(ACCEPT)๋๊ธฐ๋ง ํ๋ ๋ฐ์ดํฐ ํธ์ค์ ๋ง๊ธฐ ์ํด 30% ํ๋ฅ ๋ก ๊ฑฐ์ (DENY)ํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋๋ก prompt ๊ตฌ์ฑ
- Frontend : HTML5
- Backend : FastAPI
- App server : GCP (Google Cloud Platform)
- Model Server : Upstage์์ ์ ๊ณต๋ฐ์ V100 ์๋ฒ
- DB : ์ฑํ ๋ฐ์ดํฐ๋ App Server์ SQLite(Relational DB)์ ์ ์ฅ๋๋ฉฐ, 24์๊ฐ๋ง๋ค ํ ๋ฒ์ฉ json ํํ์ data๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด MongoDB๋ก ์ฎ๊ฒจ์ง๋ค.
- Ubuntu 18.04.6 LTS
- NVIDIA Volta V100 VRAM 32GB
- Python>=3.9
- Poetry & Pyenv ๊ฐ์ํ๊ฒฝ ์ค์
poetry๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธ ํ, ์ค์น๋์ด์์ง ์๋ค๋ฉด ์ค์นํ๋ค.์ด repo๋ฅผ clone ํ๋ค.curl -sSL https://install.python-poetry.org | python3 -
git clone https://github.com/boostcampaitech5/level3_nlp_finalproject-nlp-03 cd level3_nlp_finalproject-nlp-03 poetry install
- Web server ํ๊ฒฝ ์ค์
> python chat_bot/scripts/train.py --help
usage: train.py [-h] [--train-dataset-names TRAIN_DATASET_NAMES [TRAIN_DATASET_NAMES ...]] [--model-name-or-checkpoint MODEL_NAME_OR_CHECKPOINT] [--dataset-type DATASET_TYPE] [--conv-template CONV_TEMPLATE] [--max-length MAX_LENGTH] [--epoch EPOCH]
[--max-steps MAX_STEPS] [--batch-size BATCH_SIZE] [--grad-accum GRAD_ACCUM] [--lr LR] [--output-dir OUTPUT_DIR] [--run-name RUN_NAME] [--peft-type PEFT_TYPE] [--lora-r LORA_R] [--lora-alpha LORA_ALPHA] [--lora-dropout LORA_DROPOUT]
[--n_virtual_token N_VIRTUAL_TOKEN]
optional arguments:
-h, --help show this help message and exit
--train-dataset-names TRAIN_DATASET_NAMES [TRAIN_DATASET_NAMES ...]
list of dataset names. use as --train-dataset-names ds1 ds2
--model-name-or-checkpoint MODEL_NAME_OR_CHECKPOINT
--dataset-type DATASET_TYPE
--conv-template CONV_TEMPLATE
--max-length MAX_LENGTH
--epoch EPOCH
--max-steps MAX_STEPS
--batch-size BATCH_SIZE
--grad-accum GRAD_ACCUM
--lr LR
--output-dir OUTPUT_DIR
--run-name RUN_NAME
--peft-type PEFT_TYPE
--lora-r LORA_R
--lora-alpha LORA_ALPHA
--lora-dropout LORA_DROPOUT
--n_virtual_token N_VIRTUAL_TOKEN
- ์คํ ์์
python chat_bot/scripts/train.py \
--train-dataset-names ggul-tiger/{dataset_name_1} ggul-tiger/{dataset_name_2}
> python chat_bot/scripts/eval.py --help
usage: eval.py [-h] --data-path DATA_PATH --model_checkpoint_path MODEL_CHECKPOINT_PATH [--conv-template-name CONV_TEMPLATE_NAME] [--num-rollouts NUM_ROLLOUTS]
optional arguments:
-h, --help show this help message and exit
--data-path DATA_PATH
--model_checkpoint_path MODEL_CHECKPOINT_PATH
--conv-template-name CONV_TEMPLATE_NAME
--num-rollouts NUM_ROLLOUTS
- ์คํ ์์
python chat_bot/scripts/eval.py \
--data-path ./data/sample_data.json \
--model_checkpoint_path ggul-tiger/{model_name}
cd app
uvicorn main:app --port 80
cd modelapi
uvicorn main:app --port 30007
- Verma, Siddharth, et al. โCHAI: A CHatbot AI for Task-Oriented Dialogue with Offline Reinforcement Learning.โ Proceedings of the 2022 Conference of the North American Chapter of the Association for Computational Linguistics (NAACL), 2022.
- Lab, NLP &. AI, and Human-Inspired AI research. KULLM: Korea University Large Language Model Project. GitHub, 2023, https://github.com/nlpai-lab/kullm.
- He, He, et al. โDecoupling Strategy and Generation in Negotiation Dialogues.โ CoRR, vol. abs/1808.09637, 2018, http://arxiv.org/abs/1808.09637.
- Ko, Hyunwoong, et al. A Technical Report for Polyglot-Ko: Open-Source Large-Scale Korean Language Models. 2023.
- Dettmers, Tim, et al. "Qlora: Efficient finetuning of quantized llms." arXiv preprint arXiv:2305.14314 (2023).
- @misc{zheng2023judging, title={Judging LLM-as-a-judge with MT-Bench and Chatbot Arena}, author={Lianmin Zheng and Wei-Lin Chiang and Ying Sheng and Siyuan Zhuang and Zhanghao Wu and Yonghao Zhuang and Zi Lin and Zhuohan Li and Dacheng Li and Eric. P Xing and Hao Zhang and Joseph E. Gonzalez and Ion Stoica}, year={2023}, eprint={2306.05685}, archivePrefix={arXiv}, primaryClass={cs.CL} }