Rag (chunking, fixed-window, Semantic)

sangwooยท5์ผ ์ „

๐Ÿ“š ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์ง€์‹: ์ฒญํ‚น(Chunking)์ด๋ž€?
RAG(๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ) ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ๋•Œ, ์ˆ˜๋ฐฑ ํŽ˜์ด์ง€์งœ๋ฆฌ ์ฑ…์„ AI์—๊ฒŒ ํ†ต์งธ๋กœ ์ฃผ๋ฉด ๊ธฐ์–ต์„ ์ž˜ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฑ…์„ ์ž˜๊ฒŒ ์ชผ๊ฐœ์„œ ์ €์žฅํ•˜๋Š”๋ฐ, ์ด ์ชผ๊ฐœ๋Š” ๊ณผ์ •์„ ์ฒญํ‚น(Chunking)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ฌธ์ œ์— ๋‚˜์™”์Šต๋‹ˆ๋‹ค.
1. ๊ณ ์ • ์ฐฝ ์ฒญํ‚น (Fixed-window / Fixed-size Chunking):
โ€ข ๋ฐฉ์‹: ์˜๋ฏธ์™€ ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ๊ธ€์ž ์ˆ˜๋‚˜ ํ† ํฐ ์ˆ˜(์˜ˆ: 300๊ธ€์ž์”ฉ)๋กœ ๋š๋š ์ž๋ฅด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
โ€ข ์žฅ์ : ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๊ณ  ์ปดํ“จํ„ฐ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๊ฑฐ์˜ ๋“ค์ง€ ์•Š์•„ ๋‹จ์ˆœํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
2. ์‹œ๋งจํ‹ฑ ์ฒญํ‚น (Semantic Chunking):
โ€ข ๋ฐฉ์‹: ๋ฌธ์žฅ๋“ค์„ ์ฝ์–ด ๋‚ด๋ ค๊ฐ€๋‹ค๊ฐ€ '์ด์•ผ๊ธฐ์˜ ์ฃผ์ œ๋‚˜ ๋งฅ๋ฝ์ด ๋ฐ”๋€Œ๋Š” ์ง€์ (์˜๋ฏธ์  ๊ฒฝ๊ณ„)'์„ ์ฐพ์•„๋‚ด์–ด ์œ ์—ฐํ•˜๊ฒŒ ์ž๋ฅด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
โ€ข ์žฅ์ : ๋ฌธ๋งฅ์ด ์ค‘๊ฐ„์— ๋Š๊ธฐ์ง€ ์•Š์•„ ์ด๋ก ์ ์œผ๋กœ๋Š” ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์ด ๋” ์ข‹์•„์งˆ ๊ฒƒ์ด๋ผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

