Skip to content

๐Ÿšง ๊ฑด์„ค ๊ณต์‚ฌ ์‚ฌ๊ณ  ์ •๋ณด ๊ธฐ๋ฐ˜ RAG-LLM ๊ฒฝ์ง„๋Œ€ํšŒ ํ”„๋กœ์ ํŠธ

Notifications You must be signed in to change notification settings

j8n17/Dacon_HanSolDeco

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

17 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿšง ๊ฑด์„ค ๊ณต์‚ฌ ์‚ฌ๊ณ  ์ •๋ณด ๊ธฐ๋ฐ˜ RAG-LLM ๊ฒฝ์ง„๋Œ€ํšŒ ํ”„๋กœ์ ํŠธ

Python Version Environment LLM Engine Vector Search Langchain

๊ฑด์„ค ํ˜„์žฅ ์‚ฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ RAG (Retrieval-Augmented Generation) ๋ฐ LLM(Ollama) ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ๊ณ  ์˜ˆ๋ฐฉ/์กฐ์น˜ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋Š” Jupyter Notebook์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋ฅผ ํ†ตํ•ด ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค.


๋ชฉ์ฐจ

  1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
  2. ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ
  3. ๋ชจ๋ธ ์„ ํƒ
  4. ์ตœ์ข… ํŒŒ์ดํ”„๋ผ์ธ (Notebooks)
  5. ์ฃผ์š” ์‹คํ—˜ ๋ฐ ๊ฒฐ๊ณผ
  6. ํ•ต์‹ฌ ๊ตํ›ˆ ๋ฐ ๊ฐœ์„  ๋ฐฉํ–ฅ
  7. ํŒŒ์ผ ๊ตฌ์กฐ
  8. ์‚ฌ์šฉ๋œ ์ฃผ์š” ๊ธฐ์ˆ 

1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” "๊ฑด์„ค ๊ณต์‚ฌ ์‚ฌ๊ณ  ์ •๋ณด ๊ธฐ๋ฐ˜ RAG-LLM ๊ฒฝ์ง„๋Œ€ํšŒ"์˜ ์ผํ™˜์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ์ฃผ์–ด์ง„ ๊ฑด์„ค ์‚ฌ๊ณ  ์ •๋ณด(ํ…์ŠคํŠธ)๋ฅผ ์ž…๋ ฅ๋ฐ›์•„, ๊ด€๋ จ๋œ ๊ณผ๊ฑฐ ์‚ฌ๋ก€ ๋ฐ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰(Retrieval)ํ•˜๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ LLM์ด ์ตœ์ ์˜ ์‚ฌ๊ณ  ๋ฐฉ์ง€ ๋˜๋Š” ์กฐ์น˜ ๊ณ„ํš(์ •๋‹ต ๋ฌธ์žฅ)์„ ์ƒ์„ฑ(Generation)ํ•˜๋Š” RAG ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ์ข… ํ‰๊ฐ€๋Š” ์ƒ์„ฑ๋œ ๊ณ„ํš๊ณผ ์‹ค์ œ ์ •๋‹ต ๊ณ„ํš ๊ฐ„์˜ ์œ ์‚ฌ๋„๋ฅผ ์œ ์‚ฌ๋„ ์ ์ˆ˜ (์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„ * 0.7 + ์ž์นด๋“œ ์œ ์‚ฌ๋„ * 0.3) ๋กœ ์ธก์ •ํ•˜์—ฌ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

  • ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„ (Cosine Similarity): ๋‘ ํ…์ŠคํŠธ๋ฅผ ๋ฒกํ„ฐ ๊ณต๊ฐ„์— ํ‘œํ˜„ํ–ˆ์„ ๋•Œ, ๋‘ ๋ฒกํ„ฐ ๊ฐ„์˜ ๊ฐ๋„์˜ ์ฝ”์‚ฌ์ธ ๊ฐ’์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉํ–ฅ์„ฑ์— ์ดˆ์ ์„ ๋งž์ถฐ ๋ฌธ๋งฅ์ , ์˜๋ฏธ์  ์œ ์‚ฌ์„ฑ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ ๊ฐ„ ์œ ์‚ฌ๋„)
  • ์ž์นด๋“œ ์œ ์‚ฌ๋„ (Jaccard Similarity): ๋‘ ํ…์ŠคํŠธ์— ์‚ฌ์šฉ๋œ ๋‹จ์–ด(๋˜๋Š” ํ† ํฐ) ์ง‘ํ•ฉ ๊ฐ„์˜ ์ค‘๋ณต ์ •๋„๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์ง‘ํ•ฉ์˜ ๊ต์ง‘ํ•ฉ ํฌ๊ธฐ๋ฅผ ํ•ฉ์ง‘ํ•ฉ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์œผ๋กœ, ๊ณต์œ ํ•˜๋Š” ๋‹จ์–ด์˜ ๋น„์œจ์„ ํ†ตํ•ด ์œ ์‚ฌ์„ฑ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

2. ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ

  • ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ: ๊ฐ ์‚ฌ๊ณ  ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์ƒ์„ธ ์ •๋ณด์™€ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์žฌ๋ฐœ ๋ฐฉ์ง€ ๋Œ€์ฑ…/ํ–ฅํ›„ ์กฐ์น˜ ๊ณ„ํš(์ •๋‹ต ๋ฌธ์žฅ) ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์‚ฌ๊ณ  ์„ค๋ช…๋ฌธ: ์‚ฌ๊ณ  ์ •๋ณด ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค:

      • ์ž‘์—…ํ”„๋กœ์„ธ์Šค: ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•œ ์ž‘์—… ๊ณผ์ •
      • ์‚ฌ๊ณ ๊ฐ์ฒด(์ค‘๋ถ„๋ฅ˜): ์‚ฌ๊ณ ์™€ ๊ด€๋ จ๋œ ์‹œ์„ค๋ฌผ ๋˜๋Š” ์žฅ๋น„
      • ์ธ์ ์‚ฌ๊ณ : ๋ฐœ์ƒํ•œ ์ธ์  ์‚ฌ๊ณ  ์œ ํ˜• (๋–จ์–ด์ง, ๋„˜์–ด์ง ๋“ฑ)
      • ๋ฌผ์ ์‚ฌ๊ณ : ๋ฐœ์ƒํ•œ ๋ฌผ์  ์‚ฌ๊ณ  ์œ ํ˜•
      • ์‚ฌ๊ณ ์›์ธ: ์‚ฌ๊ณ ์˜ ์ง์ ‘์ ์ธ ์›์ธ
    • ์ •๋‹ต ๋ฌธ์žฅ: ์žฌ๋ฐœ๋ฐฉ์ง€๋Œ€์ฑ… ๋ฐ ํ–ฅํ›„์กฐ์น˜๊ณ„ํš ์ปฌ๋Ÿผ์— ๊ธฐ๋ก๋œ ์˜ˆ๋ฐฉ/์กฐ์น˜ ๊ณ„ํš์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” RAG ์‹œ์Šคํ…œ์ด ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ชฉํ‘œ ๋ฌธ์žฅ์ด๋ฉฐ, ์ตœ์ข… ํ‰๊ฐ€์—์„œ ์ƒ์„ฑ๋œ ๋ฌธ์žฅ๊ณผ์˜ ์œ ์‚ฌ๋„๋ฅผ ์ธก์ •ํ•˜๋Š” ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ: ์‚ฌ๊ณ  ์ •๋ณด๋งŒ ์ œ๊ณต๋˜๋ฉฐ, ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋œ ์‚ฌ๊ณ  ์„ค๋ช…๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ˆ๋ฐฉ/์กฐ์น˜ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์‹ค์ œ ์ •๋‹ต๊ณผ ๋น„๊ตํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.


3. ๋ชจ๋ธ ์„ ์ •

Google Gemma 3 ๊ณ„์—ด ์ค‘ gemma3:4b (instruction-tuned) ๋ชจ๋ธ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • 128 K ํ† ํฐ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ
  • ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ž…๋ ฅ(ํ…์ŠคํŠธ + ์ด๋ฏธ์ง€) ๋ฐ 140+ ๊ฐœ ์–ธ์–ด ์ง€์›
  • ๋‹จ์ผ GPU์—์„œ๋„ ๊ตฌ๋™ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋Ÿ‰ ์„ค๊ณ„
  • ์„ ์ • ์ด์œ : ํ•œ๊ตญ์–ด ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ์ค‘์ ์ ์œผ๋กœ ์‹คํ—˜ํ•œ ๊ฒฐ๊ณผ, Gemma3:4B๊ฐ€ ํ•œ๊ตญ์–ด ๋ฌธ์žฅ ์ดํ•ด ๋ฐ ์ƒ์„ฑ์—์„œ ์šฐ์ˆ˜ํ•œ ํ’ˆ์งˆ์„ ๋ณด์—ฌ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

4. ์ตœ์ข… ํŒŒ์ดํ”„๋ผ์ธ (Notebooks)

๋ณธ ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ์€ ์•„๋ž˜์˜ Jupyter Notebook๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

