BM25 ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰: ๋ฒกํ„ฐ ๊ฒฐํ•ฉ๋ถ€ํ„ฐ ์žฌํ˜„์œจ ๊ฒ€์ฆ๊นŒ์ง€

BM25์™€ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ๊ฒฐํ•ฉํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์˜ ์›๋ฆฌ์™€ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. RRF์™€ ๊ฐ€์ค‘ ์ ์ˆ˜์˜ ์ฐจ์ด, ์ •ํ™•ํ•œ ์‹๋ณ„์ž ์ฒ˜๋ฆฌ, ElasticsearchยทWeaviateยทPinecone ์„ค์ •, ๋ผ๋ฒจ๋งํ•œ ์งˆ์˜๋ฅผ ํ™œ์šฉํ•œ recall@k ๋น„๊ต๊นŒ์ง€ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์‹œ์ผ

์ž‘์„ฑ์ž
BM25 ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰: ๋ฒกํ„ฐ ๊ฒฐํ•ฉ๋ถ€ํ„ฐ ์žฌํ˜„์œจ ๊ฒ€์ฆ๊นŒ์ง€

๊ฒ€์ƒ‰์ด ์งˆ๋ฌธ์˜ ๋œป์€ ์ดํ•ดํ•˜๋ฉด์„œ ์ œํ’ˆ ์ฝ”๋“œ๋Š” ๋†“์นœ๋‹ค๋ฉด, ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ๊ต์ฒดํ•˜๊ธฐ ์ „์— ์–ดํœ˜ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋ถ€ํ„ฐ ์ถ”๊ฐ€ํ•ด ๋ณด์‹ญ์‹œ์˜ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์€ BM25 ๊ฐ™์€ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์˜ ํ›„๋ณด ๋ชฉ๋ก๊ณผ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์˜ ํ›„๋ณด ๋ชฉ๋ก, ์ด๋ ‡๊ฒŒ 2๊ฐœ๋ฅผ ํ•˜๋‚˜์˜ ์ˆœ์œ„๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค. ๋จผ์ € ์ƒํ˜ธ ์ˆœ์œ„ ์œตํ•ฉ(RRF)์„ ์ ์šฉํ•˜๊ณ , ์ •ํ™•ํ•œ ์‹๋ณ„์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ทœ์น™์€ ๋ช…์‹œ์ ์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ๋ผ๋ฒจ๋งํ•œ ์งˆ์˜ ์„ธํŠธ์—์„œ ๊ธฐ์กด์— ์ž˜ ์ฒ˜๋ฆฌํ•˜๋˜ ์งˆ์˜๋ฅผ ํ•ด์น˜์ง€ ์•Š์œผ๋ฉด์„œ ์žฌํ˜„์œจ์ด ๋†’์•„์งˆ ๋•Œ๋งŒ ๋ณ€๊ฒฝ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ ํ™•์ธ์ผ: 2026๋…„ 10์›” 24์ผ. ์•„๋ž˜ ๊ตฌํ˜„ ์„ค๋ช…์€ Elasticsearch, Weaviate, Pinecone์˜ ํ˜„ํ–‰ ๋ฌธ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํ‰๊ฐ€ ์„ค์ •์€ ์‹คํ—˜์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ œ์•ˆ์ด๋ฉฐ, ์‹ค์ œ๋กœ ์ธก์ •ํ•œ ๊ฐœ์„  ๊ฒฐ๊ณผ๋‚˜ ๊ณต๊ธ‰์‚ฌ์˜ ๋ฒค์น˜๋งˆํฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

BM25์™€ ๋ฒกํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์ด๋ž€?

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์€ ํ‘œํ˜„ ์ž์ฒด์™€ ๊ทธ ์˜๋ฏธ๋ฅผ ๋ชจ๋‘ ๊ฒ€์ƒ‰์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ตฌ์กฐ์—์„œ๋Š” ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰๊ณผ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ๊ฐ๊ฐ ์ˆœ์œ„๊ฐ€ ๋งค๊ฒจ์ง„ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ณ , ์œตํ•ฉ ๋ฐฉ์‹์ด ๋‘ ๋ชฉ๋ก์„ ํ•ฉ์นฉ๋‹ˆ๋‹ค. Weaviate์˜ ๊ฐœ๋… ์„ค๋ช…์—์„œ ๋‘ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์™€ ๊ฒฐํ•ฉ ๋ฐฉ์‹์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๊ณ ๊ฐ ์ง€์› ์งˆ๋ฌธ์„ ๋‘ ์กฐ์‚ฌ ๋‹ด๋‹น์ž์—๊ฒŒ ๋งก๊ธด๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. ํ•œ ๋ช…์€ ์ƒ‰์ธ์—์„œ ์ •ํ™•ํ•œ ์ด๋ฆ„๊ณผ ์˜ค๋ฅ˜ ๋ฌธ์ž์—ด์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•œ ๋ช…์€ ํ‘œํ˜„์ด ๋‹ฌ๋ผ๋„ ๊ด€๋ จ๋œ ๋‚ด์šฉ๊ณผ ๋‹ต๋ณ€์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์–ด๋А ํ•œ์ชฝ์— ๋‘ ์—ญํ• ์„ ๋ชจ๋‘ ๋งก๊ธฐ๋Š” ๋Œ€์‹ , ๊ฐ์ž ์ถ”๋ฆฐ ํ›„๋ณด๋ฅผ ํ•ฉ์น˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

BM25๋Š” ๋ฌธ์„œ์— ํฌํ•จ๋œ ์งˆ์˜์–ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ ์ˆ˜๋ฅผ ๋งค๊ธฐ๋Š” ์–ดํœ˜ ๊ธฐ๋ฐ˜ ๋žญํ‚น ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋‹จ์–ด์˜ ์ถœํ˜„ ๋นˆ๋„์™€ ๋ฌธ์„œ ๊ธธ์ด๊ฐ€ ์ ์ˆ˜์— ์˜ํ–ฅ์„ ์ฃผ๋ฏ€๋กœ, ์ผ์น˜ํ•˜๋Š” ๋‹จ์–ด ์ˆ˜๋งŒ ์„ธ๋Š” ๋ฐฉ์‹๋ณด๋‹ค ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Elasticsearch๋Š” ํ…์ŠคํŠธ ์œ ์‚ฌ๋„์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ BM25๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Elastic์˜ ์œ ์‚ฌ๋„ ๋ ˆํผ๋Ÿฐ์Šค์—์„œ ์ ์ˆ˜์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์š”์†Œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฒกํ„ฐ ๊ฒ€์ƒ‰์€ ์ฝ˜ํ…์ธ ๋ฅผ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•œ ์ž„๋ฒ ๋”ฉ์„ ๋น„๊ตํ•ด ์˜๋ฏธ๊ฐ€ ๋น„์Šทํ•œ ๋‚ด์šฉ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด โ€œ์ž๊พธ ๋กœ๊ทธ์•„์›ƒ๋ฉ๋‹ˆ๋‹คโ€๋ผ๋Š” ์งˆ๋ฌธ์„, ํ‘œํ˜„์ด ๋‹ค๋ฅธ ์„ธ์…˜ ๋งŒ๋ฃŒ ๋ฌธ์„œ์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰ ๊ฐ€์ด๋“œ์—์„œ ์ด ๊ฒ€์ƒ‰ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์งˆ์˜๊ฐ€ ERR_SESSION_EXPIRED after login์ด๋ผ๋ฉด, ์–ดํœ˜ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์€ ์˜ค๋ฅ˜ ๋ฌธ์ž์—ด์ด ๊ทธ๋Œ€๋กœ ๋“ค์–ด ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๊ฒฐ๊ณผ์— ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์€ ์ธ์ฆ ์„ธ์…˜๊ณผ ๊ฐฑ์‹ ์— ๊ด€ํ•œ ์•ˆ๋‚ด๋ฅผ ๋ณดํƒค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ข… ์ˆœ์„œ๋Š” ์œตํ•ฉ ๊ณผ์ •์—์„œ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์˜๋„ํ•œ ๋™์ž‘์„ ์„ค๋ช…ํ•˜๋Š” ์˜ˆ์‹œ์ด์ง€, ๋ณ„๋„ ์„ค์ •์ด ์—†๋Š” ์ €์žฅ์†Œ์—์„œ ํŠน์ • ์ˆœ์œ„๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š” ์ฃผ์žฅ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์งˆ์˜๊ฐ€ BM25์™€ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋กœ ๋‚˜๋‰œ ๋’ค ์œตํ•ฉ ๋‹จ๊ณ„์—์„œ ํ•ฉ์ณ์ ธ ์ตœ์ข… ๊ฒฐ๊ณผ๋กœ ์ด์–ด์ง€๋Š” ๊ตฌ์กฐ
๋‘ ๊ฒฝ๋กœ์—์„œ ๊ฐ๊ฐ ํ›„๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๋’ค ํ•˜๋‚˜์˜ ์ˆœ์œ„๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค.