RAG ํŒŒ์ดํ”„๋ผ์ธ 3๋‹จ๊ณ„ ๋ฒ•์น™
์‹œํ—˜์—์„œ ์‹œ์Šคํ…œ์˜ ํ๋ฆ„(Pipeline)์„ ๋ฌป๋Š” ์ˆœ์„œ ๋ฐฐ์น˜๋‚˜ ์—ญํ•  ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋‚˜์˜ต๋‹ˆ๋‹ค.
โ€ข 1๋‹จ๊ณ„ (์ง€์‹ ๋ฒ ์ด์Šค ๋ถ„ํ• ): ๋Œ€๊ทœ๋ชจ ๋ฌธ์„œ๋ฅผ ์ธ๋ฑ์Šค์— ์ €์žฅ/์ ์ˆ˜ ๋งค๊ธธ ์ˆ˜ ์žˆ๋„๋ก ์ž‘์€ ์กฐ๊ฐ(Chunk)์œผ๋กœ ์ชผ๊ฐญ๋‹ˆ๋‹ค.
โ€ข 2๋‹จ๊ณ„ (์ž„๋ฒ ๋”ฉ ๋ฐ ์ธ๋ฑ์‹ฑ): ๊ฐ ์ฒญํฌ๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜(Embedding)ํ•˜์—ฌ ์ €์žฅ(Index)ํ•ฉ๋‹ˆ๋‹ค.
โ€ข 3๋‹จ๊ณ„ (ํ”„๋กฌํ”„ํŠธ ์ฃผ์ž…): ์งˆ๋ฌธ๊ณผ ๊ฐ€์žฅ ๊ด€๋ จ ์žˆ๋Š” ์ฒญํฌ๋ฅผ ๋ฝ‘์•„ ํ”„๋กฌํ”„ํŠธ์— ์ฃผ์ž…(Context Grounding)ํ•˜์—ฌ ๋ชจ๋ธ์ด ๋‘๋‡Œ(๋ฉ”๋ชจ๋ฆฌ)๊ฐ€ ์•„๋‹Œ ์ฃผ์–ด์ง„ ๋ณธ๋ฌธ์—์„œ ๋‹ต๋ณ€ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
โ€ข โš ๏ธ ์‹œํ—˜ ์ถœ์ œ ํฌ์ธํŠธ: "์ฒญํ‚น์€ ํ›„์† ์ „์ฒด ํ”„๋กœ์„ธ์Šค์˜ ์ฒœ์žฅ(Ceiling)์„ ๊ฒฐ์ •ํ•œ๋‹ค." ์ฆ‰, 1๋‹จ๊ณ„(์ฒญํ‚น)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜๋ชป ์ชผ๊ฐœ๋ฉด ์•„๋ฌด๋ฆฌ ๊ฒ€์ƒ‰๊ธฐ๋‚˜ LLM์ด ๋˜‘๋˜‘ํ•ด๋„ ์˜ค๋‹ต์„ ๋ƒ…๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฐœ๋ฐœ ํŒ€์ด "๋ฌด์กฐ๊ฑด ์˜๋ฏธ๋Œ€๋กœ ์ชผ๊ฐœ๋Š” ์‹œ๋งจํ‹ฑ ์ฒญํ‚น์ด ๊ฒ€์ƒ‰์„ ๋” ์ž˜ํ•˜๊ฒ ์ง€?"๋ผ๊ณ  ์ฐฉ๊ฐ(Assume)ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ๋ฒค์น˜๋งˆํฌ์™€ ์‹ค์ œ ์—ฐ๊ตฌ ๊ฒฐ๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
โ€ข ์ž„๋ฒ ๋”ฉ ํ’ˆ์งˆ์˜ ์ค‘์š”์„ฑ: ํ…์ŠคํŠธ๋ฅผ ์•„๋ฌด๋ฆฌ ์˜๋ฏธ ์žˆ๊ฒŒ ์ž˜ ์ชผ๊ฐœ๋„, ๊ทธ ํ…์ŠคํŠธ๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” '์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ(Embedding Model)'์˜ ์ง€๋Šฅ(ํ’ˆ์งˆ)์ด ๋‚ฎ์œผ๋ฉด ์„œ๋กœ ๊ด€๋ จ ์žˆ๋Š” ๋‚ด์šฉ์„ ์ฐพ์•„๋‚ด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
โ€ข ๋ฐ˜๋Œ€๋กœ, ํ›Œ๋ฅญํ•œ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ฝ๊ฐ„์˜ ํ…์ŠคํŠธ ๊ฒน์นจ(Overlap)์„ ๋‘” ๊ณ ์ • ์ฐฝ ์ฒญํ‚น๋งŒ ์จ๋„ ์‹œ๋งจํ‹ฑ ์ฒญํ‚น๊ณผ ์„ฑ๋Šฅ์ด ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ์˜คํžˆ๋ ค ๋” ์•ˆ์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ฒญํ‚น ์ „๋žต ์ž์ฒด๋ณด๋‹ค ์–ด๋–ค ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ์ผ๋А๋ƒ๊ฐ€ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ์ขŒ์šฐ(Dominate)ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์ฒญํ‚น์„ ์กฐ์ ˆํ•˜๋Š” 3๊ฐ€์ง€ ๋…ธ๋ธŒ (Knobs)
์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ ์ˆ˜์น˜์  ์žฅ๋‹จ์ (Trade-off)์„ ๋น„๊ตํ•˜๋Š” ๋ฌธ์ œ๋กœ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค.
โ€ข ํฌ๊ธฐ (Size): ์ฒญํฌ์˜ ํ† ํฐ ์ˆ˜
โ€ข ์ž‘๊ฒŒ ์ชผ๊ฐœ๋ฉด: ์ •๋ฐ€๋„(Precision)๊ฐ€ ๋†’์•„์ ธ ์ข์€ ๋ฒ”์œ„์˜ ์งˆ๋ฌธ์— ๊ฐ•ํ•จ. ๋Œ€์‹  ๋ฌธ๋งฅ์ด ๋Š๊น€.
โ€ข ํฌ๊ฒŒ ์ชผ๊ฐœ๋ฉด: ์ฃผ๋ณ€ ๋ฌธ๋งฅ์„ ์ž˜ ๋ณด์กดํ•จ. ๋Œ€์‹  ๋…ธ์ด์ฆˆ๊ฐ€ ์„ž์—ฌ ๊ฒ€์ƒ‰ ์‹ ํ˜ธ๊ฐ€ ํฌ์„(Dilute)๋จ.
โ€ข ๊ฒฝ๊ณ„ (Boundary): ์–ด๋””์„œ ์ž๋ฅผ ๊ฒƒ์ธ๊ฐ€
โ€ข ๊ณ ์ • ์ฐฝ(Fixed-window): ์˜๋ฏธ ๋ฌด์‹œ, ์ •ํ•ด์ง„ ํ† ํฐ ์ˆ˜๋กœ ๋ฌด์กฐ๊ฑด ์ž๋ฆ„.
โ€ข ์‹œ๋งจํ‹ฑ(Semantic): ๋ฌธ๋งฅ, ์ฃผ์ œ, ์„น์…˜์ด ๋ฐ”๋€Œ๋Š” ์ง€์ ์„ ์ฐพ์•„์„œ ์ž๋ฆ„.
โ€ข ์˜ค๋ฒ„๋žฉ (Overlap): ์•ž๋’ค ์ฒญํฌ ์‚ฌ์ด์— ๊ฒน์น˜๊ฒŒ ๋‘๋Š” ํ† ํฐ ์ˆ˜
โ€ข ๋ชฉ์ : ๊ฒฝ๊ณ„๋ฉด์— ๊ฑธ์ณ์ง„ ์ค‘์š”ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์ชผ๊ฐœ์ ธ ์†Œ์‹ค๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•จ.
โ€ข ๋น„์šฉ: ์ธ๋ฑ์Šค ์ €์žฅ ๊ณต๊ฐ„์ด ์ค‘๋ณต์œผ๋กœ ๋Š˜์–ด๋‚จ.
3. [โ˜…๊ฐ€์žฅ ์ค‘์š”] ์‹œํ—˜ ๋‹จ๊ณจ ์˜ค๋‹ต ํ•จ์ •๊ณผ ์ง„์‹ค
Anthropic(ํด๋กœ๋“œ ๊ฐœ๋ฐœ์‚ฌ)์˜ ๊ณต์‹ ๊ฐ€์ด๋“œ๋ผ์ธ์— ๊ธฐ๋ฐ˜ํ•œ ์‹œํ—˜์ง€ ์ •๋‹ต ๋‹จ๊ณจ ๋ฉ˜ํŠธ๋“ค์ž…๋‹ˆ๋‹ค.
โ€ข โŒ ํ•จ์ • ์„ ์ง€: "์‹œ๋งจํ‹ฑ ์ฒญํ‚น์€ ์–ธ์ œ๋‚˜ ๊ณ ์ • ์ฐฝ ์ฒญํ‚น๋ณด๋‹ค ๋›ฐ์–ด๋‚œ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•œ๋‹ค."
โ€ข โญ• ์‹ค์ œ ์ •๋‹ต: ๊ณ ์ • ์ฐฝ ๋ฐฉ์‹๋„ ์‹œ๋งจํ‹ฑ๊ณผ ๋น„๊ตํ•  ๋งŒํ•œ(Comparable) ์„ฑ๋Šฅ์„ ๋ƒ…๋‹ˆ๋‹ค. ์‹œ๋งจํ‹ฑ์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ณ  ํŠœ๋‹์ด ์–ด๋ ค์šฐ๋ฉฐ, ๋…ธ๋ ฅ ๋Œ€๋น„ ์–ป๋Š” ์ด๋“์ด ์ ์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
โ€ข โญ• ์ง„์‹ค (Priority): ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์˜ ํ’ˆ์งˆ(Embedding Quality)์ด ์ฒญํ‚น ์ „๋žต๋ณด๋‹ค ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ์ง€๋ฐฐ(Dominate)ํ•ฉ๋‹ˆ๋‹ค. ํŒ€๋“ค์ด ์„ฑ๋Šฅ ๋‚ฎ์€ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ์“ฐ๋ฉด์„œ ์ฒญํ‚น ๋ฐฉ์‹๋งŒ ๊ณ ๋ฏผํ•˜๋А๋ผ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ๋’ค์ง‘์–ด(Flip) "๋˜‘๋˜‘ํ•œ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ๋จผ์ € ํ™•๋ณด"ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.
4. ๋””๋ฒ„๊น… ๋ฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์šฉ์–ด
์—๋Ÿฌ ์ƒํ™ฉ์ด ์ฃผ์–ด์ง€๊ณ  ์›์ธ์„ ์ฐพ๋Š” ๋ฌธ์ œ์— ๋‚˜์˜ค๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.
โ€ข ํŒŒํŽธํ™” ๋ฌธ์ œ (Bare fragment problem): ์ฒญํฌ ํ•˜๋‚˜๋ฅผ ๋ฌธ์„œ์—์„œ ๋–ผ์–ด๋ƒˆ์„ ๋•Œ ์ฃผ๋ณ€ ๋งฅ๋ฝ์ด ์‚ฌ๋ผ์ ธ ๋ฉ๊ทธ๋Ÿฌ๋‹ˆ ๋‚จ๋Š” ํ˜„์ƒ. ์งˆ๋ฌธ์ด ๋ˆ„๋ฝ๋œ ๋งฅ๋ฝ์— ์˜์กดํ•  ๋•Œ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ๋–จ์–ด๋œจ๋ฆผ.
โ€ข Recall at K: ์ƒ์œ„ K๊ฐœ์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์•ˆ์— ์ง„์งœ ๊ด€๋ จ๋œ ์ฒญํฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๋œปํ•˜๋Š” ์ง€ํ‘œ. ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ์ง๊ด€์ ์œผ๋กœ ์ธก์ •ํ•  ๋•Œ ์”€.