4.1. ์ „์ฒ˜๋ฆฌ

  1. 10-local-formatting.ipynb: ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐ ๊ธฐ๋ณธ ํ˜•์‹ ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  2. 20-colab-spelling_correction.ipynb: ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์˜คํƒˆ์ž๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

    ํ”„๋กฌํ”„ํŠธ ์˜ˆ์‹œ
    ๋‹น์‹ ์€ ๋งž์ถค๋ฒ• ์ˆ˜์ • ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค. ์ œ๊ณต๋  ๋ฌธ์žฅ์˜ ๋งž์ถค๋ฒ•์„ ์ˆ˜์ •ํ•˜๋˜, ํ˜•์‹์„ ์œ ์ง€ํ•˜๊ณ  ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.
    ๋ฌธ์žฅ: "๋„˜์–ด์ง ์‚ฌ๊ณ  (์‚ฌ๊ณ ์ž๊ฐ€ ๋ณดํ–‰๋กœ๊ฐ€ ์•„๋‹Œ ์ฝ˜ํฌ๋ฆฌํŠธ Lํ˜• ์ธก๊ตฌ ์–‘์ƒ์„ ์œ„ํ•ด ๋ฎ์–ด๋‘” ์ฒœ๋ง‰์œ„๋ฅผ ๊ฑท๋‹ค๊ฐ€ ์ง‘์ˆ˜์ •(๋งจํ™€) ๊ฐœ๊ตฌ๋ถ€๋ฅผ ๋ฐ์•„ ์‹ค์กฑํ•˜์—ฌ ์ƒํ•ด ๋ฐœ์ƒ)"
    ์ˆ˜์ •: 
    

    LLM ๋‹ต๋ณ€

    ๋„˜์–ด์ง ์‚ฌ๊ณ (์‚ฌ๊ณ ์ž๋Š” ๋ณดํ–‰๋กœ๊ฐ€ ์•„๋‹Œ ์ฝ˜ํฌ๋ฆฌํŠธ Lํ˜• ์ธก๊ตฌ ์–‘์ƒ์„ ์œ„ํ•ด ๋ฎ์–ด๋‘” ์ฒœ๋ง‰ ์œ„๋ฅผ ๊ฑท๋‹ค๊ฐ€ ์ง‘์ˆ˜์ •(๋งจํ™€) ๊ฐœ๊ตฌ๋ถ€๋ฅผ ๋ฐŸ์•„ ์‹ค์กฑํ•˜์—ฌ ์ƒํ•ด ๋ฐœ์ƒ)
    
  3. 30-colab-structured_description.ipynb: LLM์„ ์ด์šฉํ•ด ์‚ฌ๊ณ  ์ •๋ณด ํ…์ŠคํŠธ์—์„œ '๋ฐœ์ƒ ๋ฐฐ๊ฒฝ', '์‚ฌ๊ณ  ์ข…๋ฅ˜', '์‚ฌ๊ณ  ์›์ธ' ๋“ฑ ๊ตฌ์กฐํ™”๋œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ›„์† RAG ๋‹จ๊ณ„์—์„œ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ๋†’์ด๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

    ํ”„๋กฌํ”„ํŠธ ์˜ˆ์‹œ
    ํ•œ๊ตญ ๊ฑด์„ค ๊ณต์‚ฌ ์•ˆ์ „ ์‚ฌ๊ณ  ๊ด€๋ จ ๋ฌธ์žฅ์„ ์–ธ์–ด ๋ชจ๋ธ์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒ˜๋ฆฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.
    ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ฐฐ๊ฒฝ๊ณผ ํ•ต์‹ฌ์ ์ธ ํ”ผํ•ด ๋‚ด์šฉ, ์‚ฌ๊ณ  ์›์ธ์„ ๋„์ถœํ•˜๊ณ , "๋ฐœ์ƒ ๋ฐฐ๊ฒฝ, ์‚ฌ๊ณ  ์ข…๋ฅ˜, ์‚ฌ๊ณ  ์›์ธ"์„ json ํ˜•์‹์œผ๋กœ ํ•ต์‹ฌ์ ์ธ ๋‚ด์šฉ๋งŒ ๊ฐ„๊ฒฐํžˆ ์ •๋ฆฌํ•ด์ฃผ์„ธ์š”.
    ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ž„์˜๋กœ ์ถ”๋ก ํ•˜๊ฑฐ๋‚˜ ์ƒ์„ฑํ•˜์ง€ ๋ง๊ณ , ์›๋ฌธ์— ์ฃผ์–ด์ง„ ์ •๋ณด๋งŒ์„ ๋ฐ˜์˜ํ•˜์„ธ์š”.
    ์ œ๊ณต๋  ๋ฌธ์žฅ์€ [๋ฌธ์žฅ: "์‚ฌ๊ณ  ์ข…๋ฅ˜ (์‚ฌ๊ณ  ์„ค๋ช… ๋˜๋Š” ์›์ธ)"] ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
    ๋ฌธ์žฅ: "์„ค์น˜์ž‘์—… ์ค‘ ๋„˜์–ด์ง ์‚ฌ๊ณ  (ํฌ๋ ˆ์ธ ์ด์šฉ ์ž‘์—… ์ค‘ ์ค„๊ฑธ์ด์— ์ž‘์—…์ž ์ƒ๋ช…์ค„์ด ๊ฑธ๋ ค ์ค‘์‹ฌ์„ ์žƒ๊ณ  ์ธ์ ‘ ์‹œ์Šคํ…œ ๋™๋ฐ”๋ฆฌ ์ž์žฌ์— ๋ถ€๋”ชํ˜€ ๋ถ€์ƒ)"
    

    LLM ๋‹ต๋ณ€

    ```json
    {   
        "๋ฐœ์ƒ ๋ฐฐ๊ฒฝ": "ํฌ๋ ˆ์ธ ์ด์šฉ ์ž‘์—… ์ค‘",
        "์‚ฌ๊ณ  ์ข…๋ฅ˜": "๋„˜์–ด์ง ์‚ฌ๊ณ  (์ค„๊ฑธ์ด)",
        "์‚ฌ๊ณ  ์›์ธ": "์ค„๊ฑธ์ด์— ์ž‘์—…์ž ์ƒ๋ช…์ค„์ด ๊ฑธ๋ ค ์ค‘์‹ฌ์„ ์žƒ๊ณ  ์ธ์ ‘ ์‹œ์Šคํ…œ ๋™๋ฐ”๋ฆฌ ์ž์žฌ์— ๋ถ€๋”ชํž˜"
    }
    ```
    
  4. 40-local-reason_extract.ipynb: LLM์˜ JSON ์ถœ๋ ฅ์—์„œ '๋ฐœ์ƒ ๋ฐฐ๊ฒฝ', '์‚ฌ๊ณ  ์ข…๋ฅ˜', ํŠนํžˆ RAG ๊ฒ€์ƒ‰์˜ ํ•ต์‹ฌ ํ‚ค๊ฐ€ ๋  '๋ฐœ์ƒ ์›์ธ' ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

