RAG embedding Vector_DB

RAG(Retrieval Augmented Generation)

RAG(๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ)

  • ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์ด ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•  ๋•Œ, ๋‹จ์ˆœํžˆ ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค์—์„œ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ๋‹ต๋ณ€์˜ ์ •ํ™•์„ฑ์„ ๋†’์ด๋Š” ๊ธฐ์ˆ .
  • ์งง๊ฒŒ ๋งํ•ด, RAG๋Š” ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฒ€์ƒ‰ํ•˜์—ฌ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋” ๋‚˜์€ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

RAG์˜ ์ž‘๋™ ๋ฐฉ์‹

๊ฒ€์ƒ‰(Retrieval)

  • ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ๋”ฐ๋ผ ๊ด€๋ จ์„ฑ์ด ๋†’์€ ์ •๋ณด๋ฅผ ์™ธ๋ถ€ ์ง€์‹ ๋ฒ ์ด์Šค(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋ฌธ์„œ ์ง‘ํ•ฉ)์—์„œ ๊ฒ€์ƒ‰

์ฆ๊ฐ•(Augmentation)

  • ๊ฒ€์ƒ‰๋œ ์ •๋ณด๋ฅผ LLM์˜ ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ์— ํ•จ๊ป˜ ๋„ฃ์–ด ์ œ๊ณตํ•œ๋‹ค.

์ƒ์„ฑ(Generation)

  • LLM์€ ๊ธฐ์กด์˜ ํ•™์Šต๋œ ์ง€์‹๊ณผ ๊ฒ€์ƒ‰๋œ ์™ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ, ๋” ์ •ํ™•ํ•˜๊ณ  ๊ตฌ์ฒด์ ์ธ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•œ๋‹ค.

|desc |600
์ผ๋ฐ˜์ ์ธ LLM ์ž‘๋™ ๋ฐฉ์‹



|desc |600
RAG ์ž‘๋™ ๋ฐฉ์‹



RAG์˜ ์ฃผ์š” ์žฅ์ 

๊ฒฝ์ œ์ 

  • LLM์„ ํ•™์Šต(๋˜๋Š” ํŒŒ์ธํŠœ๋‹)ํ•˜๊ฑฐ๋‚˜, ํ•™์Šต์‹œํ‚ฌ ์–‘์งˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์ด ๋“ค์ง€๋งŒ, RAG๋Š” ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†์–ด ๊ฒฝ์ œ์ ์ด๋‹ค.

์ •ํ™•์„ฑ ํ–ฅ์ƒ

  • LLM์˜ ํ• ๋ฃจ์‹œ๋„ค์ด์…˜(ํ™˜๊ฐ ํ˜„์ƒ)์„ ์ค„์ด๊ณ , ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ์ถœ์ฒ˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ต๋ณ€ํ•˜์—ฌ ์ •ํ™•์„ฑ์„ ๋†’์ธ๋‹ค.

์ตœ์‹  ์ •๋ณด ํ™œ์šฉ

  • ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์ตœ์‹  ์ •๋ณด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด, ํ•™์Šต ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ž˜๋˜์—ˆ์„ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

ํ™•์žฅ์„ฑ ๋ฐ ์œ ์—ฐ์„ฑ

  • ์ƒˆ๋กœ์šด ์ •๋ณด๊ฐ€ ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค LLM ์ „์ฒด๋ฅผ ์žฌํ•™์Šต์‹œํ‚ฌ ํ•„์š” ์—†์ด, ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋˜๋ฏ€๋กœ ํšจ์œจ์ ์ด๋‹ค.

๋งž์ถคํ˜• ๋‹ต๋ณ€ ์ œ๊ณต

  • ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋‚˜ ๋…์ ์ ์ธ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งž์ถคํ™”๋œ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

RAG์˜ ๊ธฐ๋ณธ์ ์ธ ํŒŒ์ดํ”„ ๋ผ์ธ


|desc |700
RAG ํŒŒ์ดํ”„๋ผ์ธ



1๏ธโƒฃ Embedding


 |400


  • ์ž„๋ฒ ๋”ฉ(Embedding)์€ ํ…์ŠคํŠธ(๋ฌธ์žฅ)๋ฅผ ์ˆ˜์น˜ ๋ฒกํ„ฐ(Vector) ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
  • ์ž„๋ฒ ๋”ฉ์˜ ๋ชฉ์ ์€ ๋ฌธ์žฅ๊ณผ ๋ฌธ์žฅ ์‚ฌ์ด์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•จ์ด๋ฉฐ, ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์€ ์˜๋ฏธ๊ฐ€ ๋น„์Šทํ•œ ๋ฌธ์žฅ๋“ค์ด ์„œ๋กœ ๊ฐ€๊น๊ฒŒ ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•™์Šต๋˜์–ด ์žˆ๋‹ค. โ†’ ==* ๋ฌธ์žฅ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง๋‹ค = ์œ ์‚ฌํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ๋ฌธ์žฅ์ด๋‹ค. *==
  • ์ž„๋ฒ ๋”ฉ์„ ํ†ตํ•œ ๊ฑฐ๋ฆฌ ๊ฐœ๋…์„ ํ™œ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž์˜ Query์™€ ๊ด€๋ จ๋œ ๋ฌธ์žฅ๋“ค์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