๐ŸŽฏ ์‹œํ—˜ ํ•ฉ๊ฒฉ์„ ์œ„ํ•œ ์•„ํ‚คํ…ํŠธ์˜ ํ‘œ์ค€ ํ–‰๋™ ์ง€์นจ (Order of Method)
์‹œํ—˜ ๋ฌธ์ œ์—์„œ "์ƒˆ๋กœ์šด ์ง€์‹ ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์•„ํ‚คํ…ํŠธ๊ฐ€ ์ทจํ•ด์•ผ ํ•  ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋Š”?" ํ•˜๊ณ  ๋ฌผ์œผ๋ฉด ์ด ์ˆœ์„œ๋ฅผ ๊ณ ๋ฅด์„ธ์š”.
1. Baseline ๊ตฌ์ถ•: ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๊ณ ์ • ์ฐฝ(Fixed-window) ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์ค€์ ์„ ์žก๋Š”๋‹ค.
2. Overlap ์ถ”๊ฐ€: ๊ฒฝ๊ณ„๋ฉด ๋ฐ์ดํ„ฐ ์†์‹ค์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ์˜ค๋ฒ„๋žฉ์„ ์„ค์ •ํ•œ๋‹ค.
3. Embedder ํˆฌ์ž: ์ฒญํ‚น์„ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋ฐ”๊พธ๊ธฐ ์ „์—, ๊ฐ•๋ ฅํ•œ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ๋„์ž…ํ•œ๋‹ค.
4. Measure (์ธก์ •): ์‹ค์ œ ์ฟผ๋ฆฌ๋ฅผ ๋˜์ ธ Recall at K ๋“ฑ์˜ ์ง€ํ‘œ(์ˆซ์ž)๋ฅผ ํ™•์ธํ•˜๊ณ , ์ง€ํ‘œ๊ฐ€ ์ฆ๋ช…ํ•  ๋•Œ๋งŒ ์‹œ๋งจํ‹ฑ ์ฒญํ‚น ๋“ฑ์˜ ๋ณต์žก์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. (์ง๊ด€์— ์˜์กด ๊ธˆ์ง€)