BM25๋ฅผ ๊ฒฐํ•ฉํ•ด๋„ ์ •ํ™•ํ•œ ์‹๋ณ„์ž ์ฒ˜๋ฆฌ ๊ทœ์น™์€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ์‹๋ณ„์ž์˜ ์ •ํ™•ํ•œ ์ผ์น˜๊ฐ€ ๋ณด์žฅ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ ํ† ํฐ์œผ๋กœ ๋ฐ”๊พธ๋Š” ํ…์ŠคํŠธ ๋ถ„์„ ๊ณผ์ •์—์„œ ์ƒ‰์ธ์— ์ €์žฅ๋˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Elastic์˜ ํ‘œ์ค€ ๋ถ„์„๊ธฐ๋Š” ๋ฌธ์„œ์— ๋‚˜์˜จ ์˜ˆ์‹œ์—์„œ ํ•˜์ดํ”ˆ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ๋ฌธ์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์„ค์ •ํ•œ ๋ถ„์„๊ธฐ๊ฐ€ ์‹ค์ œ SKU์™€ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ํ‘œ์ค€ ๋ถ„์„๊ธฐ ๋ฌธ์„œ์—์„œ ๊ด€๋ จ ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹๋ณ„์ž์˜ ํ‘œ๊ธฐ ์ž์ฒด๊ฐ€ ์š”์ฒญํ•œ ํ•ญ๋ชฉ์„ ๊ฒฐ์ •ํ•œ๋‹ค๋ฉด, ์‹๋ณ„์ž๋ฅผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•œ ์ „์šฉ ํ•„๋“œ์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. Elastic์€ ์ด๋Ÿฐ ๊ตฌ์กฐํ™”๋œ ๊ฐ’์— ์‚ฌ์šฉํ•˜๋Š” keyword ํ•„๋“œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ์˜ SKU์ธ AX-BLUE๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ๋Š”๋ฐ ์„ค๋ช…์ด ๋น„์Šทํ•˜๋‹ค๋Š” ์ด์œ ๋กœ AX-GREEN ์ถ”์ฒœ์œผ๋กœ ์Šฌ์ฉ ๋ฐ”๋€Œ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. Keyword ํ•„๋“œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

ํŒ๋‹จ ๊ธฐ์ค€: ์ œํ’ˆ์ด ์ •ํ™•ํ•œ ํ•ญ๋ชฉ ์กฐํšŒ๋ฅผ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์ธ์‹๋œ ๊ณ ์œ  ์‹๋ณ„์ž๋Š” ์ •ํ™• ์ผ์น˜ ์กฐํšŒ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•ญ๋ชฉ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์•ˆ๋‚ด์ฒ˜๋Ÿผ ์‹๋ณ„์ž์— ๋” ๋„“์€ ์š”๊ตฌ๊ฐ€ ๊ฒฐํ•ฉ๋œ ์งˆ๋ฌธ์—๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋žญํ‚น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

RRF์™€ ๊ฐ€์ค‘ ์ ์ˆ˜, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ฉ์น ๊นŒ์š”?

์„œ๋กœ ๋‹ค๋ฅธ ์ ์ˆ˜ ์ฒ™๋„๋ฅผ ๋ณด์ •ํ•˜์ง€ ์•Š๊ณ  ๋น„๊ต ๊ธฐ์ค€์„ ๋งˆ๋ จํ•˜๋ ค๋ฉด RRF๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ค‘ ์ ์ˆ˜๋Š” ๊ท ํ˜•์„ ์กฐ์ •ํ•  ๋ผ๋ฒจ์ด ์žˆ๊ณ , ์ ์ˆ˜ ๊ฐ„ ๊ฒฉ์ฐจ๋ฅผ ๋ณด์กดํ•  ์ด์œ ๊ฐ€ ์žˆ์„ ๋•Œ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.

RRF๋Š” ์ ์ˆ˜ ๋Œ€์‹  ์ˆœ์œ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

**์ƒํ˜ธ ์ˆœ์œ„ ์œตํ•ฉ(reciprocal rank fusion, RRF)**์€ ๋ฌธ์„œ๊ฐ€ ๋“ฑ์žฅํ•œ ๊ฐ ๋ชฉ๋ก์—์„œ ๋‹ค์Œ ๊ธฐ์—ฌ๋„๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค.

RRF(๋ฌธ์„œ) = ๊ฐ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ชฉ๋ก์˜ 1 / (c + ์ˆœ์œ„)๋ฅผ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’.

์ˆœ์œ„๋Š” ์ฒซ ๋ฒˆ์งธ ์œ„์น˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ชฉ๋ก์— ๋ฌธ์„œ๊ฐ€ ์—†์œผ๋ฉด ๊ทธ ๋ชฉ๋ก์—์„œ๋Š” ์ ์ˆ˜๋ฅผ ๋”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Gordon V. Cormack, Charles L. A. Clarke, Stefan Bรผttcher๋Š” SIGIR 2009 ๋…ผ๋ฌธ์—์„œ RRF๋ฅผ ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ์‹คํ—˜์—์„œ ์ƒ์ˆ˜๋ฅผ 60์œผ๋กœ ๊ณ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฌธ์€ ์ด ์ƒ์ˆ˜๋ฅผ k๋ผ๊ณ  ํ‘œ๊ธฐํ•˜์ง€๋งŒ, ์ด ๊ธ€์—์„œ๋Š” recall@k์˜ ๊ฒฐ๊ณผ ์ˆ˜์™€ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก c๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

RRF๋Š” ๋†’์€ BM25 ์ ์ˆ˜์™€ ๋†’์€ ๋ฒกํ„ฐ ์ ์ˆ˜๊ฐ€ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†์–ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ชฉ๋ก์—์„œ์˜ ์œ„์น˜๋งŒ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Pinecone์˜ RRF ๊ตฌํ˜„์€ ์ฒซ ์ˆœ์œ„๋ถ€ํ„ฐ ์„ธ๋Š” ๋ฐฉ์‹๊ณผ ๋ชฉ๋ก์— ์—†๋Š” ๋ฌธ์„œ์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ช…ํ™•ํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์ด ๋ฐฉ์‹์ด ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“œ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ์˜ ์˜ˆ์—์„œ ๋ฌธ์„œ A๋Š” ํ‚ค์›Œ๋“œ ๋ชฉ๋ก์˜ ๋งจ ์œ„์— ์žˆ๊ณ  ๋ฒกํ„ฐ ๋ชฉ๋ก์—๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ B๋Š” ๋‘ ๋ชฉ๋ก์—์„œ ๋ชจ๋‘ ๋‘ ๋ฒˆ์งธ์ž…๋‹ˆ๋‹ค. c = 60์ด๋ฉด A์˜ ์ ์ˆ˜๋Š” 1/61, B์˜ ์ ์ˆ˜๋Š” 2/62์ž…๋‹ˆ๋‹ค. B๊ฐ€ ์•ž์„ญ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณต์‹์œผ๋กœ ์ง์ ‘ ๊ณ„์‚ฐํ•œ ์˜ˆ์‹œ์ด๋ฉฐ ๊ฒ€์ƒ‰ ๋ฒค์น˜๋งˆํฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ฐ€์ค‘ ์ ์ˆ˜๋Š” ์ ์ˆ˜ ๊ฐ„ ์ฐจ์ด๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค

๊ฐ€์ค‘ ์ ์ˆ˜ ์œตํ•ฉ์€ ๊ด€๋ จ์„ฑ ์ ์ˆ˜์˜ ์ฒ™๋„๋ฅผ ๋น„๊ต ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๋งŒ๋“  ๋’ค ํ•ฉ์นฉ๋‹ˆ๋‹ค. ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ ์ˆ˜ = alpha ร— ์ •๊ทœํ™”ํ•œ ๋ฒกํ„ฐ ์ ์ˆ˜ + (1 โˆ’ alpha) ร— ์ •๊ทœํ™”ํ•œ ํ‚ค์›Œ๋“œ ์ ์ˆ˜.

๊ฐ€์ค‘์น˜ alpha๊ฐ€ ๋‘ ์ ์ˆ˜์˜ ๋น„์ค‘์„ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘๊ฐ’์„ 0.5๋กœ ์ •ํ•˜๋ฉด ๊ณ„์ˆ˜๊ฐ€ ๊ฐ™์•„์งˆ ๋ฟ, ๋‘ ๊ฒ€์ƒ‰ ๋ฐฉ์‹์˜ ์œ ์šฉ์„ฑ์ด ๊ฐ™๊ฑฐ๋‚˜ ์ตœ์ ์˜ ์„ค์ •์ด๋ผ๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ •๊ทœํ™”์™€ ๊ฐ€์ค‘์น˜ ์ค‘ ์–ด๋А ํ•˜๋‚˜๋งŒ ๋ฐ”๋€Œ์–ด๋„ ์ˆœ์œ„๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‘˜์„ ํ•จ๊ป˜ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

Elasticsearch์˜ linear retriever๋Š” minmax ๊ฐ™์€ ์ •๊ทœํ™” ๋ฐฉ์‹์„ ์ ์šฉํ•œ ๊ฐ€์ค‘ ํ•ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Weaviate์˜ ์ƒ๋Œ€ ์ ์ˆ˜ ์œตํ•ฉ์€ ๊ฐ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ ์•ˆ์˜ ์ƒ๋Œ€์ ์ธ ์ ์ˆ˜ ๊ฒฉ์ฐจ๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์œตํ•ฉ์€ ๊ทธ ๊ฒฉ์ฐจ๋ฅผ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

