Skip to content

ddsntc1/Chatbot_FutFut

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

66 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Chatbot_FutFut

Team

Members

๐Ÿ˜Ž๊ฐ•๋™์šฑย ย ย ย ย  ๐Ÿฆ„๊ฐ•๋ฏผ์ง€ย ย ย ย ย  ๐Ÿ˜บ์‹ ๋Œ€๊ทผ

๐Ÿš€ Use Tech

Ubuntu Slack HuggingFace Colab Colab


About FutFut

  • Domain : ํ’‹์‚ด ํ”Œ๋žซํผ์— ์นœ์ ˆํ•œ ์„ค๋ช…์„ ํ•ด์ฃผ๋Š” ์ฑ—๋ด‡์„ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Concept : 'ํ•ด์š”'์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์นœ์ ˆํ•˜๊ฒŒ ๋‹ตํ•˜๋Š” ์ฑ—๋ด‡. ๋ง๋์— '์–ธ์ œ๋“ ์ง€ ๋ฌผ์–ด๋ณด์„ธ์š”! ํ’‹ํ’‹~!'์„ ๋ถ™์—ฌ ํ’‹ํ’‹์ด ์ปจ์…‰์„ ์œ ์ง€
  • Model : Mistral ๊ธฐ๋ฐ˜์˜ Zephyr ๋ชจ๋ธ๊ณผ Meta์˜ Llama3 ๋ชจ๋ธ์„ ๋Œ€์ƒ์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Dataset : ๋งํˆฌ ํ•™์Šต์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ์…‹์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. Dongwookss/q_a_korean_futsal, mintaeng/llm_futsaldata_yo
  • How-to? ๋งํˆฌ ํ•™์Šต์„ ์œ„ํ•œ Fine-tuning๊ณผ ์ •๋ณด ์ œ๊ณต์„ ์œ„ํ•œ RAG๋ฅผ ์ ์šฉ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์€ FastAPI๋ฅผ ์ด์šฉํ•˜์—ฌ Back-end์™€ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

How to use?

FastAPI ์‹คํ–‰
uvicorn main:app --reload -p <ํฌํŠธ๋ฒˆํ˜ธ์ง€์ •>

About Fine-tuning

  • Fine-tuned Model : Llama3-8b, Zephyr-7b ๊ฐ๊ฐ ํŠœ๋‹์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • GPU : Colab L4

  • Method : LoRA(Low Rank Adaptation) & QLoRA(Quantized LoRA)

  • Trainer : SFTrainer, DPOTrainer

  • Dataset : Dongwookss/q_a_korean_futsal, mintaeng/llm_futsaldata_yo

  • Finetune :

TrainOutput(global_step=1761, training_loss=1.1261051157399513, metrics={'train_runtime': 26645.6613, 'train_samples_per_second': 2.644, 'train_steps_per_second': 0.066, 'total_flos': 7.784199669311078e+17, 'train_loss': 1.1261051157399513, 'epoch': 3.0})
  • ์ถ”ํ›„ ๋ฐฉํ–ฅ : SFT(Supervised Fine-Tune) Trainer ์„ ์ด์šฉํ•˜์—ฌ ํŠœ๋‹์„ ์ง„ํ–‰ํ•˜์˜€๊ณ  ๋งํˆฌ์— ์ง‘์ค‘ํ•œ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ์ธํ•ด ๋ชจ๋ธ ์„ฑ๋Šฅ์— ์•„์‰ฌ์šด ์ ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ Q-A Task์— ๋งž๋Š” Fine-Tuning์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋ฉฐ ๊ฐ•ํ™”ํ•™์Šต์„ ํ†ตํ•ด ๋ชจ๋ธ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

Fine-tuned Result(HuggingFace๐Ÿค—):

  • Dongwooks -> ์ตœ์ข… ๋ชจ๋ธ๋ช… : big_fut_final & small_fut_final
Using HuggingFace Model with out RAG
# Using HuggingFace Model with out RAG 
# !pip install transformers==4.40.0 accelerate

import os
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import TextStreamer