์ฝ˜ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰(Contextual Retrieval)'**์˜ ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜

  1. ๊ธฐ์ˆ ์˜ ์ •์˜ ๋ฐ ๊ฐœ๋…
    โ€ข Contextual Retrieval(์ฝ˜ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰): ํ…์ŠคํŠธ๋ฅผ ์ชผ๊ฐ  ๊ฐ ์ฒญํฌ(Chunk)๊ฐ€ ์ „์ฒด ๋ฌธ์„œ ๋‚ด์—์„œ ์–ด๋–ค ์œ„์น˜์™€ ์˜๋ฏธ๋ฅผ ๊ฐ€์กŒ๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” '์งง์€ ์ฝ˜ํ…์ŠคํŠธ ์š”์•ฝ'์„ ์ž‘์„ฑํ•˜์—ฌ, ์ฒญํฌ ์•ž์— ๋ถ™์ธ(Prepend) ํ›„ ์ธ๋ฑ์‹ฑํ•˜๋Š” Anthropic์˜ ๋…์ž์ ์ธ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.
    โ€ข Chunk Context Generation(์ฒญํฌ ์ฝ˜ํ…์ŠคํŠธ ์ƒ์„ฑ): LLM์„ ์‚ฌ์šฉํ•ด ๊ฐ ์กฐ๊ฐ์ด ์›๋ณธ ๋ฌธ์„œ์˜ ์–ด๋А ์œ„์น˜์— ์†ํ•ด ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ์•ฝ 50~100 ํ† ํฐ ๋‚ด์™ธ์˜ ์งง์€ ์„ค๋ช…์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
  2. โš ๏ธ ์‹œํ—˜์—์„œ ๋ฌด์กฐ๊ฑด ํŒŒ๊ณ ๋“œ๋Š” 'ํ•ต์‹ฌ ๋‹จ์„œ' (Timing)
    ์‹œํ—˜ ๋ฌธ์ œ์—์„œ ์•„ํ‚คํ…์ฒ˜์˜ ๋ถ€ํ•˜(Overhead)๋‚˜ ๋น„์šฉ, ์ž‘๋™ ํƒ€์ด๋ฐ์„ ๋ฌป๋Š” ๋ณด๊ธฐ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ์˜ค๋‹ต์„ ๊ณจ๋ผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค.
    โ€ข ์ˆ˜ํ–‰ ์‹œ์ ์€ ๋ฌด์กฐ๊ฑด '์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„(Indexing Time)'์ž…๋‹ˆ๋‹ค.
    โ€ข โŒ ์‹œํ—˜ ํ•จ์ •: "์‚ฌ์šฉ์ž๊ฐ€ ์งˆ๋ฌธ์„ ๋˜์ง€๋Š” ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰(Query/Inference Time) ๋‹จ๊ณ„์—์„œ ๊ฐ ์ฒญํฌ์˜ ์ฝ˜ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค."
    โ€ข โญ• ์ง„์‹ค: ์งˆ๋ฌธ์„ ๋ฐ›๊ธฐ ์ „, ์ง€์‹ ๋ฒ ์ด์Šค(Knowledge Base)๋ฅผ ์ฒ˜์Œ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฒกํ„ฐ DB์— ์ €์žฅ(Indexing)ํ•˜๋Š” ์‹œ์ ์— ๋ฏธ๋ฆฌ LLM์„ ๋Œ๋ ค ์ฝ˜ํ…์ŠคํŠธ๋ฅผ ๋ถ™์—ฌ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  3. ์ด ๊ธฐ์ˆ ์ด ํ•ด๊ฒฐํ•˜๋Š” ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์ œ
    ์ด ๊ธฐ์ˆ ์€ ์•ž์„  ๊ฐ•์˜์—์„œ ์–ธ๊ธ‰๋œ 'ํŒŒํŽธํ™” ๋ฌธ์ œ(Bare fragment problem)'๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์น˜๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
    โ€ข ๊ธฐ์กด ๋ฌธ์ œ์ : ์ˆ˜๋ฐฑ ํŽ˜์ด์ง€์งœ๋ฆฌ ์žฌ๋ฌด์ œํ‘œ ๋ฌธ์„œ์—์„œ "2024๋…„ 2๋ถ„๊ธฐ ์ˆœ์ด์ต์€ 5% ์ฆ๊ฐ€ํ–ˆ๋‹ค"๋ผ๋Š” ํ•œ ์ค„์„ ๋š ๋–ผ์–ด๋‚ด์–ด ์ฒญํฌ๋กœ ๋งŒ๋“ค๋ฉด, ๋‚˜์ค‘์— ์‚ฌ์šฉ์ž๊ฐ€ "AํšŒ์‚ฌ์˜ 2024๋…„ 2๋ถ„๊ธฐ ์ˆœ์ด์ต์ด ์–ด๋•Œ?"๋ผ๊ณ  ๋ฌผ์—ˆ์„ ๋•Œ, ์ฒญํฌ ์ž์ฒด์— 'AํšŒ์‚ฌ'๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์—†์–ด์„œ ๊ฒ€์ƒ‰๊ธฐ๊ฐ€ ์ด ์ฒญํฌ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  ๋†“์นฉ๋‹ˆ๋‹ค.
    โ€ข Contextual Retrieval์˜ ํ•ด๊ฒฐ์ฑ…: ์ฒญํฌ ์•ž์— [์ด ์กฐ๊ฐ์€ AํšŒ์‚ฌ์˜ 2024๋…„ ์žฌ๋ฌด์ œํ‘œ ์ค‘ 2๋ถ„๊ธฐ ์‹ค์  ๋ฐœํ‘œ ์„น์…˜์— ํฌํ•จ๋œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค]๋ผ๋Š” 50~100 ํ† ํฐ์งœ๋ฆฌ ๋ฐฐ๊ฒฝ ์„ค๋ช…์„ LLM์ด ๋ฏธ๋ฆฌ ์ ์–ด์„œ ๋ถ™์—ฌ์ค๋‹ˆ๋‹ค. ๋•๋ถ„์— ๊ฒ€์ƒ‰๊ธฐ๊ฐ€ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ(AํšŒ์‚ฌ, ์žฌ๋ฌด์ œํ‘œ ๋“ฑ)๋ฅผ ์‰ฝ๊ฒŒ ์ธ์‹ํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ฐพ์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽฏ ์‹œํ—˜ ๋Œ€๋น„ ํ•ต์‹ฌ ์š”์•ฝ ํ‚ค์›Œ๋“œ