์ฒซ ๋น„๊ต๋Š” RRF๋กœ ์‹œ์ž‘ํ•˜๊ณ , ํ‰๊ฐ€์šฉ์œผ๋กœ ๋”ฐ๋กœ ๋‚จ๊ฒจ ๋‘” ์งˆ์˜์—์„œ ํšจ๊ณผ๊ฐ€ ํ™•์ธ๋  ๋•Œ๋งŒ ๊ฐ€์ค‘ ์œตํ•ฉ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์›์‹œ BM25 ์ ์ˆ˜์™€ ๋ฒกํ„ฐ ์œ ์‚ฌ๋„ ์ ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ํ•œ ๋’ค ์˜๋ฏธ ์žˆ๋Š” ํ•ฉ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ํ›„๋ณด ๊นŠ์ด, ์ฆ‰ ํ›„๋ณด๋ฅผ ๋ช‡ ๊ฐœ๊นŒ์ง€ ๊ฐ€์ ธ์˜ค๋Š”์ง€๋„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ •๊ทœํ™”ํ•  ๋ชฉ๋ก์— ์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ๋“ค์–ด๊ฐ€๋А๋ƒ์— ๋”ฐ๋ผ ์ ์ˆ˜ ๋ฒ”์œ„๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์€ ์–ธ์ œ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰๋ณด๋‹ค ์œ ๋ฆฌํ•œ๊ฐ€์š”?

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์€ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ๋†“์นœ ๊ด€๋ จ ์ž๋ฃŒ๋ฅผ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์ด ์ฐพ๊ณ , ์œตํ•ฉ ํ›„์—๋„ ๊ทธ ์ž๋ฃŒ๊ฐ€ ์œ ์šฉํ•  ๋งŒํผ ๋†’์€ ์ˆœ์œ„๋ฅผ ์œ ์ง€ํ•  ๋•Œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์ด์ง€, ์–ธ์ œ๋‚˜ ์ •ํ™•๋„๊ฐ€ ๋†’์•„์ง„๋‹ค๋Š” ์ฃผ์žฅ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์šฐ์„  ์‹œํ—˜ํ•ด ๋ณผ ๋งŒํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณ ๊ฐ ์ง€์› ๊ฒ€์ƒ‰: ์ •ํ™•ํ•œ ์˜ค๋ฅ˜ ๋ฌธ์ž์—ด, ํ•จ์ˆ˜๋ช…, ๊ณ„์ • ๊ด€๋ จ ์šฉ์–ด๊ฐ€ ์ฆ์ƒ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ๋“ฑ์žฅํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
  • ์นดํƒˆ๋กœ๊ทธ ๊ฒ€์ƒ‰: ์ •ํ™•ํ•œ ์ œํ’ˆ๋ช…์ด๋‚˜ SKU์— ํ˜ธํ™˜์„ฑ, ๊ต์ฒด ๋ถ€ํ’ˆ ๊ฐ™์€ ์š”๊ตฌ๊ฐ€ ์„ž์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
  • ์‚ฌ๋‚ด ์ง€์‹ ๊ฒ€์ƒ‰: ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ์•ฝ์–ด๊ฐ€ ์ž์—ฐ์–ด ์งˆ๋ฌธ์— ์„ž์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

Pinecone์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๊ฐœ์š”๋Š” ์˜๋ฏธ๋ฅผ ์ฐพ๋Š” ๋ฐ€์ง‘ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ํ‚ค์›Œ๋“œ ์‹ ํ˜ธ๋กœ ์ œํ’ˆ ์ฝ”๋“œ, ์˜ค๋ฅ˜ ๋ฌธ์ž์—ด, ์ด๋ฆ„์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ผฝ์Šต๋‹ˆ๋‹ค.

์‹๋ณ„์ž๋งŒ ์กฐํšŒํ•œ๋‹ค๋ฉด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •ํ™• ์ผ์น˜ ์กฐํšŒ๋ถ€ํ„ฐ ๋งˆ๋ จํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฌธ์„œ ์ง‘ํ•ฉ๊ณผ ์งˆ์˜๋ฅผ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ์ด๋ฏธ ์ž˜ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด, ๊ฒ€์ƒ‰ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ทผ๊ฑฐ๋ฅผ ํ™•์ธํ•œ ๋’ค ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์งˆ์ ์ธ ํ•œ๊ณ„๋Š” ํ›„๋ณด์— ๊ด€๋ จ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋˜๋Š” ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค. ์œตํ•ฉ์€ ๊ฐ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๊ฐ€ ์ฐพ์•„์˜จ ๋ฌธ์„œ์˜ ํ•ฉ์ง‘ํ•ฉ ์•ˆ์—์„œ๋งŒ ์ˆœ์„œ๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋А ๊ฒฝ๋กœ๋„ ๊ด€๋ จ ๊ตฌ์ ˆ์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ์œตํ•ฉ ๋ฐฉ์‹์„ ๋ฐ”๊ฟ”๋„ ๋˜์‚ด๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์œตํ•ฉ ์ „์—๋Š” ์žˆ์—ˆ๋˜ ๊ตฌ์ ˆ์ด ์ตœ์ข… ๊ฒฐ๊ณผ์—์„œ ๋น ์กŒ๋‹ค๋ฉด ๋žญํ‚น๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์ž˜๋ผ๋‚ด๋Š” ์ง€์ ์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ์ €์žฅ์†Œ์— ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ˜„์žฌ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•œ ๊ธฐ๋ณธ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฒ€์ƒ‰ ์ „๋žต์„ ๋™์‹œ์— ๋ฐ”๊พธ๋ฉด ๋ฌด์—‡์ด ๊ฐœ์„ ์— ๊ธฐ์—ฌํ–ˆ๋Š”์ง€ ๊ฐ€๋ ค๋‚ด๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

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

์ €์žฅ์†Œ๋ฌธ์„œ์— ๋ช…์‹œ๋œ ๊ฒฐํ•ฉ ๋ฐฉ์‹์„ค์ •ํ•  ํ•ญ๋ชฉ
Elasticsearch๋‚ด์žฅ RRF ๋˜๋Š” ์ •๊ทœํ™”ํ•œ ์„ ํ˜• ์œตํ•ฉํ•˜์œ„ ๊ฒ€์ƒ‰๊ธฐ, ํ›„๋ณด ์œˆ๋„, ํ•„ํ„ฐ, ์œตํ•ฉ ๋ฐฉ์‹
Weaviate๋‚ด์žฅ BM25F์™€ ๋ฒกํ„ฐ ์œตํ•ฉ๊ฒ€์ƒ‰ ์†์„ฑ, ์œตํ•ฉ ๋ฐฉ์‹, ๋ช…์‹œ์ ์ธ alpha ๊ฐ’
Pinecone๋‚ด์žฅ ๋ฐ€์ง‘ยทํฌ์†Œ ๋ฒกํ„ฐ ๊ฒฐํ•ฉ, ํด๋ผ์ด์–ธํŠธ์—์„œ BM25์™€ ๋ฐ€์ง‘ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ RRF๋กœ ์œตํ•ฉAPI ๋ฐฉ์‹ ์„ ํƒ, ID ์œ ์ง€, ํ•ด๋‹น ๊ณ„์ธต์˜ ์„ค์ • ์กฐ์ •

Elasticsearch์—์„œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๊ตฌ์„ฑํ•˜๊ธฐ

Elasticsearch๋Š” ํ…์ŠคํŠธ ๊ฒ€์ƒ‰๊ณผ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•˜๋Š” ๊ฒ€์ƒ‰ ์—”์ง„์ž…๋‹ˆ๋‹ค. rrf ๊ฒ€์ƒ‰๊ธฐ ์•„๋ž˜์— standard ํ…์ŠคํŠธ ๊ฒ€์ƒ‰๊ธฐ์™€ knn ๋ฒกํ„ฐ ๊ฒ€์ƒ‰๊ธฐ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ RRF ๊ฒ€์ƒ‰๊ธฐ ๋ ˆํผ๋Ÿฐ์Šค์—์„œ ์ด ๊ตฌ์กฐ์™€ ํ›„๋ณด ์œˆ๋„๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Elastic์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ์ œํ’ˆ ํŽ˜์ด์ง€
Elasticsearch ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

๊ธฐ์กด ์ƒ‰์ธ์—์„œ๋Š” ๊ฒ€์ƒ‰ํ•  ํ…์ŠคํŠธ์™€ ํ•ด๋‹น ์ž„๋ฒ ๋”ฉ์ด ๊ฐ™์€ ๋ฌธ์„œ ID๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๊ฐ€ ๋™์ผํ•œ ๊ฒ€์ƒ‰ ๋Œ€์ƒ ์ฝ˜ํ…์ธ ๋ฅผ ์กฐํšŒํ•˜๊ฒŒ ํ•œ ๋’ค ์œตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ…Œ๋„ŒํŠธ, ๊ถŒํ•œ, ์ œํ’ˆ ๋ฒ„์ „์— ๋”ฐ๋ฅธ ์ œํ•œ๋„ ๋‘ ๊ฒฝ๋กœ์— ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์š”์ฒญ์€ ES_URL๊ณผ ES_API_KEY๋ฅผ ์„ค์ •ํ•œ ๋’ค ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด docs ์ƒ‰์ธ์— text ํ…์ŠคํŠธ ํ•„๋“œ์™€ embedding ๋ฐ€์ง‘ ๋ฒกํ„ฐ ํ•„๋“œ๊ฐ€ ์žˆ๊ณ , query-vector.json์— ์งˆ์˜์˜ ์‹ค์ œ ์ž„๋ฒ ๋”ฉ ๋ฐฐ์—ด์ด ๋“ค์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฐ์—ด์€ ์ƒ‰์ธ๋œ ๋ฌธ์„œ์— ์‚ฌ์šฉํ•œ ๋ชจ๋ธ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น ์‹คํ–‰์—๋Š” jq์™€ curl์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Bash
jq -n --slurpfile v query-vector.json \
  --arg q 'ERR_SESSION_EXPIRED after login' \
  '{
    size: 10,
    retriever: {
      rrf: {
        retrievers: [
          {standard: {query: {match: {text: $q}}}},
          {knn: {
            field: "embedding",
            query_vector: $v[0],
            k: 50,
            num_candidates: 100
          }}
        ],
        rank_window_size: 50,
        rank_constant: 60
      }
    }
  }' > hybrid-request.json