model_id = 'Dongwookss/์›ํ•˜๋Š”๋ชจ๋ธ'
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

PROMPT = '''
Below is an instruction that describes a task. Write a response that appropriately completes the request.
'''
instruction = "question"

messages = [
    {"role": "system", "content": f"{PROMPT}"},
    {"role": "user", "content": f"{instruction}"}
    ]
input_ids = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    return_tensors="pt"
).to(model.device)

terminators = [
    tokenizer.eos_token_id,
    tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

text_streamer = TextStreamer(tokenizer)
output = model.generate(
    input_ids,
    max_new_tokens=4096,
    eos_token_id=terminators,
    do_sample=True,
    streamer = text_streamer,
    temperature=0.6,
    top_p=0.9,
    repetition_penalty = 1.1
)

About RAG

  • ํ’‹์‚ด ๊ทœ์ •, ๊ตฌ์žฅ ์ •๋ณด, ํ’‹์‚ด ์นผ๋Ÿผ ๋“ฑ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  RAG๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ์ •๋ณด์ œ๊ณต์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • Retrieval : Kiwipiepy+BM25 ์™€ Embedding_Model + VectorDB ์กฐํ•ฉ์„ ํ†ตํ•ด Semantic search๋ฅผ ๋ชฉํ‘œ๋กœ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Directory Structure

.
โ”œโ”€โ”€ backupfiles
โ”‚   โ””โ”€โ”€ # ์˜ˆ๋น„ ํŒŒ์ผ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
โ”œโ”€โ”€ files
โ”‚   โ””โ”€โ”€ # RAG๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•  ํŒŒ์ผ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

โ”œโ”€โ”€ for_nochain
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ””โ”€โ”€ mt_chat.py #  Langchain ์„ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ๋‹ต๋ณ€ ์†๋„๊ฐ€ ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ”œโ”€โ”€ load_model_for_newchain.py
โ”œโ”€โ”€ load_model_type_a.py # AutoModelForCausalLM์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
โ”œโ”€โ”€ load_model_type_b.py # Unsloth ํŒจํ‚ค์ง€์˜ FastLanguageModel์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. ์ด๋•Œ adapter.config๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ์— ๋ชจ๋ธ์„ ๋ณต์‚ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โ”œโ”€โ”€ main.py # Fast API ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ์„œ๋น™ํ•ฉ๋‹ˆ๋‹ค. request๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ๊ณผ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ”œโ”€โ”€ main_new_chain.py # ์ƒˆ ์ฒด์ธ์„ ์ด์šฉํ•˜์—ฌ FastAPI๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

โ”œโ”€โ”€ pack
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ load_push.py # files์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Load,Chunk,Embed, Vector DB์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
โ”‚   โ”œโ”€โ”€ make_answer.py # ๋‹ต๋ณ€์ƒ์„ฑ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
โ”‚   โ”œโ”€โ”€ make_chain_gguf.py # gguf ํŒŒ์ผ์„ ๋Œ€์ƒ์œผ๋กœ ollama ๋ฅผ ์ ์šฉ์‹œํ‚ต๋‹ˆ๋‹ค.
โ”‚   โ”œโ”€โ”€ make_chain_model.py # Safetensors๋กœ ์ด๋ฃจ์–ด์ง„ ๋ชจ๋ธ๋กœ Chain์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ GPU์ž์›์ด ๋งŽ์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค.
โ”‚   โ”œโ”€โ”€ retrieve_docs.py # Retrieval์„ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
โ”‚   โ””โ”€โ”€ retriever.py # Retrieval์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

โ”œโ”€โ”€ sft_tuning # ๋ชจ๋ธ ํŒŒ์ธํŠœ๋‹ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ค‘์š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ๊ฐ’์ด ๋น„์–ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ”‚   โ””โ”€โ”€ Unsloth_sft.ipynb
โ””โ”€โ”€ test.ipynb

๐Ÿค— HuggingFace account ๐Ÿค—

About

Futsal community chatbot by LLM Fine-tuning & RAG

Topics

Resources

License

Stars

2 stars

Watchers

1 watching

Forks

Contributors