โ€ข ๋™์ž‘: ์ฒญํฌ ์•ž์— 50~100 ํ† ํฐ์˜ ๋ฐฐ๊ฒฝ ์„ค๋ช…์„ Prepend(์•ž์— ์ถ”๊ฐ€) ํ•จ.
โ€ข ํƒ€์ด๋ฐ: ์‚ฌ์šฉ์ž๊ฐ€ ์งˆ๋ฌธํ•  ๋•Œ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” Indexing Time(์ธ๋ฑ์‹ฑ ์‹œ์ )์— ์‹คํ–‰๋จ.
โ€ข ํšจ๊ณผ: ์ปจํ…์ŠคํŠธ๊ฐ€ ๋‹จ์ ˆ๋œ ํŒŒํŽธํ™”๋œ ์ฒญํฌ์— '๋ฌธ๋งฅ์  ๋˜ฌ๋ฆฌ(Anchor)'๋ฅผ ํ‹€์–ด์ฃผ์–ด ๊ฒ€์ƒ‰ ์ •ํ™•๋„๋ฅผ ๊ทน์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ด.

3๋‹จ๊ณ„ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ์ ์ธต(Stacking) ๊ตฌ์กฐ์™€ ์„ฑ๋Šฅ ์ง€ํ‘œ
์‹œํ—˜ ๋ฌธ์ œ์—์„œ "Anthropic ๊ฐ€์ด๋“œ๋ผ์ธ์— ๋”ฐ๋ผ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ์•„ํ‚คํ…์ฒ˜ ์ ์ธต ๋ฐฉ์‹์€?" ๋˜๋Š” ๊ฐ ๋‹จ๊ณ„๋ณ„ ๋ˆ„์  ํšจ๊ณผ๋ฅผ ๋ฌป๋Š” ์—ฐ์‚ฐํ˜• ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค. Anthropic์€ ๊ฒ€์ƒ‰ ์‹คํŒจ์œจ ๊ฐ์†Œ(Reduction in retrieval failure) ์ง€ํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
โ€ข Layer 1: Contextual Embeddings (์ฝ˜ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ž„๋ฒ ๋”ฉ)
โ€ข ์„ค๋ช…: ๋ฐฐ๊ฒฝ ์„ค๋ช…(Context)์ด ์ถ”๊ฐ€๋œ ์ฒญํฌ๋ฅผ ๊ณ ์ฐจ์› ์˜๋ฏธ ๋งค์นญ์„ ํ•˜๋Š” ๋ฐ€์ง‘ ๋ฒกํ„ฐ ์ธ๋ฑ์Šค(Dense Vector Index)์— ์ €์žฅ.
โ€ข ์„ฑ๋Šฅ: ๋‹จ๋… ์ ์šฉ ์‹œ ๊ฒ€์ƒ‰ ์‹คํŒจ์œจ ์•ฝ 35% ๊ฐ์†Œ.
โ€ข Layer 2: Contextual BM25 (์ฝ˜ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ BM25)
โ€ข ์„ค๋ช…: ๋™์ผํ•œ ์ฝ˜ํ…์ŠคํŠธ ๊ฐ•ํ™” ์ฒญํฌ๋ฅผ ์ •ํ™•ํ•œ ํ‚ค์›Œ๋“œ/๊ณ ์œ ๋ช…์‚ฌ ๋งค์นญ์„ ํ•˜๋Š” ํฌ์†Œ ์–ดํœ˜ ์ธ๋ฑ์Šค(Sparse Lexical Index)์— ์ค‘๋ณต ์ €์žฅ.
โ€ข ์„ฑ๋Šฅ: Layer 1๊ณผ ๊ฒฐํ•ฉ ์‹œ(ํ•˜์ด๋ธŒ๋ฆฌ๋“œ) ์‹คํŒจ์œจ ์•ฝ 49% ๊ฐ์†Œ (์ž„๋ฒ ๋”ฉ ๋‹จ๋… ํšจ๊ณผ๊ฐ€ ์•„๋‹˜์„ ์ธ์ง€ํ•  ๊ฒƒ).
โ€ข Layer 3: Re-ranking (๋ฆฌ๋žญํ‚น)
โ€ข ์„ค๋ช…: ์œ„ ๋‘ ์ธ๋ฑ์Šค์—์„œ ๋„“๊ฒŒ ๋ฝ‘์•„์˜จ ํ›„๋ณด๊ตฐ์„ ํฌ๋กœ์Šค ์ธ์ฝ”๋”(Cross-encoder) ๋ฆฌ๋žญ์ปค ๋ชจ๋ธ๋กœ ๋‹ค์‹œ ์ •๋ ฌํ•˜์—ฌ ์ตœ์ข… ์••์ถ•.
โ€ข ์„ฑ๋Šฅ: ์ „์ฒด ์Šคํƒ ์™„์„ฑ ์‹œ ์‹คํŒจ์œจ ์•ฝ 67% ๊ฐ์†Œ.
โ€ข โš ๏ธ ์‹œํ—˜ ์ถœ์ œ ํฌ์ธํŠธ: ์ด ์ˆ˜์น˜๋“ค์€ ๋ฒ”์šฉ ์ƒ์ˆ˜๊ฐ€ ์•„๋‹Œ Anthropic ์ž์ฒด ๋ฒค์น˜๋งˆํฌ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์‹œํ—˜์—์„œ๋Š” "๊ฐ ๋ ˆ์ด์–ด๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋„์ž… ๋ฐ ์ธก์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ฒฐํ•ฉํ• ์ˆ˜๋ก ํšจ๊ณผ๊ฐ€ ๋ˆ„์ (Compound/Stacking)๋œ๋‹ค"๋Š” ์•„ํ‚คํ…์ฒ˜์  ๋ณธ์งˆ์ด ์ •๋‹ต์œผ๋กœ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค.
2. ๊ฒฝ์ œ์„ฑ ๋ฐ ์ง€์—ฐ ์‹œ๊ฐ„(Latency) ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ: ํ”„๋กฌํ”„ํŠธ ์บ์‹ฑ
์‹œํ—˜์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ํŒŒ๊ณ ๋“œ๋Š” "๋น„์šฉ(Cost)๊ณผ ์„ฑ๋Šฅ์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„" ๋‹จ๊ณจ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
โ€ข ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ(Query Time)๊ฐ€ ์•„๋‹˜: ์ฝ˜ํ…์ŠคํŠธ ์ƒ์„ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์งˆ๋ฌธํ•  ๋•Œ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ์ธ๋ฑ์‹ฑ ์‹œ์ (Indexing Time)์— ๋”ฑ ํ•œ ๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒด๊ฐํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ๋‹ต๋ณ€ ์†๋„(Query Latency)์—๋Š” ์ถ”๊ฐ€์ ์ธ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.
โ€ข ํ”„๋กฌํ”„ํŠธ ์บ์‹ฑ(Prompt Cashing)์˜ ์—ญํ• : ๋งค ์ฒญํฌ๋งˆ๋‹ค ์ˆ˜๋ฐฑ ํŽ˜์ด์ง€์˜ ์›๋ณธ ๋ฌธ์„œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ฝํžˆ๋ฉด ๋น„์šฉ์ด ํŒŒ์‚ฐ ์ˆ˜์ค€์œผ๋กœ ์ปค์ง‘๋‹ˆ๋‹ค. ์•„ํ‚คํ…ํŠธ๋Š” ์›๋ณธ ๋ฌธ์„œ๋ฅผ ํ•œ ๋ฒˆ ์บ์‹œ(Cache)์— ๋กœ๋“œํ•ด ๋‘๊ณ , ๊ทธ ์•ˆ์—์„œ ๋ชจ๋“  ์ฒญํฌ์˜ ์ฝ˜ํ…์ŠคํŠธ(50~100 ํ† ํฐ)๋ฅผ ์บ์‹œ ์ฝ๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ €๋ ดํ•˜๊ฒŒ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข โš ๏ธ ์‹œํ—˜ ์ถœ์ œ ํฌ์ธํŠธ: ์ฝ˜ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์„ ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ ๊ฒฝ์ œ์ ์œผ๋กœ ํ˜„์‹ค์„ฑ ์žˆ๊ฒŒ(Affordable/Economical) ๋งŒ๋“œ๋Š” ์ผ๋“ฑ ๊ณต์‹ ์€ ๋ชจ๋ธ์˜ ๋‹จ๊ฐ€ ํ•˜๋ฝ์ด ์•„๋‹ˆ๋ผ "ํ”„๋กฌํ”„ํŠธ ์บ์‹ฑ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฒ•" ๊ทธ ์ž์ฒด์ž…๋‹ˆ๋‹ค.
3. ์•„ํ‚คํ…ํŠธ์˜ ์ฝ˜ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ๋„์ž… ๊ธฐ์ค€ (์–ธ์ œ ์“ธ ๊ฒƒ์ธ๊ฐ€?)