4.2. RAG

  1. 50-local-rag_prompt.ipynb: '๋ฐœ์ƒ ์›์ธ'์„ ์ฟผ๋ฆฌ๋กœ, '์žฌ๋ฐœ๋ฐฉ์ง€๋Œ€์ฑ… ๋ฐ ํ–ฅํ›„์กฐ์น˜๊ณ„ํš'๋ฅผ ๋‹ต๋ณ€์œผ๋กœ ์‚ฌ์šฉํ•ด ์œ ์‚ฌ ์‚ฌ๊ณ  ์‚ฌ๋ก€์˜ QA๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” FAISS RAG ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๊ฒ€์ƒ‰(Retrieve)์—์„œ๋Š” ์ฟผ๋ฆฌ์™€ ์œ ์‚ฌํ•œ ์ƒ์œ„ 25๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์ดํ›„ ๊ฒ€์ƒ‰๋œ ๊ฒฐ๊ณผ๋“ค์˜ ๋‹ต๋ณ€๊ณผ ๋Œ€ํ‘œ ๋ฌธ์žฅ๊ณผ์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์žฌ์ •๋ ฌ(Reranking)ํ•˜์—ฌ ๊ฐ€์žฅ ๋†’์€ ์œ ์‚ฌ๋„, ์ค‘๊ฐ„, ๊ทธ๋ฆฌ๊ณ  ๋‚ฎ์€ ์œ ์‚ฌ๋„ ๋‹ต๋ณ€์„ ๊ฐ€์ง„ 3๊ฐœ์˜ QA๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด LLM์ด ๋‹ค์–‘ํ•œ ๋‹ต๋ณ€์„ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  2. 60-colab-llm_summary.ipynb: ๊ฒ€์ƒ‰๋œ 3๊ฐœ์˜ QA ์˜ˆ์‹œ์™€ base_answer์„ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ต๋ณ€์„ N๊ฐœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    ํ”„๋กฌํ”„ํŠธ ์˜ˆ์‹œ
    ์•„๋ž˜์˜ ๋ชจ๋ฒ” ๋‹ต์•ˆ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•ด answer์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๊ฐ๊ฐ์˜ answer์€ ๋ชจ๋‘ question๊ณผ base_answer์„ ๋ฐ˜์˜ํ•ด ๋งŒ๋“  ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ""user_question""๋งŒ json์œผ๋กœ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”.
    ```json
    {
    ""base_answer"": ""์ž‘์—…์ „ ์•ˆ์ „๊ต์œก ๊ฐ•ํ™” ๋ฐ ์ž‘์—…์žฅ ์œ„ํ—˜์š”์†Œ ์ ๊ฒ€์„ ํ†ตํ•œ ์žฌ๋ฐœ ๋ฐฉ์ง€์™€ ์•ˆ์ „๊ด€๋ฆฌ ๊ต์œก ์ฒ ์ €๋ฅผ ํ†ตํ•œ ํ–ฅํ›„ ์กฐ์น˜ ๊ณ„ํš.""
    ""examples"": [
        {
        ""question"": ""๋ฐœ์ƒ ๋ฐฐ๊ฒฝ: ์ ˆ๋‹จ ์ž‘์—… ์ค‘, ์‚ฌ๊ณ  ์ข…๋ฅ˜: ๊ธฐ๊ณ„ ์‚ฌ์šฉ ๋ถ€์ฃผ์˜๋กœ ์ธํ•œ ์ ˆ๋‹จ, ๋ฒ ์ž„ ์‚ฌ๊ณ , ์‚ฌ๊ณ  ์›์ธ: ๊ธฐ๊ณ„ ์‚ฌ์šฉ ๋ถ€์ฃผ์˜"",
        ""answer"": ""์žฅ๋น„ ์ ๊ฒ€ ๋ฐ ์ž‘์—…์ž ์•ˆ์ „๊ต์œก ์‹ค์‹œ.""
        },
        {
        ""question"": ""๋ฐœ์ƒ ๋ฐฐ๊ฒฝ: ์„ค์น˜์ž‘์—… ์ค‘, ์‚ฌ๊ณ  ์ข…๋ฅ˜: ๋ณด๊ฐ•ํ†  ์˜น๋ฒฝ ๊ด€๋ จ ์ ˆ๋‹จ, ๋ฒ ์ž„ ์‚ฌ๊ณ , ์‚ฌ๊ณ  ์›์ธ: ์ž์žฌ ์ ˆ๋‹จ ์ž‘์—… ์‹œ ์ ˆ๋‹จ๋ถ€๋กœ๋ถ€ํ„ฐ ์ž‘์—…์ž ์ด๊ฒฉ ๋ฏธํก, ์•ˆ์ „ ์žฅ๋น„(๋ฒ ์ž„ ๋ฐฉ์ง€ ์žฅ๊ฐ‘) ๋ฏธ์ฐฉ์šฉ"",
        ""answer"": ""์ ˆ๋‹จ์ž‘์—… ์‹œ ์•ˆ์ „์žฅ๊ฐ‘ ์ง€๊ธ‰๊ณผ ๊ทผ๋กœ์ž ์•ˆ์ „๊ต์œก ์‹ค์‹œ๋ฅผ ํ†ตํ•œ ์žฌ๋ฐœ ๋ฐฉ์ง€ ๋Œ€์ฑ… ๋งˆ๋ จ.""
        },
        {
        ""question"": ""๋ฐœ์ƒ ๋ฐฐ๊ฒฝ: ์ ˆ๋‹จ ์ž‘์—… ์ค‘, ์‚ฌ๊ณ  ์ข…๋ฅ˜: ๊ณต๊ตฌ๋ฅ˜ ๊ด€๋ จ ์ ˆ๋‹จ, ๋ฒ ์ž„ ์‚ฌ๊ณ , ์‚ฌ๊ณ  ์›์ธ: ๊ณต๊ตฌ ์‚ฌ์šฉ ์ค‘ ์ž‘์—…์ž ๋ถ€์ฃผ์˜"",
        ""answer"": ""๊ณต๊ตฌ์‚ฌ์šฉ ์ „ ์ฃผ์˜์‚ฌํ•ญ ๊ณ ์ง€ ๋ฐ ๊ณต๊ตฌ์‚ฌ์šฉ ์ˆ™๋ จ์ž ๋ฐฐ์น˜์™€ ํ•จ๊ป˜ ๊ฑด์„คํ˜„์žฅ ์žฌํ•ด์˜ˆ๋ฐฉ์„ ์œ„ํ•œ ์•ˆ์ „๊ด€๋ฆฌ ์ฒ ์ € ์ง€์‹œ.""
        }
    ]
    }
    ```
    ```json
    {
    ""user_question"": {
        ""question"": ""๋ฐœ์ƒ ๋ฐฐ๊ฒฝ: ์ ˆ๋‹จ ์ž‘์—… ์ค‘ ๊ฐ๋„ ์ ˆ๋‹จ๊ธฐ ์ด์šฉ, ์‚ฌ๊ณ  ์ข…๋ฅ˜: ๊ฐ๋„ ์ ˆ๋‹จ๊ธฐ ๊ด€๋ จ ๋ฒ ์ž„ ์‚ฌ๊ณ , ์‚ฌ๊ณ  ์›์ธ: ๋ฐฉํ˜ธ๋ฎ๊ฐœ ํ•˜๋ฝ ์ง€์—ฐ์œผ๋กœ ์ธํ•œ ์žฌํ•ด์ž ์†์ƒ"",
        ""answer"": """"
    }
    }
    ```
    

    LLM ๋‹ต๋ณ€

    ```json
    {
    ""user_question"": {
        ""question"": ""๋ฐœ์ƒ ๋ฐฐ๊ฒฝ: ์ ˆ๋‹จ ์ž‘์—… ์ค‘ ๊ฐ๋„ ์ ˆ๋‹จ๊ธฐ ์ด์šฉ, ์‚ฌ๊ณ  ์ข…๋ฅ˜: ๊ฐ๋„ ์ ˆ๋‹จ๊ธฐ ๊ด€๋ จ ๋ฒ ์ž„ ์‚ฌ๊ณ , ์‚ฌ๊ณ  ์›์ธ: ๋ฐฉํ˜ธ๋ฎ๊ฐœ ํ•˜๋ฝ ์ง€์—ฐ์œผ๋กœ ์ธํ•œ ์žฌํ•ด์ž ์†์ƒ"",
        ""answer"": ""๊ฐ๋„์ ˆ๋‹จ๊ธฐ ์•ˆ์ „ ์ ๊ฒ€ ๊ฐ•ํ™” ๋ฐ ์ž‘์—…์ž ๊ต์œก ์‹ค์‹œ, ๋ฐฉํ˜ธ๋ฎ๊ฐœ ์ž‘๋™ ์ƒํƒœ ํ™•์ธ ์ฒ ์ €, ์žฌํ•ด ๋ฐœ์ƒ ์‹œ ์‘๊ธ‰์ฒ˜์น˜ ๊ต์œก ์‹ค์‹œ๋ฅผ ํ†ตํ•œ ํ–ฅํ›„ ์กฐ์น˜ ๊ณ„ํš.""
        }
    }
    ```
    
  3. 70-local-answer_extract.ipynb: LLM์ด ์ƒ์„ฑํ•œ JSON ํ…์ŠคํŠธ์—์„œ 'answer'์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. LLM์ด ์ง€์ •๋œ ๋‹ต๋ณ€ ํ˜•์‹๋Œ€๋กœ ์‘๋‹ตํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ, ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์œผ๋กœ ๋‹ต๋ณ€ํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์žฌ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  4. 80-local-answers_rerank.ipynb: LLM์ด ์ƒ์„ฑํ•œ N๊ฐœ์˜ ๋‹ต๋ณ€๊ณผ 25๊ฐœ์˜ Retrieve๋œ ๋‹ต๋ณ€๊ณผ์˜ ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ, N๊ฐœ์˜ ๋‹ต๋ณ€ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ์œ ์‚ฌ๋„๋ฅผ ๊ฐ€์ง„ ๋‹ต๋ณ€์„ ์ตœ์ข… ๊ฒฐ๊ณผ๋กœ ์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. (BoN ๋ฐฉ์‹)