curl --fail-with-body "$ES_URL/docs/_search" \
  -H "Authorization: ApiKey $ES_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary @hybrid-request.json

์ด๋Š” ํ‰๊ฐ€๋ฅผ ์œ„ํ•œ ์˜ˆ์‹œ ์„ค์ •์ž…๋‹ˆ๋‹ค. size๋Š” ์ตœ์ข… ๊ฒฐ๊ณผ ์ˆ˜์ด๋ฉฐ, rank_window_size๋Š” ๊ฐ ํ•˜์œ„ ๊ฒ€์ƒ‰๊ธฐ์˜ ๊ฒฐ๊ณผ ์ค‘ ๋ช‡ ๊ฐœ๊นŒ์ง€ ์œตํ•ฉ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—๋Š” ํ•„ํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ œ์–ดํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•˜๋ ค๋ฉด ํ•ด๋‹น ๊ฒ€์ƒ‰ ๋Œ€์ƒ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Elastic ๋ฌธ์„œ๋Š” ๊ฐ ํ•˜์œ„ ๊ฒ€์ƒ‰๊ธฐ์˜ ๋ช…์„ธ์— ๋”ฐ๋ผ ์ ์šฉ๋˜๋Š” ์ƒ์œ„ filter๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜ํ•  ์ : ํ•˜์œ„ ๊ฒ€์ƒ‰๊ธฐ์˜ ํ›„๋ณด ์œˆ๋„๊ฐ€ ์ข์œผ๋ฉด, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์œผ๋กœ ๋˜์ฐพ์œผ๋ ค๋˜ ๊ฒฐ๊ณผ ์ž์ฒด๊ฐ€ ํƒˆ๋ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œตํ•ฉ ๋ฐฉ์‹์„ ์กฐ์ •ํ•˜๊ธฐ ์ „์— ๊ฐ ๊ฒฝ๋กœ์˜ ํ›„๋ณด์™€ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. linear retriever๋กœ ์ „ํ™˜ํ•œ๋‹ค๋ฉด ๊ฐ€์ค‘์น˜์™€ ํ•จ๊ป˜ ์ •๊ทœํ™”๋„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Weaviate์—์„œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๊ตฌ์„ฑํ•˜๊ธฐ

Weaviate๋Š” ํ…์ŠคํŠธ์™€ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฉฐ, collection.query.hybrid๋กœ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์–ดํœ˜ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์—๋Š” ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ณ€ํ˜•์ธ BM25F๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์งˆ์˜ ๋ฌธ์„œ๋Š” ๊ฒ€์ƒ‰ํ•  ์†์„ฑ, ์œตํ•ฉ ๋ฐฉ์‹ ์„ ํƒ, ์ ์ˆ˜ ์„ค๋ช…์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Weaviate์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ํŽ˜์ด์ง€
Weaviate ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

์ œ๋ชฉ, ์˜ค๋ฅ˜ ํ…์ŠคํŠธ, ์ œํ’ˆ๋ช…์ฒ˜๋Ÿผ ์œ ์šฉํ•œ ์–ดํœ˜ ๋‹จ์„œ๋ฅผ ๋‹ด์€ ํ•„๋“œ๋ฅผ query_properties๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•œ๋‹ค๋ฉด ์งˆ์˜ ๋ฒกํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ปฌ๋ ‰์…˜์— ์„ค์ •๋œ ๋ฒกํ„ฐํ™” ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์œตํ•ฉ ๋ฐฉ์‹์„ ๋น„๊ตํ•  ๋•Œ๋Š” fusion_type์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๊ณ , ๊ฒฐ๊ณผ์˜ ์ˆœ์œ„๊ฐ€ ๋ฐ”๋€ ์ด์œ ๋ฅผ ์ง„๋‹จํ•  ๋•Œ๋Š” explain_score๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

alpha๋„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. 0์€ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์„, 1์€ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ํ˜„ํ–‰ ๋ฌธ์„œ๋Š” ์ด ๊ฐ’์„ ์ƒ๋žตํ–ˆ์„ ๋•Œ ์‹ค์ œ๋กœ ์ ์šฉ๋˜๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค๊ณ  ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์œตํ•ฉ ๋ฐฉ์‹์€ relativeScoreFusion์ด๋ฉฐ, rankedFusion๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Weaviate์˜ ์œตํ•ฉ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

์ฃผ์˜ํ•  ์ : ๊ฐ€์ค‘์น˜๋ฅผ ๋ฐ”๊ฟ”๋„ ๊ฒ€์ƒ‰ ๋Œ€์ƒ์—์„œ ๋น ์ง„ ํ•„๋“œ๋‚˜ ํ›ผ์†๋œ ์‹๋ณ„์ž ํ† ํฐ์€ ๋ณต๊ตฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ๊ต์ฒดํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฒฐ๋ก  ๋‚ด๋ฆฌ๊ธฐ ์ „์— ์–ดํœ˜ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์ด ๋ฌด์—‡์„ ๊ธฐ์—ฌํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ค‘์น˜ ๋ฒ”์œ„์˜ ์–‘ ๋์ธ ๋ฒกํ„ฐ ์ „์šฉ ๊ฒ€์ƒ‰๊ณผ ํ‚ค์›Œ๋“œ ์ „์šฉ ๊ฒ€์ƒ‰์„ ์ง„๋‹จ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์€ ๋’ค, ๊ฒฐํ•ฉํ•œ ์„ค์ •์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Pinecone์—์„œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๊ตฌ์„ฑํ•˜๊ธฐ

๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Pinecone์€ ์„œ๋กœ ๋‹ค๋ฅธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์„ฑ์„ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ๋ฐ€์ง‘ยทํฌ์†Œ ๋ฒกํ„ฐ ๊ฒฐํ•ฉ๊ณผ ํด๋ผ์ด์–ธํŠธ์˜ RRF๋Š” ๊ตฌํ˜„์ด ๋‹ค๋ฅด๋ฏ€๋กœ, ์˜ˆ์‹œ๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉํ•  ๋ฐฉ์‹์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. Pinecone์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๊ฐœ์š”๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

ํ•„ํ„ฐ๋ง, ํด๋ผ์ด์–ธํŠธ ์ธก ์œตํ•ฉ, ์„œ๋ฒ„ ์ธก ๊ฒฐํ•ฉ์„ ๊ตฌ๋ถ„ํ•˜๋Š” Pinecone ๋ฌธ์„œ
Pinecone ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๋ฌธ์„œ

BM25์™€ ๋ฐ€์ง‘ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ๊ฒฐํ•ฉํ•˜๋ ค๋ฉด Documents API ๋ฐฉ์‹์œผ๋กœ ์ „๋ฌธ ๊ฒ€์ƒ‰๊ณผ ๋ฐ€์ง‘ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ๊ฐ๊ฐ ์‹คํ–‰ํ•œ ๋’ค, ์ˆœ์„œ๊ฐ€ ๋งค๊ฒจ์ง„ ๋ฌธ์„œ ID๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ RRF๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค. Pinecone์˜ RRF ๊ฐ€์ด๋“œ์— ์ด ํด๋ผ์ด์–ธํŠธ ์ธก ๊ตฌํ˜„์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

๋‚ด์žฅ ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ€์ง‘ ๋ฒกํ„ฐ์™€ ํฌ์†Œ ๋ฒกํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•˜๋ ค๋ฉด Vectors API๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ ๋ ˆ์ฝ”๋“œ์— ๋‘ ํ‘œํ˜„์„ ํ•จ๊ป˜ ์ €์žฅํ•˜๊ณ  ํ•˜๋‚˜์˜ ์งˆ์˜์—์„œ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์ƒ‰์ธ ๊ฐ€์ด๋“œ๋Š” vector_type="dense"์™€ metric="dotproduct"๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๋‘ ํ‘œํ˜„์˜ ์ƒ๋Œ€์ ์ธ ์˜ํ–ฅ๋ ฅ์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์งˆ์˜ ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ด ์ •ํ•ฉ๋‹ˆ๋‹ค.

ํฌ์†Œ ๋ฒกํ„ฐ๋Š” ํ‘œํ˜„ ๋ฐฉ์‹์ผ ๋ฟ, BM25๋กœ ์ƒ์„ฑํ–ˆ๋‹ค๋Š” ์ฆ๊ฑฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์„ค๊ณ„ ๋ฌธ์„œ์— ์–ดํœ˜ ๋ชจ๋ธ์ด๋‚˜ ์ „๋ฌธ ๊ฒ€์ƒ‰์˜ ์ ์ˆ˜ ๊ณ„์‚ฐ ๋ฐฉ์‹์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜ํ•  ์ : ํ‚ค์›Œ๋“œ๋กœ ํ•„ํ„ฐ๋งํ•œ ๋’ค ๋ฐ€์ง‘ ๋ฒกํ„ฐ๋กœ ์ˆœ์œ„๋ฅผ ๋งค๊ธฐ๋Š” ๋ฐฉ์‹์€ ๋‘ ์‹ ํ˜ธ๋ฅผ ๋ชจ๋‘ ๋žญํ‚น์— ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ•„ํ„ฐ๋Š” ํ›„๋ณด๋ฅผ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ, ์ด๋ฏธ ์ œ์™ธํ•œ ๋™์˜์–ด ์ผ์น˜ ๊ฒฐ๊ณผ๋ฅผ ๋˜์‚ด๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ์ถฉ์กฑํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์—๋Š” ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์–ด๋А ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์—์„œ๋“  ๊ฒฐ๊ณผ๋ฅผ ๋ณดํƒค ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋ฉด ์œตํ•ฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