์ด ๊ธฐ์ˆ ์€ ์•ž์„  ๊ฐ•์˜์—์„œ ์–ธ๊ธ‰๋œ 'ํŒŒํŽธํ™” ๋ฌธ์ œ(Bare fragment problem)'๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์น˜๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
โ€ข ๊ธฐ์กด ๋ฌธ์ œ์ : ์ˆ˜๋ฐฑ ํŽ˜์ด์ง€์งœ๋ฆฌ ์žฌ๋ฌด์ œํ‘œ ๋ฌธ์„œ์—์„œ "2024๋…„ 2๋ถ„๊ธฐ ์ˆœ์ด์ต์€ 5% ์ฆ๊ฐ€ํ–ˆ๋‹ค"๋ผ๋Š” ํ•œ ์ค„์„ ๋š ๋–ผ์–ด๋‚ด์–ด ์ฒญํฌ๋กœ ๋งŒ๋“ค๋ฉด, ๋‚˜์ค‘์— ์‚ฌ์šฉ์ž๊ฐ€ "AํšŒ์‚ฌ์˜ 2024๋…„ 2๋ถ„๊ธฐ ์ˆœ์ด์ต์ด ์–ด๋•Œ?"๋ผ๊ณ  ๋ฌผ์—ˆ์„ ๋•Œ, ์ฒญํฌ ์ž์ฒด์— 'AํšŒ์‚ฌ'๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์—†์–ด์„œ ๊ฒ€์ƒ‰๊ธฐ๊ฐ€ ์ด ์ฒญํฌ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ณ  ๋†“์นฉ๋‹ˆ๋‹ค.
โ€ข Contextual Retrieval์˜ ํ•ด๊ฒฐ์ฑ…: ์ฒญํฌ ์•ž์— [์ด ์กฐ๊ฐ์€ AํšŒ์‚ฌ์˜ 2024๋…„ ์žฌ๋ฌด์ œํ‘œ ์ค‘ 2๋ถ„๊ธฐ ์‹ค์  ๋ฐœํ‘œ ์„น์…˜์— ํฌํ•จ๋œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค]๋ผ๋Š” 50~100 ํ† ํฐ์งœ๋ฆฌ ๋ฐฐ๊ฒฝ ์„ค๋ช…์„ LLM์ด ๋ฏธ๋ฆฌ ์ ์–ด์„œ ๋ถ™์—ฌ์ค๋‹ˆ๋‹ค. ๋•๋ถ„์— ๊ฒ€์ƒ‰๊ธฐ๊ฐ€ ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ(AํšŒ์‚ฌ, ์žฌ๋ฌด์ œํ‘œ ๋“ฑ)๋ฅผ ์‰ฝ๊ฒŒ ์ธ์‹ํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ฐพ์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‹€๋ฆฐ ์˜ˆ์‹œ
( Semantic chunking reliably outperforms fixed-window across most corpora and query types : ์‹œ๋งจํ‹ฑ ์ฒญํ‚น์ด ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ ๊ณ ์ • ์ฐฝ์„ ์••๋„ํ•œ๋‹ค):
์‹ค์ œ ๋Œ€๊ทœ๋ชจ ๋ฒค์น˜๋งˆํฌ ๊ฒฐ๊ณผ, ๋‹จ์ˆœ ๊ณ ์ • ์ฐฝ ๋ฐฉ์‹์ด ์‹œ๋งจํ‹ฑ ์ฒญํ‚น๋ณด๋‹ค ์ตœ์ข… ๋‹ต๋ณ€ ์ •ํ™•๋„๊ฐ€ ๋” ๋†’๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ํ‹€๋ฆฐ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ์‹œ๋งจํ‹ฑ ์ฒญํ‚น์€ ๋ฌธ์žฅ์ด ๋„ˆ๋ฌด ์งง๊ฒŒ ์ชผ๊ฐœ์ง€๊ฑฐ๋‚˜ ํŒŒ์ดํ”„๋ผ์ธ์ด ๋ณต์žกํ•ด์ง€๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค

(Chunk boundary precision is the single largest factor in retrieval quality : ์ฒญํฌ ๊ฒฝ๊ณ„์˜ ์ •๋ฐ€๋„๊ฐ€ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์˜ ๋‹จ์ผ ์ตœ๋Œ€ ์š”์ธ์ด๋‹ค):
๊ธ€์ž๋ฅผ ์ •ํ™•ํžˆ ์–ด๋””์„œ ์ž๋ฅด๋А๋ƒ(๊ฒฝ๊ณ„๋ฉด)๋ณด๋‹ค๋Š” ์ฒญํฌ์˜ ์ „์ฒด์ ์ธ ํฌ๊ธฐ(Size)๋‚˜ ์ž„๋ฒ ๋”ฉ/๋ฆฌ๋žญ์ปค(Reranker) ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์ด ํ’ˆ์งˆ์— ํ›จ์”ฌ ๋” ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ํ‹€๋ฆฐ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

(Larger chunks tend to improve recall because more context is embedded : ์ฒญํฌ๊ฐ€ ์ปค์ง€๋ฉด ์ปจํ…์ŠคํŠธ๊ฐ€ ๋” ๋งŽ์ด ์ž„๋ฒ ๋”ฉ๋˜๋ฏ€๋กœ ์žฌํ˜„์œจ์ด ํ–ฅ์ƒ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค):
์ฒญํฌ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๋ฉด ์ค‘์š”ํ•œ ํ•ต์‹ฌ ์ •๋ณด(Signal)๊ฐ€ ์ฃผ๋ณ€์˜ ์“ธ๋ฐ์—†๋Š” ํ…์ŠคํŠธ์— ํŒŒ๋ฌปํ˜€ ํฌ์„(Dilute)๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์ด ์˜คํžˆ๋ ค ๋‚˜๋น ์ง‘๋‹ˆ๋‹ค. ๋ฌด์กฐ๊ฑด ์ปค์ง„๋‹ค๊ณ  ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์ด ์ข‹์•„์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ ํ‹€๋ฆฐ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

profile
๋‹น๊ทผ์Šคํƒ

0๊ฐœ์˜ ๋Œ“๊ธ€