2๏ธโƒฃ Vector DB


 |250


  • Vector DB๋Š” ๊ฒ€์ƒ‰๋  ๋ฌธ์„œ๋“ค์ด vector ํ˜•์‹์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ €์žฅ์†Œ
  • ์ด๋•Œ ๋ฌธ์„œ๋“ค์„ ํ†ต์งธ๋กœ ์ž„๋ฒ ๋”ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ vector๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ•ด๋‹น ๋ฌธ์„œ๋“ค์„ ๋”์šฑ ๋” ์ž‘์€ ๋‹จ์œ„์ธ **์ฒญํฌ(Chunk)**๋กœ ์ชผ๊ฐœ์„œ ์ž„๋ฒ ๋”ฉ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์ฒญํฌ๋Š” RAG์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜๋กœ, ๋ชจ๋ธ์ด ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ์ด์œ  ์ค‘ ์ƒ๋‹น์ˆ˜๋Š” ์ „์ฒ˜๋ฆฌ์— ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒญํฌ๋ฅผ ์–ด๋–ค ํฌ๊ธฐ๋กœ ์„ค์ •ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์ผ์€ ๋‹จ์ˆœํžˆ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋„˜์–ด์„œ, ๋‹ต๋ณ€์˜ ํ’ˆ์งˆ ์ž์ฒด๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ฒญํฌ๋Š” 1000์ž, 500์ž ๋‹จ์œ„๋กœ ์ž๋ฅด์ง€๋งŒ ์˜๋ฏธ ๋‹จ์œ„๋กœ ์ž๋ฅด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค. ์ฒญํฌ์˜ ํฌ๊ธฐ๋ฅผ ์ •ํ•˜๋Š” ์ข‹์€ ๊ธฐ์ค€์œผ๋กœ๋Š”:
    1. ํ•˜๋‚˜์˜ ๋ฌธ๋‹จ์€ ํ•˜๋‚˜์˜ ์ฃผ์ œ๋ฅผ ๋‹ค๋ฃฐ ๊ฒƒ.
    2. ์งˆ๋ฌธ-๋‹ต๋ณ€์ฒ˜๋Ÿผ ์ง์ด ์žˆ๋Š” ๊ตฌ์กฐ๋Š” ํ•จ๊ป˜ ์œ ์ง€ํ•  ๊ฒƒ(ex. Q&A ๋ฌธ์„œ)
    3. ๋ฌธ์žฅ ์ค‘๊ฐ„์ด ์•„๋‹ˆ๋ผ, ์˜๋ฏธ๊ฐ€ ์ž์—ฐ์Šค๋ ˆ ๋๋‚˜๋Š” ์ง€์ ์—์„œ ์ž๋ฅผ ๊ฒƒ
    4. ์ ์ ˆํ•œ Overlap1(10~20%)์„ ์ค˜์„œ ๋ฌธ๋งฅ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด์–ด์ง€๊ฒŒ ํ•  ๊ฒƒ.

3๏ธโƒฃ Retrieve


 |500


  • ์ž„๋ฒ ๋”ฉ์„ ํ™œ์šฉํ•œ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•
  • โ‘  ์งˆ๋ฌธ์„ Embeddingํ•œ ๊ฐ’๊ณผ โ‘ก ์ฒญํฌ๋ฅผ ์ž„๋ฒ ๋”ฉํ•œ ๊ฐ’์˜ ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์ฒญํฌ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ๋ฒกํ„ฐ๊ฐ„ ๊ฑฐ๋ฆฌ ์ธก์ •ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ณ„์‚ฐ์‹์„ ์ •๋ฆฌํ•œ ๋ธ”๋กœ๊ทธ
  • Vector DB์— ์žˆ๋Š” ์ˆ˜๋งŽ์€ ๋ฒกํ„ฐ๋“ค์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ ์œ ์‚ฌ๋„๋ฅผ ๋‹ค ์ธก์ •ํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„์ด ์—„์ฒญ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ANN(Approximate Nearest Neighbor) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•œ๋‹ค

๋ฒกํ„ฐ ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜์˜ RAG์— ๋Œ€ํ•˜์—ฌ ๋น„ํŒ์ ์ธ ์‹œ๊ฐ์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ธ€๋„ ๋งŽ๋‹ค. ์‹œ๊ฐ„ ๋‚  ๋•Œ ์ฝ์–ด๋ณด์ž. ์ƒ๋‹นํžˆ ๊ณต๊ฐ์ด ๋งŽ์ด ๋œ๋‹ค. Medium | The Insanity of Relying on Vector Embeddings: Why RAG Fails ์œ„์˜ ๊ธฐ์‚ฌ๋ฅผ ํ•œ๊ตญ์–ด๋กœ ์ •๋ฆฌํ•œ ๋ธ”๋กœ๊ทธ

Footnotes

  1. ์ฒญํฌ ๊ฐ„ ๊ฒน์นจ(Chunk Overlap) ๋ฒ”์œ„๋ฅผ ๋งํ•œ๋‹ค. ๋ฌธ์„œ๋ฅผ ์ฒญํฌ๋กœ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์—์„œ ๋ฌธ๋งฅ์ด ์†์‹ค๋˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์œผ๋กœ, ์ธ์ ‘ํ•œ ์ฒญํฌ ์‚ฌ์ด์— ์ผ๋ถ€ ๋‚ด์šฉ์„ ๊ฒน์น˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ฌธ๋งฅ์„ ๋ณด์กดํ•œ๋‹ค. โ†ฉ