RAG์—์„œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋‚˜์š”?

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์€ **๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ(retrieval-augmented generation, RAG)**์˜ ๊ฒ€์ƒ‰ ๋‹จ๊ณ„๋ฅผ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. RAG์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ธ์–ด ๋ชจ๋ธ์˜ ๋‹ต๋ณ€ ์ƒ์„ฑ์— ์•ž์„œ ๊ฒ€์ƒ‰ํ•œ ๊ทผ๊ฑฐ ์ž๋ฃŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์ด ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ๋‹ต๋ณ€์˜ ์ •ํ™•์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ ๋‹จ์œ„๋Š” ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์€ ๋ฌธ์„œ ์ „์ฒด๋ฅผ, ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์€ ๊ตฌ์ ˆ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด ์œตํ•ฉ ์ „์— ID์˜ ๋Œ€์‘ ๊ด€๊ณ„๋ฅผ ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐ™์€ ์ถœ์ฒ˜์˜ ์—ฌ๋Ÿฌ ๊ตฌ์ ˆ์ด ํ›„๋ณด ๋ชฉ๋ก์„ ์ฐจ์ง€ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ๊ด€๋ จ ์ถœ์ฒ˜๊ฐ€ ๋ฐ€๋ ค๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ๊ณผ ๊ฒ€์ƒ‰์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ•ด์„ค์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์—์ด์ „ํ‹ฑ RAG๋Š” ์–ด๋–ค ๊ฒ€์ƒ‰ ์ž‘์—…์„ ํ• ์ง€, ๋‹ค์‹œ ๊ฒ€์ƒ‰ํ• ์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ณผ์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰๊ธฐ๋„ ๊ทธ ์ž‘์—… ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ฐ ์ง€์› ๋ด‡์ด ์ •ํ™•ํ•œ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๋†“์นœ๋‹ค๋ฉด, ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๋”ํ•˜๊ธฐ ์ „์— ๊ฒ€์ƒ‰๊ธฐ๋ถ€ํ„ฐ ์ˆ˜์ •ํ•˜๊ณ  ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ ๋ฐฉ์‹์„ ๋น„๊ตํ•˜๋Š” ๋™์•ˆ ์ƒ์„ฑ ๋ชจ๋ธ๊ณผ ํ”„๋กฌํ”„ํŠธ๋Š” ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์šฉ์–ด๋ฅผ ํฌํ•จํ•œ ์งˆ์˜ ๊ทธ๋ฃน์˜ ๊ฒฐ๊ณผ๋Š” ๋‚˜์•„์กŒ์ง€๋งŒ ๊ฐ™์€ ๋œป์„ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•œ ์งˆ์˜์˜ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ์—ฌ์ „ํžˆ ๋‚ฎ๋‹ค๋ฉด, ๋™์ผํ•œ ๋ผ๋ฒจ๋ง ์งˆ์˜๋กœ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์ž„๋ฒ ๋”ฉ, ์ฒญํ‚น, ์œตํ•ฉ์„ ๋™์‹œ์— ๋ฐ”๊พธ๋ฉด ๋ฌด์—‡์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๊ฟจ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋„์ž… ์ „ํ›„ recall@k๋กœ ์žฌํ˜„์œจ์„ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ๋ผ๋ฒจ๋งํ•œ ์†Œ๊ทœ๋ชจ ์งˆ์˜ ์„ธํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ํ‚ค์›Œ๋“œ ์ „์šฉยท๋ฒกํ„ฐ ์ „์šฉยทํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์„ ๊ฐ™์€ ์ •๋‹ต ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์œ ์ฐฝํ•˜๊ฒŒ ์ƒ์„ฑ๋œ ๋‹ต๋ณ€์€ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ์ง€ํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

Recall@k = ์ƒ์œ„ k๊ฐœ ๊ฒฐ๊ณผ์—์„œ ์ฐพ์€ ๊ด€๋ จ ID ์ˆ˜ รท ํ•ด๋‹น ์งˆ์˜์— ๋Œ€ํ•ด ๋ผ๋ฒจ๋งํ•œ ์ „์ฒด ๊ด€๋ จ ID ์ˆ˜. ์งˆ์˜๋ณ„ ๊ฐ’์„ ํ‰๊ท ํ•˜๋ฉด ๋งคํฌ๋กœ recall@k๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋ผ๋ฒจ์ด ๋ถˆ์™„์ „ํ•˜๋‹ค๋ฉด ์ด ๊ฒฐ๊ณผ๋Š” ์ด๋ฏธ ๊ด€๋ จ์„ฑ์„ ํŒ์ •ํ•œ ํ•ญ๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ ์žฌํ˜„์œจ์ด๋ผ๊ณ  ๋ฐํ˜€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ๊ด€๋ จ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์žฌํ˜„์œจ์„ ์ž…์ฆํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

  1. ์ž‘์€ ์งˆ์˜ ์„ธํŠธ๋ถ€ํ„ฐ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค

    ๋‹ต๋ณ€ ๊ฐ€๋Šฅํ•œ ์งˆ์˜ 60๊ฐœ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์šฉ์–ด๋ฅผ ํฌํ•จํ•œ ์งˆ์˜ 20๊ฐœ, ๊ฐ™์€ ๋œป์„ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•œ ์งˆ์˜ 20๊ฐœ, ๋‘ ํŠน์„ฑ์ด ์„ž์ธ ์งˆ์˜ 20๊ฐœ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ด๋Š” ๊ถŒ์žฅํ•˜๋Š” ์ž‘์—… ๋ถ€ํ•˜ ๊ตฌ๋ถ„์ด๋ฉฐ, ์ถฉ๋ถ„ํ•œ ํ‘œ๋ณธ ํฌ๊ธฐ๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ์‹ค์ œ ๊ฒ€์ƒ‰ ๊ธฐ๋ก์—์„œ ๊ฐ€์ ธ์˜ค๊ณ , ํ˜„์žฌ ๊ฒ€์ƒ‰์— ์‹คํŒจํ•˜๋Š” ์ด๋ฆ„, SKU, ์˜ค๋ฅ˜ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    ๊ฐ ๊ทธ๋ฃน์˜ ์ ˆ๋ฐ˜์€ ๊ฐœ๋ฐœ์šฉ์œผ๋กœ, ๋‚˜๋จธ์ง€ ์ ˆ๋ฐ˜์€ ๋ณ„๋„์˜ ํ‰๊ฐ€์šฉ์œผ๋กœ ๋‚จ๊ฒจ ๋‘ก๋‹ˆ๋‹ค. ์˜๋„์ ์œผ๋กœ ๋‹ต๋ณ€ํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“  ์งˆ์˜ 6๊ฐœ๋„ ๋ณ„๋„๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์งˆ์˜๋“ค์˜ ๋™์ž‘์€ ๊ฒ€ํ† ํ•˜๋˜, ๊ด€๋ จ ํ•ญ๋ชฉ ์ง‘ํ•ฉ์ด ๋น„์–ด ์žˆ์–ด ๋ถ„๋ชจ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์žฌํ˜„์œจ ๊ณ„์‚ฐ์—์„œ๋Š” ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ด€๋ จ๋œ ๊ฒ€์ƒ‰ ๋‹จ์œ„์— ๋ผ๋ฒจ์„ ๋ถ™์ž…๋‹ˆ๋‹ค

    ๊ฐ ์งˆ์˜์˜ ID์™€ ๊ทธ๋ฃน, ๊ด€๋ จ์„ฑ์ด ํ™•์ธ๋œ ๋ชจ๋“  ๋ฌธ์„œ ๋˜๋Š” ๊ตฌ์ ˆ์˜ ID๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์„ธ ๊ฒ€์ƒ‰ ๋ฐฉ์‹์ด ์ฐพ์€ ํ›„๋ณด๋ฅผ ๋ชจ์œผ๊ณ , ์–ด๋А ๋ฐฉ์‹๋„ ์ฐพ์ง€ ๋ชปํ•œ ์•Œ๋ ค์ง„ ์ •๋‹ต๋„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฐฉ์‹์ด ํ›„๋ณด๋ฅผ ๊ฐ€์ ธ์™”๋Š”์ง€ ๋ณด์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๊ด€๋ จ์„ฑ์„ ํŒ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ•˜์ง€ ์•Š๋Š” ID๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฌธ์„œ ๋˜๋Š” ๊ตฌ์ ˆ ์ค‘ ๊ฐ™์€ ๋‹จ์œ„๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  3. ๋น„๊ต ์กฐ๊ฑด์„ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค

    ๋ฌธ์„œ ์ง‘ํ•ฉ์˜ ์Šค๋ƒ…์ƒท, ๊ถŒํ•œ, ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ, ์ฒญํ‚น์„ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข… ๊ฒฐ๊ณผ์˜ k๋Š” 10, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์˜ ๊ฐ ๊ฒฝ๋กœ์—์„œ ๊ฐ€์ ธ์˜ฌ ํ›„๋ณด๋Š” 50๊ฐœ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒ€ํ† ๋ฅผ ์‹œ์ž‘ํ•  ์„ค์ •์ด์ง€ ์ตœ์ ๊ฐ’์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ฒซ ๋น„๊ต์—์„œ๋Š” ๋ฆฌ๋žญํ‚น์„ ๋•๋‹ˆ๋‹ค.

    ๊ฐ ๋ฐฉ์‹์˜ ์ตœ์ข… ID ๋ชฉ๋ก์„ ์ˆœ์„œ๋Œ€๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. ์œตํ•ฉ ์ „์˜ ํ‚ค์›Œ๋“œ ํ›„๋ณด ๋ชฉ๋ก๊ณผ ๋ฒกํ„ฐ ํ›„๋ณด ๋ชฉ๋ก๋„ ์ €์žฅํ•˜๋ฉด, ํ›„๋ณด ๋ˆ„๋ฝ ๋ฌธ์ œ์™€ ๋žญํ‚น ๋ฌธ์ œ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ์„ค์ •์„ ์กฐ์ •ํ•œ ๋’ค ๋ณ„๋„ ํ‰๊ฐ€ ์„ธํŠธ๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค

    ๊ฐœ๋ฐœ์šฉ ์ ˆ๋ฐ˜์—์„œ ์œตํ•ฉ ๋ฐฉ์‹๊ณผ ํ›„๋ณด ๊นŠ์ด๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ์„ค์ •์„ ์ •ํ•œ ๋’ค, ๋‚จ๊ฒจ ๋‘” ํ‰๊ฐ€์šฉ ์ ˆ๋ฐ˜์„ ํ•œ ๋ฒˆ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ํ‰๊ท ๊ณผ ํ•จ๊ป˜ ๋ชจ๋“  ์งˆ์˜ ๊ทธ๋ฃน์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•˜๊ณ , ์„ฑ๋Šฅ์ด ๋‚˜๋น ์ง„ ๊ฐœ๋ณ„ ์งˆ์˜๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ํ‰๊ท ์ด ์กฐ๊ธˆ ๋†’์•„์กŒ๋‹ค๋Š” ๊ฒƒ์€ ์ถ”๊ฐ€๋กœ ์‚ดํŽด๋ณผ ๊ทผ๊ฑฐ์ผ ๋ฟ, ํ†ต๊ณ„์  ์ฆ๋ช…์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ฐ™์€ ์งˆ์˜, ๊ด€๋ จ์„ฑ ๋ผ๋ฒจ, ์žฌํ˜„์œจ ์ง€ํ‘œ๋กœ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰๊ณผ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ตฌ์กฐ
