- ์ฃผ์
- ์ฆ๊ถ์ฌ ์๋ฃ ๊ธฐ๋ฐ ์ฃผ์ LLM ์๋น์ค ๊ฐ๋ฐ
- ์๊ตฌ์ฌํญ
- PDF ๋ฌธ์๋ก๋ถํฐ ํ ์คํธ, ๊ทธ๋ํ ๋ฑ ์ ๋ณด์ ์ถ์ถ
- ๋ฐ์ดํฐ ๋ ํฌ์งํ ๋ฆฌ ๊ตฌ์ถ(GraphDB, VectorDB ๋ฑ)
- ์ฟผ๋ฆฌ์ ๋ํด ๊ฐ์ฅ ์ ํฉํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋ด๋ RAG ์์คํ ๊ตฌํ
- ํ๋กฌํํธ ๊ฐ๋ฐ
- ๋ต๋ณ ์์ฑ
- Q&A ๊ธฐ๋ฅ: ์ ๋ํ๊ฐ ๋ชฉ์
- REST API ๋ก ๊ตฌํ
- Input: query(์ง์)
- Output: context(์ฐธ์กฐํ ์คํธ), answer(๋ต๋ณ)
- ์ ๊ณต๋ ๋ฐ์ดํฐ
- ์ฆ๊ถ์ฌ ์๋ฃ ํ์ผ(PDF) 100๊ฐ
- ์ ๋ํ๊ฐ 50%
- ํ ์คํธ์ ์ง์์ ๋ํ ๋ต๋ณ ์ฑ๋ฅ โ ์งํ G-Eval
- ์ ์ฑํ๊ฐ 50%
- ์๋น์ค์ ์ฐฝ์์ฑ, ์ ์ฉ์ฑ, ๊ฐ๋ฐ ์์ฑ๋, ์์ค์ฝ๋ ํ์ง, ๋ฌธ์ํ ์์ค
๐ PDF OCR ์์ธ ์ค๋ช ๋ณด๊ธฐ
python pdf_parser.py -i "./pdf/input_pdf_folder"
python data_postprocessor.py
cd app/RAG
# retrieval ํ๊ฐ
python main.py mode=retrieve
# generator ํ๊ฐ
python main.py mode=generate
# vectordb ์์ฑ ๋ฐ ์
๋ฐ์ดํธ
python main.py mode=update_vectordb
- ๋ชฉ์
- Retriever์ Top-K Accuracy ํ๊ฐ ๋ฐ Retriever, Generator์ G-Eval ํ๊ฐ ์ํ
- ๋ฐฉ๋ฒ
- ์ง๋ฌธ ์์ฑ: GPT๋ฅผ ํ์ฉํ์ฌ PDF์์ ๊ฐ ์ข ๋ชฉ์ ์ฆ๊ถ์ฌ๋ง๋ค text ๊ธฐ๋ฐ ์ง๋ฌธ 10๊ฐ์ฉ ์์ฑ
- Query ์ ์ : ๊ฐ ์ข ๋ชฉ๋ณ๋ก 100๊ฐ์ Query๋ฅผ ์์ฑํ ํ, ์ค๋ณต์ ์ ๊ฑฐํ์ฌ ์ต์ข Query ์ ์
- ๋ต๋ณ ์ถ์ถ: ์ ์ ๋ Query๋ฅผ ๊ฐ ์ฆ๊ถ์ฌ ๋ฆฌํฌํธ์ ์ ์ฉํ์ฌ answers ๋์ถ
- Ground Truth ๊ฐํ: ์ข ๋ชฉ๋ณ๋ก ๋ค์ํ ์ฆ๊ถ์ฌ(5~6๊ฐ)๋ฅผ ์ ์ ํ์ฌ Ground Truth์ ํ์ง ํฅ์
- ํ&๊ทธ๋ฆผ ์ง๋ฌธ ์ถ๊ฐ: ํ์ ๊ทธ๋ฆผ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ง๋ฌธ์ 10๊ฐ ์ถ๊ฐ ์์ฑ
- ํ์ฉ
- Retrieval Top-K Accuracy์๋ ์ ์ฒด 1,843๊ฐ ํ์ฉ
- G-Eval ํ๊ฐ๋ 1,843๊ฐ ์ค 75๊ฐ ์ํ ์ฌ์ฉ
Top_1 | Top_5 | Top_10 | Top_20 | Top_30 | Top_50 | |
---|---|---|---|---|---|---|
TF-IDF | 9.80 | 22.55 | 37.52 | 59.89 | 72.64 | 90.94 |
BM25 | 12.20 | 28.84 | 42.33 | 63.59 | 79.85 | 96.12 |
klue/roberta-large | 2.40 | 11.46 | 20.89 | 38.26 | 59.15 | 86.88 |
klue/bert base | 5.73 | 17.38 | 30.50 | 49.35 | 66.73 | 87.62 |
multilingual-e5-large-instruct | 11.09 | 29.94 | 44.92 | 66.17 | 80.41 | 94.82 |
nlpai-lab/KoE5 | 15.16 | 38.26 | 53.42 | 71.72 | 81.52 | 93.53 |
BAAI/bge-m3 | 15.34 | 41.22 | 56.38 | 73.94 | 84.84 | 96.30 |
nlpai-lab/KURE-v1 | 16.64 | 42.41 | 58.41 | 76.53 | 85.03 | 95.38 |
nlpai-lab์ KoE5์ KURE-v1์ด ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์๋ค. ์ค์ ๋ฌธ์๋ฅผ ๊ฒํ ํ ๊ฒฐ๊ณผ ํน์ Query์ ๋ํ ๊ฒ์ ์ฑ๋ฅ์ด ๋ ๋ฐ์ด๋ KoE5๋ฅผ ์ต์ข ๋ชจ๋ธ๋ก ์ ํํ์๋ค.
-
Fine-tuning ๋ฐ์ดํฐ: virattt/financial-qa-10K๋ฅผ ๋ฒ์ญํ ๋ฐ์ดํฐ
-
Query Encoder์ Passage Encoder๋ฅผ ๋๋์ด Hard Negative ์์ด In-Batch Negatives ๋ฐฉ์์ผ๋ก Multiple Negatives Ranking Loss์ ์ฌ์ฉํ์ฌ ํ์ต
-
๊ฒฐ๊ณผ(Top-K Accuracy)
KoE5 Fine-Tuned Model Top-1 15.16 18.11 Top-5 38.26 43.07 Top-10 53.42 58.78 Top-20 71.72 75.60 Top-30 81.52 85.40 Top-50 93.53 95.93
- ChromaDB: Metadata๋ฅผ ์ ์ฅํ์ฌ Filtering ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ํ์ฌ๋ณ ๊ฒ์์ด ๊ฐ๋ฅํด ์ ๋ณด์ ์ ํ์ฑ์ ๋์ผ ์ ์๋ค. ๋ํ, ์๋ฒ ์คํ ์ค์๋ DB๋ฅผ ์ ๋ฐ์ดํธํ ์ ์์ด ์ ์ฐ์ฑ์ด ๋ฐ์ด๋ ์ด๋ฌํ ์ ๋๋ฌธ์ ์ ํํ๋ค.
- Cross Encoder๋ก ๋ฌธ์์ ์ง์์ ์ ์ฌ๋๋ฅผ ์ธก์ ํ์ฌ ๋ฌธ์๋ฅผ ์ฌ์ ๋ ฌ
- ์คํ
Top_1 | Top_5 | Top_10 | Top_20 | Top_30 | Top_50 | |
---|---|---|---|---|---|---|
nlpai-lab/KoE5 | 15.16 | 38.26 | 53.42 | 71.72 | 81.52 | 93.53 |
nlpai-lab/KoE5 + BAAI/bge-reranker-v2-m3 | 19.78 | 43.25 | 61.55 | 77.08 | 85.58 | 95.75 |
nlpai-lab/KoE5 + Dongjin-kr/ko-reranker | 20.15 | 45.47 | 61.37 | 78.00 | 87.25 | 96.49 |
- Reranker๋ฅผ ์ฌ์ฉํ ํ Accuracy๊ฐ ์ ๋ฐ์ ์ผ๋ก ์ฝ 5% ์ด์ ์ฆ๊ฐํ์๊ณ ๊ทธ ์ค ์ฑ๋ฅ์ด ๋ ์ข์ Dongjin-kr/ko-reranker๋ฅผ ์ฌ์ฉํ์๋ค.
- ํ๋กฌํํธ ์์ง๋์ด๋ง
- ์ฟผ๋ฆฌ ๋ฆฌ๋ผ์ดํ
- 2๊ฐ ์ด์์ ํ์ฌ ์ ๋ณด๊ฐ ํ์ํ๊ฑฐ๋ ์ง๋ฌธ์ด ๋ถ์ ์ ํ ๊ฒฝ์ฐ ๋ฆฌ๋ผ์ดํ ์ ํตํด ๊ฒ์ ์ฑ๋ฅ ํฅ์
- G-Eval(Retrieval, Generator)
- Top-K Accuracy, BLEU ๋ฑ์ ์ํฉ์ ๋ฐ๋ผ ์ ๋๋ก ๋ ํ๊ฐ๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ , ์ฌ๋์ด ์ผ์ผ์ด ๋ฐ์ดํฐ๋ฅผ ์ฑ์ ํ ์ ์์ด์ LLM-as-a-Judge ๋ฐฉ์์ผ๋ก G-Eval์ ์ ํํ์๋ค.
- ๋น ๋ฅธ ๊ตฌํ๊ณผ ์ํํ ํ๊ฐ๋ฅผ ์ํด DeepEval Open Source๋ฅผ ํ์ฉ
- Retrieval G-Eval ๊ฒฐ๊ณผ
Retrieval (top5) | ์ ์ฌ์ฑ | ํ์ ์ ๋ณด ํฌํจ ์ฌ๋ถ | ์ง๋ฌธ ์ถฉ์กฑ๋ | ๊ด๋ จ์ฑ | ๊ฐ๊ฒฐ์ฑ | total |
---|---|---|---|---|---|---|
BAAI/bge-m3 | 2.52 | 3 | 2.34 | 1.92 | 1 | 10.81 |
nlpai-lab/KoE5 | 2.62 | 3 | 2.36 | 1.98 | 0.99 | 10.98 |
fine-tuned/nlpai-lab/KoE5 | 2.68 | 2.87 | 2.41 | 1.8 | 1.3 | 11.08 |
- Generator G-Eval ๊ฒฐ๊ณผ
Generation | ๊ด๋ จ์ฑ | ์ฌ์ค์ ์ ํ์ฑ | ํ์ ์ ๋ณด ํฌํจ ์ฌ๋ถ | ๋ช ํ์ฑ๊ณผ ๊ฐ๊ฒฐ์ฑ | ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ | ๊ณผํ์ง์์ ์ธ๋ถ์ ๋ณด | ์ ์ ํ ์ถ์ฒ ํ์ | ํ์ ์ ์ ์ฑ | ์ถ๊ฐ์ ํตํฉ | total |
---|---|---|---|---|---|---|---|---|---|---|
Top-5 | 2.7 | 2.7 | 2.8 | 2.4 | 1.6 | 1.7 | 1.2 | 0.4 | 0.6 | 16.2 |
Top-7 | 3.1 | 3.0 | 3.0 | 2.9 | 1.6 | 2.0 | 1.3 | 0.4 | 0.7 | 18.3 |
Top-10 | 3.0 | 2.9 | 2.8 | 2.6 | 1.7 | 1.7 | 1.1 | 0.4 | 0.7 | 17.0 |
REST API ๊ฐ๋ฐ (ํ์ด์ฌ API, Query API)
cd app
uvicorn main:app --reload --host 0.0.0.0 --port 8000
- query
- documents
- chatting
cd FE
npm install
npm run dev
- AI ๋ชจ๋ธ ์ ํ(GPT-4o, GPT-4o-mini, Clova X)
- ์ฒจ๋ถํ PDF ๋ฌธ์๋ฅผ ๋ฒกํฐ DBํํ์ฌ ํจ์จ์ ์ธ ๊ฒ์ ์ง์
- ์ด์ context๋ฅผ ์ ์งํ ์ค์๊ฐ ๋ํ
- ์์ ฏ: ์ฝ์คํผ ์ง์, ์ค์๊ฐ ํ์จ, ์ต์ ๊ฒฝ์ ๋ด์ค, ์ข ๋ชฉ ๊ด๋ จ ์ ๋ณด, ์ข ๋ชฉ๋ณ ์ต์ ๋ด์ค
- OCR: DocLayout-Yolo, Clova OCR, Upstage Parser API
- VectorDB: ChromaDB
- Retriever: Langchain
- Generator: Langchain, LLM-based Answering Model (gpt-4o, Clova X)
- Evaluation: G-Eval, Top-K Accuracy
- API server: Fastapi
- Web Front-end: React.js, Tailwind CSS
- ํ์ ๋๊ตฌ : Github issue์ discussion์ผ๋ก task ํ ๋น ๋ฐ ํ ์ ๐ค
- Commit ๊ด๋ฆฌ : Github commit message template์ผ๋ก ์ผ๊ด์ฑ ์ ์ง, ํ์ ํจ์จ ์ฆ๋ ๐
- ํ๋ก์ ํธ ๊ด๋ฆฌ : Notion์ ์๋ฃ๋ ์ผ ๊ณต์ , Zoom meeting์ ํตํด ์งํ ์ํฉ ํ ์