5. ์ฃผ์š” ์‹คํ—˜ ๋ฐ ๊ฒฐ๊ณผ

ํ‰๊ฐ€ ์ง€ํ‘œ: ์œ ์‚ฌ๋„ ์ ์ˆ˜ = ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„ * 0.7 + ์ž์นด๋“œ ์œ ์‚ฌ๋„ * 0.3

  • ์ดˆ๊ธฐ ์ ‘๊ทผ (0.5465): ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์˜ ์ •๋‹ต ๋ฌธ์žฅ ์ž„๋ฒ ๋”ฉ ํ›„, ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๋Œ€ํ‘œ ๋ฌธ์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹.
  • ๊ตฐ์ง‘ํ™” ์‹œ๋„: ์‚ฌ๊ณ  ์„ค๋ช…๋ฌธ ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜ ๊ตฐ์ง‘ํ™”๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„์—์„œ์˜ ๊ฒฝ๊ณ„ ๋ชจํ˜ธ์„ฑ ๋ฐ ๊ท ์ผํ•œ ๋ถ„ํฌ ๋“ฑ์˜ ๋ฌธ์ œ๋กœ ์œ ์˜๋ฏธํ•œ ๊ตฐ์ง‘ ํ˜•์„ฑ์— ์‹คํŒจ.
  • ๊ธฐ๋ณธ RAG (0.4385): '์‚ฌ๊ณ  ์›์ธ' ์ปฌ๋Ÿผ์„ ์ฟผ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์‚ฌ๊ณ  ์ •๋ณด๋ฅผ ์กฐํ•ฉํ•œ '์‚ฌ๊ณ  ์„ค๋ช…๋ฌธ'์œผ๋กœ Rerankingํ•˜์—ฌ ์ƒ์œ„ 5๊ฐœ ์œ ์‚ฌ ์‚ฌ๋ก€๋ฅผ LLM์— ์ œ๊ณต.
  • RAG + Base Answer (0.4701): ์ด์ „ ๋‹จ๊ณ„์˜ ์ƒ์œ„ 5๊ฐœ ์‚ฌ๋ก€๋ฅผ 3๊ฐœ๋กœ ์ค„์ด๊ณ , ์ดˆ๊ธฐ ์ ‘๊ทผ์—์„œ ์ฐพ์€ '๋Œ€ํ‘œ ๋ฌธ์žฅ'์„ LLM ํ”„๋กฌํ”„ํŠธ์— base_answer๋กœ ์ถ”๊ฐ€ ์ œ๊ณต. LLM ๋‹ต๋ณ€์˜ ๋ฐฉํ–ฅ์„ฑ์„ ์ œ์‹œํ•˜์—ฌ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • JSON์„ ์ด์šฉํ•œ ์ •๋ณด ์ถ”์ถœ ๋ฐ ์ •์ œ (0.4899): LLM์„ ํ†ตํ•ด JSON์œผ๋กœ ์ƒ์„ฑ๋œ ๊ตฌ์กฐํ™”๋œ ์ •๋ณด('๋ฐœ์ƒ ๋ฐฐ๊ฒฝ', '์‚ฌ๊ณ  ์ข…๋ฅ˜', '์‚ฌ๊ณ  ์›์ธ') ์ค‘ '์‚ฌ๊ณ  ์›์ธ'์„ ์ฟผ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๊ณ , '๊ตฌ์กฐํ™”๋œ ์„ค๋ช…๋ฌธ'์œผ๋กœ Rerankingํ•˜์—ฌ ์ƒ์œ„ 3๊ฐœ ์œ ์‚ฌ ์‚ฌ๋ก€๋ฅผ LLM์— ์ œ๊ณต. ๊ธฐ์กด '์‚ฌ๊ณ  ์›์ธ' ์ปฌ๋Ÿผ์—์„œ ์‚ฌ๊ณ  ์›์ธ์ด ์•„๋‹Œ ๋ถˆํ•„์š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•ด RAG Query์™€ Reranking ๋ฌธ์„œ์˜ ํ’ˆ์งˆ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ๋‹ต๋ณ€ ์ œ๊ณต RAG (0.4951): '๊ตฌ์กฐํ™”๋œ ์„ค๋ช…๋ฌธ'์„ ์ฟผ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๊ฒ€์ƒ‰๋œ ๊ฒฐ๊ณผ๋“ค์˜ ๋‹ต๋ณ€๊ณผ '๋Œ€ํ‘œ ๋ฌธ์žฅ' ๊ฐ„ ์œ ์‚ฌ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ Rerankingํ•˜์—ฌ ์ƒ์œ„ 1๊ฐœ, ์ค‘๊ฐ„ 1๊ฐœ, ํ•˜์œ„ 1๊ฐœ, ์ด 3๊ฐœ์˜ ๋‹ค์–‘ํ•œ ๋‹ต๋ณ€์„ LLM์— ์ œ๊ณต. LLM์ด ๋” ๋‹ค์–‘ํ•œ ๋‹ต๋ณ€์„ ์ฐธ๊ณ ํ•˜์—ฌ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๋„๋ก ์œ ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋ถ„์„ ๋ฐ ์‹คํ—˜, ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋“ฑ์— ๊ด€ํ•œ ๋‚ด์šฉ์€ DETAILS.md ์ฐธ๊ณ .