๋‘ ์‹คํ–‰์— ๋™์ผํ•œ ์งˆ์˜์™€ ๊ด€๋ จ์„ฑ ๋ผ๋ฒจ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ทธ๋ฆผ์€ ์ธก์ • ๊ฒฐ๊ณผ๋ฅผ ์ œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋กœ์ปฌ์—์„œ ์žฌํ˜„์œจ ํ‰๊ฐ€ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ํ•˜๊ธฐ

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ evaluate_recall.py๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Python 3 ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. qrels.jsonl์—๋Š” ์งˆ์˜๋งˆ๋‹ค qid, slice, relevant ํ•„๋“œ๋ฅผ ๊ฐ€์ง„ JSON ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์”ฉ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ฒฐ๊ณผ ํŒŒ์ผ์€ ์งˆ์˜ ID๋ฅผ ๋ฐ˜ํ™˜๋œ ID์˜ ์ˆœ์„œ ์žˆ๋Š” ๋ชฉ๋ก์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ผ๋ฒจ ๋ ˆ์ฝ”๋“œ๋Š” {"qid":"q-exact","slice":"exact","relevant":["guide-login"]}, ๊ฒฐ๊ณผ ํŒŒ์ผ์˜ ๋‚ด์šฉ์€ {"q-exact":["guide-reset","guide-login"]} ํ˜•ํƒœ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ˜•์‹ ์˜ˆ์‹œ์ด๋ฉฐ, ํ…Œ์ŠคํŠธํ•œ ์‹œ์Šคํ…œ์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ผ๋ฒจ๋งํ•œ ๋ชจ๋“  ์งˆ์˜๋ฅผ ๋ชจ๋“  ๊ฒฐ๊ณผ ํŒŒ์ผ์— ํฌํ•จํ•˜๊ณ , ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด ๋นˆ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Python
import json
import sys
from collections import defaultdict
from statistics import mean

qrels_path, bm25_path, vector_path, hybrid_path, cutoff = sys.argv[1:]
k = int(cutoff)
if k < 1:
    raise ValueError("k must be positive")

with open(qrels_path, encoding="utf-8") as f:
    labels = [json.loads(line) for line in f if line.strip()]
if not labels or len({r["qid"] for r in labels}) != len(labels):
    raise ValueError("Labels must be nonempty with unique query IDs")

runs = {}
for name, path in (("bm25", bm25_path), ("vector", vector_path),
                   ("hybrid", hybrid_path)):
    with open(path, encoding="utf-8") as f:
        runs[name] = json.load(f)
    missing = {r["qid"] for r in labels} - runs[name].keys()
    if missing:
        raise ValueError(f"{name} is missing query IDs: {sorted(missing)}")

groups = defaultdict(list)
skipped = 0
for row in labels:
    relevant = set(row["relevant"])
    if not relevant:
        skipped += 1
        continue
    scores = {}
    for name, run in runs.items():
        unique_ids = list(dict.fromkeys(run[row["qid"]]))
        scores[name] = len(relevant & set(unique_ids[:k])) / len(relevant)
    groups["overall"].append(scores)
    groups["slice:" + row["slice"]].append(scores)

if not groups:
    raise ValueError("No answerable queries to score")
for group, rows in sorted(groups.items()):
    values = {name: mean(r[name] for r in rows) for name in runs}
    delta = values["hybrid"] - values["vector"]
    report = " ".join(f"{name}={v:.3f}" for name, v in values.items())
    print(f"{group} n={len(rows)} recall@{k} {report} delta={delta:+.3f}")
print(f"Excluded no-answer queries: {skipped}")

๋ณ„๋„๋กœ ๋‚จ๊ฒจ ๋‘” ํ‰๊ฐ€์šฉ ๋ผ๋ฒจ๊ณผ ๋‚ด๋ณด๋‚ธ ๊ฒฐ๊ณผ์— ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Bash
python3 evaluate_recall.py qrels.jsonl bm25.json vector.json hybrid.json 10

์Šคํฌ๋ฆฝํŠธ๋Š” ์ค‘๋ณต ID๋ฅผ ์ œ๊ฑฐํ•œ ๋’ค ์ƒ์œ„ ๊ฒฐ๊ณผ๋ฅผ ์ž˜๋ผ๋ƒ…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋„ ๋™์ผํ•œ ์ค‘๋ณต ์ œ๊ฑฐ ์ •์ฑ…์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๋Œ€๋น„ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์˜ ๋ณ€ํ™”์™€ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๊ธฐ์ค€๊ฐ’์„ ํ•จ๊ป˜ ๋ณด์—ฌ ์ฃผ๋ฏ€๋กœ, ์„ฑ๋Šฅ์ด ์ข‹์€ ์–ดํœ˜ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์ด ๋น„๊ต์—์„œ ๋น ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์งˆ์˜ ๊ทธ๋ฃน์˜ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋˜๊ณ , ๋‚˜๋น ์ง„ ๊ฒฐ๊ณผ๋„ ์ œํ’ˆ ์š”๊ตฌ์‚ฌํ•ญ์ƒ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ํ›„๋ณด๋Š” ์ข‹์•„์กŒ๋Š”๋ฐ ์ตœ์ข… ์žฌํ˜„์œจ์ด ๊ทธ๋Œ€๋กœ๋ผ๋ฉด ์œตํ•ฉ ๋ฐฉ์‹์ด๋‚˜ ์ตœ์ข… ๊ฒฐ๊ณผ ์ˆ˜๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข… ์žฌํ˜„์œจ์ด ๊ฐœ์„ ๋๋‹ค๋ฉด ๊ฒฐ๊ณผ ์ˆœ์„œ, ์ƒ์„ฑ๋œ ๋‹ต๋ณ€์˜ ์ •ํ™•์„ฑ, ์ข…๋‹จ ๊ฐ„ ์ง€์—ฐ ์‹œ๊ฐ„์„ ๋ณ„๋„๋กœ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. ์žฌํ˜„์œจ์€ ์ด ํ•ญ๋ชฉ๋“ค์„ ์ธก์ •ํ•ด ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ณผ์žฅ๋œ ๊ธฐ๋Œ€๋ฅผ ๊ฑท์–ด๋‚ด๊ณ  ๋‹ค์Œ ์ž‘์—…์„ ์ •ํ•˜๊ธฐ

โ€œํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋Š” ๋‘ ๋ฐฉ์‹์˜ ์žฅ์ ๋งŒ ์ทจํ•œ๋‹คโ€๋Š” ๋ง์€ ์‹ค์ œ ์—”์ง€๋‹ˆ์–ด๋ง ํŒ๋‹จ์„ ๊ฐ€๋ฆฝ๋‹ˆ๋‹ค. ์œ ์šฉํ•œ ์ž๋ฃŒ๋ฅผ ๋” ํญ๋„“๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ตœ์ข… ๋ชฉ๋ก์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋„ ํ•˜๋‚˜ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. RRF๋Š” ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋’ค๋กœ ๋ฐ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ค‘ ์œตํ•ฉ์—์„œ๋Š” ์ ์ˆ˜ ์ฒ™๋„๋‚˜ ์ •๊ทœํ™” ๋™์ž‘์˜ ์ฐจ์ด๋กœ ํ•œ์ชฝ์ด ์œ ๋ฆฌํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋А ๋ฐฉ์‹๋„ ๋น ์ง„ ์›๋ฌธ ์ž๋ฃŒ๋ฅผ ๋ณต๊ตฌํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค.

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

