Semantic Hints Cycle 02 KO - teamswyg/laya-tools GitHub Wiki
PDCA 02: ๊ฐํ ๊ฒ์ ๊ธฐ์ค์ ๊ณผ ํ๋ฆฐ ํํธ์ ๋น์ฉ ์ ํ
English ยท ์ ์ฒด ๊ฒฐ๊ณผ ยท ๊ธฐํ
์ด๋ฒ์ ์ธ ์ ์๋ ๊ฒ
pkg/hintsearch๋ Go๋ง์ผ๋ก BM25 ๊ฒ์๊ณผ ์ธ๋ถ ํํธ์ ์์ ์กฐํฉ์ ์ ๊ณตํ๋ค. cmd/riido-hints๋ ๊ฐ์ ๊ธฐ๋ฅ์ JSON ์
์ถ๋ ฅ์ผ๋ก ์ ๊ณตํ๋ค. ๋ชจ๋ธ ๋ค์ด๋ก๋ยทPythonยทGPU ์์ด ์คํํ๋ค. ๊ธฐ์กด ๋ผ์ฐํฐ ์ค์ ์ ๋ณ๊ฒฝํ์ง ์๋๋ค.
go run ./cmd/riido-hints < examples/hints/request.json
์์๋ ์๋์ ์ผ๋ก ํ๋ฆฐ cache ํํธ๋ฅผ ๋จผ์ ์ค๋ค. ์ถ๋ ฅ์ ์ฒซ ํ๋ณด๋ cache, ๋ ๋ฒ์งธ๋ BM25๊ฐ ์ฐพ์ payments๋ค. ๋ชจ๋ ํ๋ณด๊ฐ ๋จ๊ณ ์ํ๋ ํญ์ unverified๋ค. bm25_score๋ ์๋ ๋ฌธ์ ๊ด๋ จ์ฑ ์ ์์ด๋ฉฐ ์ต์ข
์์์ ์ ๋ขฐ ํ๋ฅ ์ด ์๋๋ค. hints๋ฅผ ์๋ตํ๋ฉด BM25 ์์๋ง ๋ฐํํ๋ค.
์ฌ๋์ JSON ๋ฌธ์ ๋ชฉ๋ก์ ํธ์งํด์ ์ํํ ์ ์๊ณ , ์์ด์ ํธ๋ ๋์ผํ stdin/stdout ๊ณ์ฝ์ ์ฌ์ฉํ ์ ์๋ค. ์ค์ ์ ์ฅ์๋ฅผ ์ฝ๊ฑฐ๋ API๋ฅผ ํธ์ถํ์ง ์๋๋ค. ์ฌ์ฉ์๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฌธ์๋ง ๋ฃ์ด์ผ ํ๋ฉฐ snapshot ID๋ ํธ์ถ์๊ฐ ์นดํ๋ก๊ทธยท๊ถํ ๋ณ๊ฒฝ๋ง๋ค ๊ฐฑ์ ํด์ผ ํ๋ค. CLI๊ฐ ์ค์ ๋ด์ฉ์ ๋ฒ์ ์ ์ํธํ์ ์ผ๋ก ์ฆ๋ช ํ์ง๋ ์๋๋ค. ํํธ์ query/snapshot ๋ถ์ผ์น, ์ค๋ณต/์ ์ ์๋ ID๋ ์ค๋ฅ๋ก ๊ฑฐ๋ถํ๋ค. ์ ๋ ฅ ์ค๋ฅ๋ ๋น์ ์ ์ข ๋ฃํ๋ฉฐ ์ผ๋ถ ๊ฒฐ๊ณผ๋ฅผ ๋จผ์ ๋ด๋ณด๋ด์ง ์๋๋ค.
๋ฐํ ๊ฒฐ๊ณผ๋ฅผ ์คํ ๋ช
๋ น์ผ๋ก ์ทจ๊ธํ์ง ์๋๋ค. ํ์ ๊ฒ์ฆ๊ธฐ๋ ํ๋์ฉ ๊ฒ์ฌํ๊ณ , ์์ฐ ์ข
๋ฃ ์ incomplete๋ฅผ ๋ฐํํด์ผ ํ๋ค. ์ด CLI ์์ฒด๋ ๊ฒ์ฆยท์์ฐ ์งํยท์บ์๋ฅผ ์์ง ๊ตฌํํ์ง ์๋๋ค.
์ ๋ฒ๊ฐ์ ํ์ธํ๋
์๋ ๊ฒ์ ๋ชฉ๋ก B์ ํ์ต๊ธฐ ๋ฑ์ ํํธ ๋ชฉ๋ก H์์ ๋ฒ๊ฐ์ ํ๋์ฉ ๊บผ๋ด๋ฉฐ ์ด๋ฏธ ํ์ธํ ์์ ์ธ ํ๋ณด๋ ๊ฑด๋๋ด๋ค. H๋ ์ผ๋ถ ํ๋ณด๋ง ์ ๊ณตํด๋ ๋๋ค. B๋ ์ ์ฒด ํ๋ณด๋ฅผ ์ ์งํด์ผ ํ๋ค.
์ฆ๋ช
๋ฒ์: ์๋ r๋ฒ์งธ ํ๋ณด๋ณด๋ค ์์ B ํ๋ณด๋ rโ1๊ฐ๋ค. ๋งค ํ์ ์ H์์ ์ต๋ 1๊ฐ, B์์ ์์ง ๋์ค์ง ์์ ํ๋ณด ์ต๋ 1๊ฐ๋ฅผ ์ถ๋ ฅํ๋ค. H๊ฐ B์ ์ ํ๋ณด๋ฅผ ๋จผ์ ๋ด๋ณด๋ด๋ฉด B์ ์ง๋๋ ๋ ๋นจ๋ผ์ง๋ค. ๋ฐ๋ผ์ r๋ฒ์งธ ์๋ ํ๋ณด๋ ๋ฆ์ด๋ rํ์ , ์ฆ min(N, 2r)๋ฒ์งธ๊น์ง ๋์จ๋ค. ์ ์ฒด ์์์๋ ์ค๋ณต์ด๋ ๋๋ฝ์ด ์๋ค.
์ด๊ฒ์ ๋์ผ ๋จ์ ๋น์ฉ์ ์ ํํ ๋จ์ผ ํ๋ณด ๊ฒ์ฆ ํ์์ ๋ํ ๋ณด์ฅ์ด๋ค. ๋๋ฆฐ ํ๋ณด, ์ฌ๋ฌ ๊ทผ๊ฑฐ๋ฅผ ๋ชจ์ผ๋ ์์ , ํํธ ์์ฑ๋น, LLM ํ ํฐ, ์ด ์๋ต ์๊ฐ์๋ ๊ทธ๋๋ก ์ ์ฉ๋์ง ์๋๋ค. ๋ถ์์ ํ ๊ฒ์ฆ๊ธฐ์ ์ค๋ต๋ ํด๊ฒฐํ์ง ์๋๋ค. ์ธ๋ถ ํํธ ์์ฑ์ ๋ณ๋ ์๊ฐ/๋ฉ๋ชจ๋ฆฌ ํ๋๊ฐ ํ์ํ๋ค. ํจ์จ ํฅ์ ๋ณด์ฅ์ด ์๋๋ผ ์ํด๋ฅผ ์ ํํ๋ ์ฅ์น๋ค.
๊ตฌํ๊ณผ ๊ฒ์ฆ
- BM25 k1=1.2, b=0.75. ๋จ์ด ๋น๋ยท๋ฌธ์ ๊ธธ์ดยทํฌ๊ท๋๋ฅผ ์ฌ์ฉํ๋ค. query ์ค๋ณต ๋จ์ด๋ ํ ๋ฒ๋ง ๊ณ์ฐํ๋ค. ์๋ฏธ ๋ชจ๋ธ์ด ์๋๋ค.
- ์ ๋ ฌ๋ ์ดํ์ ์ฐ์๋ posting ์ด ๋ฐฐ์ด(doc ์์น, ๋น๋), ๋ฌธ์ ์ ๊ทํ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ค. ๊ณต์ index๋ ๋ถ๋ณ์ด๋ฉฐ query ๊ฒฝ๋ก์ mapยทlock์ด ์๋ค. ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ํธ์ถ๋ณ๋ก ์์ ํ๋ค. Go ๋ฐํ์ ๋ด๋ถ ๋๊ธฐํ๊ฐ ์๋ค๋ ๋ป์ ์๋๋ค.
- 1..4096๋ฌธ์, ๋ฌธ์ ๋ณธ๋ฌธ ํฉ๊ณ 2MiB, query 8192B, ์ธ์ฝ๋ฉ๋ CLI JSON 16MiB ํ๋. ์ ๋ ฅ ํ๋๊ฐ ์ ์ฒด RSS ํ๋์ ๊ฐ์ง๋ ์๋ค.
- ์์ ์์น ๋์กฐ, ๋น ๋ฌธ์ยทํ๊ตญ์ด ํ ํฐ, query/catalog ํ๋, ๋์ ํธ์ถ, stale ํํธ ๊ฑฐ๋ถ๋ฅผ ๊ฒ์ฌํ๋ค. ํ๊ตญ์ด ํ ํฐํ ํต๊ณผ๋ ํ๊ตญ์ด ์๋ฏธ ๊ฒ์ ํ์ง์ ์ฆ๊ฑฐ๊ฐ ์๋๋ค.
- ์ต๋ 7ํ๋ณด์ ๋ชจ๋ ํํธ ์์ด๊ณผ ๋ชจ๋ ๊ธธ์ด์ prefix๋ฅผ ์ด๊ฑฐํด 2r ํ๊ณ์ ๋ณด์กด์ ๊ฒ์ฆํ๋ค. ์ต์ข ๋ชจ๋ธ ํ์ต ์ฑ๋ฅ ํ ์คํธ์๋ ๋ค๋ฅด๋ค.
๊ฐ์ 52๊ฐ ๊ฐ๋ฐ ์์ฒญ์ผ๋ก ์ธก์
| ๋ฐฉ๋ฒ | Recall@1 | Recall@4 | ํ๊ท oracle ๊ฒ์ฆ | BM25 ๋๋น ์ต๋ ๊ฐ๋ณ ๊ฒ์ฆ ๋น์จ |
|---|---|---|---|---|
| BM25 | 52.08% | 75.00% | 4.615 | 1.0 |
| token ํํธ + BM25 ๊ต๋ | 52.08% | 75.00% | 4.615 | 1.0 |
| ๊ณ ์ ๋์ ํํธ + BM25 ๊ต๋ | 6.25% | 75.00% | 5.308 | 2.0 |
| BM25 ์ญ์ ํํธ + BM25 ๊ต๋ | 2.08% | 75.00% | 5.385 | 2.0 |
๋ชจ๋ ๋ฐฉ๋ฒ์ ์ ๋ต ์์ 4๊ฑด์ 16๋ฒ ๋ชจ๋ ํ์ธํ๋ค. BM25๋ ์ง์ ํํ 16/16, paraphrase 1/16, ๋์กฐ 8/16์ผ๋ก, ๊ธฐ์กด ์ ํ ํ ํฐ ๊ธฐ์ค์ ๊ณผ ๋์ผํ๋ค. ์ด๊ฒ์ ์๋ฏธ ํ์ต ๊ฐ์ ์ด ์๋๋ค. ๋ถ์คํ ํํธ๋ ํ๊ท ๋น์ฉ์ ์ ํ์์ผฐ์ผ๋ฉฐ, ์๋ฌด ํํธ๋ ์ถ๊ฐํ๋ฉด ์ด๋์ด๋ผ๋ ๊ฐ์ค์ ์ง์ง๋์ง ์๋๋ค. ๊ฐ์ ๊ฐ๋ฐ ์๋ฃ๋ฅผ ์ฌ์ฌ์ฉํ์ผ๋ฏ๋ก ์ final ์ฑ๊ณผ๋ก ๋ณด๊ณ ํ์ง ์๋๋ค.
์ด๋ฒ ๋จ์ผ run์์ BM25 warm p95๋ 0.625ยตs, ์ ์ฒด 9๋ฐฉ๋ฒ ๋น๊ต ํ๋ก์ธ์ค ์ต๋ RSS๋ 11,862,016B(11.31MiB), peak footprint๋ 9,732,576B, wall 0.48์ด, user CPU 0.10์ด, swap 0์ด์๋ค. 16ํ๋ณด query ํ ํฐํยท์ ์ยท์ ๋ ฌ์ ํฌํจํ๊ณ ์ด๊ธฐ index ์์ฑ๊ณผ ๊ฒ์ฆ์ ์ ์ธํ๋ค. ๊ณ ์ ์์ ๋ฒค์น๋งํฌ์ ์์ ์๊ฐ ์ฐจ์ด๋ ์คํ ์์/๋ ธ์ด์ฆ ์ํฅ์ ๋ฐ์ผ๋ฏ๋ก CPU ๊ฐ์ ๋น์จ์ ์ฃผ์ฅํ์ง ์๋๋ค.
64๊ฐ ๋์ผ ๋ฌธ์๋ก ๋ง๋ ๋ณ๋ dense-posting microbenchmark๋ 523.7ns/op, 1128B/op, 5allocs/op์ด์๋ค. ์ค์ ์ ์ฅ์ ํ์งยท์ค์ ๋ถํ๋ฅผ ๋ํํ์ง ์๋๋ค. pprof ํ๋ณธ์ ๋๋ถ๋ถ์ด Go ๋ฐํ์ ๋๊ธฐ/๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์์ด SIMD๋ ์ lock ์ต์ ํ์ ๊ทผ๊ฑฐ๋ก ์ฌ์ฉํ์ง ์์๋ค. ์์ CPU/heap ํ๋กํ์ผ์ ๊ณต๊ฐํ์ง ์๋๋ค. GPU ์ฌ์ฉยท์ ๋ ฅ ์ ๊ฐยทLLM ๋น์ฉ์ ์ธก์ ํ์ง ์์๋ค.
๋ค์ ๋จ๊ณ
์ด์ ํ์ต ๋ชจ๋ธ์ ํํธ ์์๋ฅผ ๋์ผ CLI์ ๊ฒ์ฆ ๊ณ์ฝ์ ๋ผ์ธ ์ ์๋ค. ํ์ง๋ง ์์ง ํ์ต ๋ชจ๋ธ์ ์๊ณ HF ๋ฆด๋ฆฌ์ค๋ ์๋ค. ๋ค์ ์ฌ์ดํด์ ๊ฐ์กฑ ๋ถ๋ฆฌ๋ ๊ณต๊ฐ ๋ฐ์ดํฐ, BM25ยท๊ฐ๋ฒผ์ด ํ์ต ๊ธฐ์ค์ , FP32/INT8/3์ง ๋น๊ต๋ค. ์๋ก์ด ์๋ฏธ ๊ฐ์กฑ final์ ๋ด์ธํ๊ณ , ๋จ์ ํ ํฐ/BM25๋ณด๋ค ์ค์ ๋ก ๊ฒ์ฆ ๋น์ฉ์ด ์ค์ด๋๋์ง ํ์ธํ๋ค. ํ์ฌ ๋ชฉํ๋ ์๋ฃ๋์ง ์์๋ค.