6. ํ•ต์‹ฌ ๊ตํ›ˆ ๋ฐ ๊ฐœ์„  ๋ฐฉํ–ฅ

  • ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง: ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ํ”„๋กฌํ”„ํŠธ, ํŠนํžˆ JSON ํ˜•์‹ ์ถœ๋ ฅ ์ง€์‹œ๋Š” sLLM ํ™œ์šฉ ๋ฐ ํ›„์† ์ฒ˜๋ฆฌ ํšจ์œจํ™”์— ์ค‘์š”. ํ•ต์‹ฌ ์ •๋ณด ์ถ”์ถœ์ด ๋ชจ๋ธ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ.
  • ์ž„๋ฒ ๋”ฉ/๊ตฐ์ง‘ํ™”: ๋ฐ์ดํ„ฐ ํŠน์„ฑ์— ๋งž๋Š” ์ž„๋ฒ ๋”ฉ ์ „๋žต๊ณผ ๊ตฐ์ง‘ํ™” ๊ธฐ๋ฒ• ์„ ํƒ์˜ ์ค‘์š”์„ฑ ํ™•์ธ. ๋‹จ์ˆœ ์ ์šฉ์˜ ํ•œ๊ณ„ ์ธ์ง€.
  • RAG ์ „๋žต: ๋‹จ์ˆœ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰์„ ๋„˜์–ด, ์ฟผ๋ฆฌ ํ’ˆ์งˆ ํ–ฅ์ƒ, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ํ’ˆ์งˆ๊ณผ ๋‹ค์–‘์„ฑ์„ ๋†’์ด๋Š” ์žฌ๋žญํ‚น(Reranking) ๋“ฑ ์ „/ํ›„์ฒ˜๋ฆฌ ์ „๋žต์ด ํšจ๊ณผ์ .
  • ์„ฑ๋Šฅ ์ตœ์ ํ™”: ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ I/O ๋ณ‘๋ชฉ ํ˜„์ƒ ๋“ฑ ์„ฑ๋Šฅ ์ €ํ•˜ ์š”์ธ์„ ํŒŒ์•…ํ•˜๊ณ  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋“ฑ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ์ ์šฉ ํ•„์š”.
  • ํ–ฅํ›„ ๋ฐฉํ–ฅ:
    • ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ์˜ ํŠน์„ฑ์— ๋งž๋Š” ๊ตฐ์ง‘ํ™” ๋ฐฉ๋ฒ• ํƒ์ƒ‰ ๋ฐ ์ ์šฉ.
    • ์ง€์†์ ์ธ RAG ๊ฒ€์ƒ‰/์žฌ๋žญํ‚น ์ „๋žต ๊ฐœ์„ .
    • CPU-GPU ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก ๋“ฑ ์ถ”๋ก  ๋ณ‘๋ชฉ ํ˜„์ƒ ์ถ”๊ฐ€ ๋ถ„์„ ๋ฐ ์ตœ์ ํ™”.
    • Jupyter Notebook์œผ๋กœ ๊ตฌ์„ฑ๋œ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ฉํ•˜์—ฌ, ๋‹จ์ผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๊ตฌ์ถ•.