์šด์˜์ž๋Š” ๋ฐฐํฌ๋ฅผ ๋ฏธ๋ค„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฌธ์ œ๊ฐ€ ์˜ค๋ž˜๋œ ์ฝ˜ํ…์ธ , ๊ถŒํ•œ ๋ˆ„๋ฝ, ๊ด€๋ จ์„ฑ ๋ผ๋ฒจ ๋ถ€์กฑ์ด๋ผ๋ฉด ์ด๋Ÿฐ ์„ ๊ฒฐ ์กฐ๊ฑด๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•œ ๋’ค ๊ฒ€์ƒ‰ ์ „๋žต์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž ์กฐํšŒ๋ฅผ ๊ฐ–์ถ˜ ํŒ€์€ ๋‹น์žฅ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋” ํญ๋„“์€ ํƒ์ƒ‰์ด ํ•„์š”ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ์•ˆ์ •์ ์ธ ์กฐํšŒ ๊ฒฝ๋กœ๋ฅผ ์œ ์ง€ํ•˜๊ณ , ์ž์—ฐ์–ด ์งˆ๋ฌธ์— ๋Œ€ํ•ด์„œ๋งŒ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์„ ๋ณ„๋„๋กœ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฃผ ์ฒซ ์ž‘์—…์œผ๋กœ ๊ฒ€์ƒ‰์— ์‹คํŒจํ•œ ์งˆ์˜๋ฅผ ๋ชจ์œผ๊ณ , ๋‚˜์™€์•ผ ํ•  ์ถœ์ฒ˜์— ๋ผ๋ฒจ์„ ๋ถ™์ธ ๋’ค, ๊ธฐ์กด ๋ฒกํ„ฐ ๊ฒ€์ƒ‰๊ธฐ์™€ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๊ธฐ์ค€์„ ์„ ๋‚˜๋ž€ํžˆ ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๊ฐ ๊ฒฝ๋กœ๊ฐ€ ๋ฌด์—‡์„ ๋ณดํƒœ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ์œตํ•ฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋กœ ๋‚จ๊ฒจ ๋‘” ํ‰๊ฐ€ ์งˆ์˜์—์„œ ํšจ๊ณผ๋ฅผ ์ž…์ฆํ•œ ์„ค์ •์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

BM25 ์ž์ฒด๊ฐ€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์ธ๊ฐ€์š”?

์•„๋‹™๋‹ˆ๋‹ค. BM25๋Š” ์–ดํœ˜ ๊ธฐ๋ฐ˜ ๋žญํ‚น ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์˜ ๊ฒฐ๊ณผ์™€ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ด ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์˜ ํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

ChatGPT๋Š” ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•˜๋‚˜์š”?

์ƒ์„ฑ๋œ ๋‹ต๋ณ€๋งŒ ๋ณด๊ณ  ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™•์ธํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ๋ชจ๋ธ์„ ํ™œ์šฉํ•ด ์ง์ ‘ ๊ตฌ์ถ•ํ•œ ์‹œ์Šคํ…œ์ด๋ผ๋ฉด BM25, ๋ฒกํ„ฐ, RRF๋ฅผ ์“ด๋‹ค๊ณ  ์ถ”์ธกํ•˜๊ธฐ๋ณด๋‹ค ์‹ค์ œ๋กœ ์„ค์ •๋œ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? ์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

โ€œ์ž๊พธ ๋กœ๊ทธ์•„์›ƒ๋ฉ๋‹ˆ๋‹คโ€ ๊ฐ™์€ ์งˆ์˜๊ฐ€ ํ‘œํ˜„์ด ๋‹ค๋ฅธ ์„ธ์…˜ ๋งŒ๋ฃŒ ์•ˆ๋‚ด์™€ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์˜๋ฏธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์ž…๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์˜ค๋ฅ˜ ๋ฌธ์ž์—ด์„ ์ฐพ์œผ๋ ค๋ฉด ์—ฌ์ „ํžˆ ์–ดํœ˜ ๊ธฐ๋ฐ˜ ๋งค์นญ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์˜ ์˜ˆ์‹œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‚˜์š”?

ERR_SESSION_EXPIRED after login์— ๋Œ€ํ•ด ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋Š” ์˜ค๋ฅ˜ ๋ฌธ์ž์—ด์ด ๊ทธ๋Œ€๋กœ ์ผ์น˜ํ•˜๋Š” ์ž๋ฃŒ๋ฅผ ์ฐพ๊ณ , ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋Š” ๊ด€๋ จ๋œ ์„ธ์…˜ ์•ˆ๋‚ด๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ํ›„๋ณด๋ฅผ ํ•ฉ์นœ ๋’ค ๊ธฐ๋Œ€ํ•œ ์ถœ์ฒ˜๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ๊ด€๋ จ์„ฑ ๋ผ๋ฒจ๊ณผ ๋Œ€์กฐํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰๊ณผ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์˜ ํ•ต์‹ฌ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ฒกํ„ฐ ๊ฒ€์ƒ‰๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์ž„๋ฒ ๋”ฉ ์œ ์‚ฌ๋„๋กœ ์ž๋ฃŒ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ ์„ค๋ช…ํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฉ์‹์€ ํ‚ค์›Œ๋“œ ๊ฒฝ๋กœ๋กœ๋„ ๊ฒ€์ƒ‰ํ•œ ๋’ค, ๋‘ ๊ฒฝ๋กœ์˜ ๊ทผ๊ฑฐ๋ฅผ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ ๋ชฉ๋ก์— ํ•ฉ์นฉ๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰๊ณผ ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์€ ๊ฐ™์€ ๋œป์ธ๊ฐ€์š”?

์•„๋‹™๋‹ˆ๋‹ค. ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•œ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋Š” ๊ฒ€์ƒ‰ ์‹ ํ˜ธ์˜ ๊ฒฐํ•ฉ์„ ๋œปํ•˜๋ฉฐ, ํŠน์ •ํ•œ ์œตํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•˜๋‚˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

Google Search๋„ ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์ธ๊ฐ€์š”?

Google Search๋Š” ๋žญํ‚น ์‹œ์Šคํ…œ์— ์˜๋ฏธ ์ดํ•ด๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. Google์˜ ๋žญํ‚น ์‹œ์Šคํ…œ ๊ฐ€์ด๋“œ๋Š” BERT์™€ ์‹ ๊ฒฝ๋ง ๋งค์นญ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์ „์ฒด ๊ตฌ์กฐ๊ฐ€ ์ด ๊ธ€์—์„œ ๋‹ค๋ฃฌ BM25์™€ ๋ฒกํ„ฐ์˜ ๊ฒฐํ•ฉ ๋ฐฉ์‹์ด๋ผ๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค.

RAG์™€ ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€์š”?

RAG๋Š” ๊ทผ๊ฑฐ ์ž๋ฃŒ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•  ๋•Œ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์€ ๊ทธ ์ž๋ฃŒ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ƒ‰ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. RAG ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์ด๋‚˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์€ ์–ด๋–ค ์›๋ฆฌ๋กœ ์ž‘๋™ํ•˜๋‚˜์š”?

์ด ๊ฐ€์ด๋“œ์˜ ๊ตฌ์กฐ์—์„œ๋Š” ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ ์ฝ˜ํ…์ธ ์— ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰๊ณผ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ์‹คํ–‰ํ•˜๊ณ , ๋ณ€ํ•˜์ง€ ์•Š๋Š” ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ›„๋ณด๋ฅผ ํ•ฉ์นœ ๋’ค, RRF๋‚˜ ์˜๋„์ ์œผ๋กœ ์„ค๊ณ„ํ•œ ๊ฐ€์ค‘ ์ ์ˆ˜ ๋ฐฉ์‹์œผ๋กœ ์ˆœ์œ„๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ ์ „์— ๋ผ๋ฒจ๋งํ•œ ์งˆ์˜๋กœ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋‰ด์Šค๋ ˆํ„ฐ๋กœ ์‹ค๋ฌด ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ ๋ฐ›์•„๋ณด๊ธฐ.

๊ฒŒ์‹œ์ผ
์นดํ…Œ๊ณ ๋ฆฌ
Build
MoE ๋ชจ๋ธ ์ดํ•ดํ•˜๊ธฐ: ์ „์ฒดยทํ™œ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์šด์˜ ๋น„์šฉ

MoE ๋ชจ๋ธ ์ดํ•ดํ•˜๊ธฐ: ์ „์ฒดยทํ™œ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์šด์˜ ๋น„์šฉ

MoE ๋ชจ๋ธ์€ ์–ด๋–ป๊ฒŒ ํ† ํฐ๋‹น ์—ฐ์‚ฐ๋Ÿ‰์„ ์ค„์ด๋ฉด์„œ๋„ ํฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”๊ตฌํ• ๊นŒ์š”? ๋ผ์šฐํ„ฐ์™€ ์—‘์ŠคํผํŠธ์˜ ์ž‘๋™ ์›๋ฆฌ, ์ „์ฒดยทํ™œ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ฐจ์ด๋ฅผ Kimi, Qwen, Mixtral ์‚ฌ๋ก€๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. API ์„ ํƒ๊ณผ ์ง์ ‘ ํ˜ธ์ŠคํŒ…์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌยท์ง€์—ฐ ์‹œ๊ฐ„ยท์ฒ˜๋ฆฌ๋Ÿ‰์˜ ํŒ๋‹จ ๊ธฐ์ค€๋„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 24์ผBuild
AI ํ‰๊ฐ€๋กœ LLM ๋ณ€๊ฒฝ์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฒ•: ํ‰๊ฐ€ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹ค์ „ ๊ฐ€์ด๋“œ

AI ํ‰๊ฐ€๋กœ LLM ๋ณ€๊ฒฝ์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฒ•: ํ‰๊ฐ€ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹ค์ „ ๊ฐ€์ด๋“œ