7. ํŒŒ์ผ ๊ตฌ์กฐ

Dacon_HanSolDeco/
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ train.csv
โ”‚   โ””โ”€โ”€ test.csv
โ”‚
โ”œโ”€โ”€ preprocess/
โ”‚   โ”œโ”€โ”€ 10-local-formatting.ipynb
โ”‚   โ”œโ”€โ”€ 20-colab-spelling_correction.ipynb
โ”‚   โ”œโ”€โ”€ 30-colab-structured_description.ipynb
โ”‚   โ”œโ”€โ”€ 40-local-reason_extract.ipynb
โ”‚   โ””โ”€โ”€ utils.py
โ”‚
โ”œโ”€โ”€ rag/
โ”‚   โ”œโ”€โ”€ vector_stores/    # ๋ฒกํ„ฐ ์ €์žฅ์†Œ ๋””๋ ‰ํ† ๋ฆฌ
โ”‚   โ”‚   โ””โ”€โ”€ faiss_index/  # FAISS ์ธ๋ฑ์Šค
โ”‚   โ”œโ”€โ”€ 50-local-rag_prompt.ipynb
โ”‚   โ”œโ”€โ”€ 60-colab-llm_summary.ipynb
โ”‚   โ”œโ”€โ”€ 70-local-answer_extract.ipynb
โ”‚   โ”œโ”€โ”€ 80-local-answers_rerank.ipynb
โ”‚   โ”œโ”€โ”€ faiss_utils.py
โ”‚   โ””โ”€โ”€ utils.py
โ”‚
โ”œโ”€โ”€ settings.py         # Colab ํ™˜๊ฒฝ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ (Ollama, requirements ์„ค์น˜ ๋“ฑ)
โ”œโ”€โ”€ requirements.txt
โ””โ”€โ”€ README.md

8. ์‚ฌ์šฉ๋œ ์ฃผ์š” ๊ธฐ์ˆ 

  • ์–ธ์–ด: Python 3.8+
  • ํ™˜๊ฒฝ: Jupyter Notebook / Google Colab
  • LLM: Ollama (๋กœ์ปฌ ๊ตฌ๋™ LLM)
  • RAG ํ”„๋ ˆ์ž„์›Œํฌ: Langchain
  • ๋ฒกํ„ฐ ๊ฒ€์ƒ‰: FAISS (CPU)
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ: Pandas, Numpy
  • ๊ธฐํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: Scikit-learn (PCA ๋“ฑ), HuggingFace Transformers/Sentence-Transformers (์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ๋กœ๋”ฉ ๋“ฑ)

์ž์„ธํ•œ ๋‚ด์šฉ์€ settings.py, requirements.txt ์ฐธ๊ณ .

About

๐Ÿšง ๊ฑด์„ค ๊ณต์‚ฌ ์‚ฌ๊ณ  ์ •๋ณด ๊ธฐ๋ฐ˜ RAG-LLM ๊ฒฝ์ง„๋Œ€ํšŒ ํ”„๋กœ์ ํŠธ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published