AI ํ‰๊ฐ€๋ฅผ ํ”„๋กฌํ”„ํŠธ ์ˆ˜์ • ์ „์— ์„ค๊ณ„ํ•˜๋Š” ํ‰๊ฐ€ ์ฃผ๋„ ๊ฐœ๋ฐœ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋ฌธ ์ƒ๋‹ด ์‚ฌ๋ก€ 20๊ฐœ๋กœ ๊ธฐ์ค€์„  ์ธก์ •๋ถ€ํ„ฐ ํ•„์ˆ˜ ๊ฒ€์‚ฌ์™€ ๋ชจ๋ธ ์ฑ„์ , ์‚ฌ๋ก€๋ณ„ ๋น„๊ต, ์ถœ์‹œ ๊ฒฐ์ •๊นŒ์ง€ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ํ‰๊ท  ์ ์ˆ˜๊ฐ€ ์˜ฌ๋ผ๋„ ์ถœ์‹œ๋ฅผ ๋ง‰์•„์•ผ ํ•˜๋Š” ์ด์œ ์™€ CI ์ž๋™ํ™”, ์‹ค์„œ๋น„์Šค ์‹คํŒจ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•˜์„ธ์š”.2026๋…„ 10์›” 24์ผBuild
TTFT์™€ ์ดˆ๋‹น ํ† ํฐ ์ˆ˜๋กœ ๋ณด๋Š” LLM ์‘๋‹ต ์†๋„ ์ธก์ •๋ฒ•

TTFT์™€ ์ดˆ๋‹น ํ† ํฐ ์ˆ˜๋กœ ๋ณด๋Š” LLM ์‘๋‹ต ์†๋„ ์ธก์ •๋ฒ•

TTFT์™€ ์ดˆ๋‹น ํ† ํฐ ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•ด LLM ์‘๋‹ต ์†๋„๋ฅผ ์ •ํ™•ํžˆ ์ฝ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. Groq์™€ Cerebras์˜ ๊ณต๊ฐœ ์ˆ˜์น˜, ๋…๋ฆฝ ๋ฒค์น˜๋งˆํฌ์˜ ์ธก์ • ์กฐ๊ฑด์„ ํ™•์ธํ•˜๊ณ  Python์œผ๋กœ ์ฒซ ์ถœ๋ ฅ ์ง€์—ฐ๊ณผ ์ŠคํŠธ๋ฆฌ๋ฐ ์†๋„๋ฅผ ์ง์ ‘ ์žฌ์–ด ์‹ค์ œ ์‚ฌ์šฉ์ž์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋ธ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 24์ผBuild
LLMOps ์‹ค๋ฌด ๊ฐ€์ด๋“œ: ํ‰๊ฐ€๋ถ€ํ„ฐ ๋ฐฐํฌยท์žฅ์•  ๋Œ€์‘๊นŒ์ง€

LLMOps ์‹ค๋ฌด ๊ฐ€์ด๋“œ: ํ‰๊ฐ€๋ถ€ํ„ฐ ๋ฐฐํฌยท์žฅ์•  ๋Œ€์‘๊นŒ์ง€

LLMOps์˜ ๊ฐœ๋…๊ณผ MLOps์™€์˜ ์ฐจ์ด๋ถ€ํ„ฐ LLM ํ‰๊ฐ€, ๋ฐฐํฌ, ํŠธ๋ ˆ์ด์‹ฑ, ๋น„์šฉ ํ†ต์ œ, ๊ฐ€๋“œ๋ ˆ์ผ, ์žฅ์•  ๋Œ€์‘๊นŒ์ง€ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. 3์ธ ํŒ€์ด ๋จผ์ € ๊ฐ–์ถฐ์•ผ ํ•  ์ตœ์†Œ ์šด์˜ ์ฒด๊ณ„์™€ 30์ธ ํŒ€์˜ ์—ญํ•  ๋ถ„๋‹ด, LangfuseยทLangSmithยทLiteLLM์˜ ๋„์ž… ๊ธฐ์ค€์„ ์‹ค๋ฌด ์˜ˆ์‹œ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 23์ผBuild
JSON ์Šคํ‚ค๋งˆ๋กœ AI ์‘๋‹ต ๋‹ค๋ฃจ๊ธฐ: OpenAIยทClaudeยทGemini ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ

JSON ์Šคํ‚ค๋งˆ๋กœ AI ์‘๋‹ต ๋‹ค๋ฃจ๊ธฐ: OpenAIยทClaudeยทGemini ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ

JSON ์Šคํ‚ค๋งˆ๋กœ OpenAI, Claude, Gemini์˜ ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ์ œ๊ณต์—…์ฒด๋ณ„ ์„ค์ •๊ณผ ์ง€์› ๋ฒ”์œ„, ์ฒญ๊ตฌ์„œ ์ถ”์ถœ ์˜ˆ์ œ, ๋กœ์ปฌ ๊ฒ€์ฆ๊ณผ ์žฌ์‹œ๋„, ์‘๋‹ต ๊ฑฐ๋ถ€ยท์ถœ๋ ฅ ์ž˜๋ฆผยท์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์‹ค์ œ ์•ฑ์—์„œ ํ™•์ธํ•ด์•ผ ํ•  ๊ธฐ์ค€์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 23์ผBuild
Railway ๋Œ€์•ˆ ๋น„๊ต: 2026๋…„ ํ˜ธ์ŠคํŒ… ์„ ํƒ๊ณผ ์ด์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

Railway ๋Œ€์•ˆ ๋น„๊ต: 2026๋…„ ํ˜ธ์ŠคํŒ… ์„ ํƒ๊ณผ ์ด์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

Railway ๋Œ€์•ˆ์„ ์ฐพ๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด Render, Northflank, Fly.io, Heroku ๋“ฑ ํ˜ธ์ŠคํŒ… ํ”Œ๋žซํผ์˜ ์š”๊ธˆ๊ณผ ์ œ์•ฝ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. Postgres, ์›Œ์ปค, cron, ์˜๊ตฌ ํŒŒ์ผ๊ณผ ์ธ์ฆ ์ •๋ณด๊นŒ์ง€ ์ ๊ฒ€ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ๋ณต์› ๋ฆฌํ—ˆ์„ค๋ถ€ํ„ฐ ์‹ค์ œ ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜๊นŒ์ง€ ์ค€๋น„ํ•˜์„ธ์š”.2026๋…„ 10์›” 22์ผBuild
AI ์—์ด์ „ํŠธ Gumloop ๋ฆฌ๋ทฐ: ์—…๋ฌด ์ž๋™ํ™” ๊ธฐ๋Šฅยท๊ฐ€๊ฒฉยทํ•œ๊ณ„

AI ์—์ด์ „ํŠธ Gumloop ๋ฆฌ๋ทฐ: ์—…๋ฌด ์ž๋™ํ™” ๊ธฐ๋Šฅยท๊ฐ€๊ฒฉยทํ•œ๊ณ„

AI ์—์ด์ „ํŠธ Gumloop์˜ ๋ฆฌ๋“œ ์กฐ์‚ฌ, ๋ฌธ์„œ ์ฒ˜๋ฆฌ, ์ด๋ฉ”์ผ ์ž๋™ํ™”๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. Google Sheets๋ถ€ํ„ฐ Slack ๊ฒ€ํ† ์™€ Gmail ๋ฐœ์†ก ์Šน์ธ๊นŒ์ง€์˜ ์„ค์ • ์ ˆ์ฐจ, ํฌ๋ ˆ๋”ง ์š”๊ธˆ, ์‹คํ–‰ ๋ˆ„๋ฝ๊ณผ ๋ณต๊ตฌ์˜ ํ•œ๊ณ„, n8nยทZapier ๋Œ€์•ˆ์„ ๋น„๊ตํ•ด ๋„์ž… ๊ธฐ์ค€์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 22์ผBuild
ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๊ฐ€์ด๋“œ: LLM ํ•™์Šตยทํ‰๊ฐ€ยทํ…Œ์ŠคํŠธ์— ์“ฐ๋Š” ๋ฒ•

ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๊ฐ€์ด๋“œ: LLM ํ•™์Šตยทํ‰๊ฐ€ยทํ…Œ์ŠคํŠธ์— ์“ฐ๋Š” ๋ฒ•

ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ LLM ํ‰๊ฐ€, ํŒŒ์ธํŠœ๋‹, ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ์— ๋งž๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ ์ง€์› ํ‹ฐ์ผ“ ์˜ˆ์ œ๋กœ ์‹œ๋“œ ์„ค๊ณ„๋ถ€ํ„ฐ ์ƒ์„ฑ, ํ•„ํ„ฐ๋ง, ์ค‘๋ณต ์ œ๊ฑฐ, ์‚ฌ๋žŒ์˜ ๊ฒ€ํ† ๊นŒ์ง€ ๋”ฐ๋ผ๊ฐ€๋ฉฐ, ํˆด๋ณ„ ์—ญํ• ๊ณผ ๋ฐฐ์น˜ ํ•œ๋„, ์ถœ๋ ฅ๋ฌผ ํ•™์Šต ์•ฝ๊ด€, ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ์ ๊ฒ€ ๊ธฐ์ค€์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 22์ผBuild
๋‰ด์Šค๋ ˆํ„ฐ

๋งค์ฃผ ์ผ์š”์ผ, ํ•œ ํ†ต์˜ ํŽธ์ง€.๋œจ๊ฑฐ์šด ์˜๊ฒฌ์ด ์•„๋‹Œ, ๋Œ์•„๊ฐ€๋Š” ์‹œ์Šคํ…œ.

์ฃผ๊ฐ„ ๋ฐœํ–‰. ์ŠคํŒธ ์—†์Œ. ์–ธ์ œ๋“  ํ•ด์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.