Rank Reuse 08 KO - teamswyg/laya-tools GitHub Wiki
์์ ๋ฐฐ์ด ์ฌ์ฌ์ฉ 08: ๊ฒฐ๊ณผ๋ฅผ ์ ์งํ๋ฉฐ ๋์ ํ ๋น ์ฝ 97% ๊ฐ์
English ยท ์ ์ฒด ์ธก์ ยท ๊ฒ์ ์๋ฃ์ ํ๊ณ
๋ฐ๋ณต ๊ฒ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ค์์ง๋ง, ํฐ ๊ฒ์ ์๋ ๊ฐ์ ์ด๋ ์์ฃผ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์๋ ์ ์ฆํ์ง ๋ชปํ๋ค. ์ด์ 2,948๊ฐ ์ง๋ฌธ/3,009๊ฐ ํ๋ณด๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค. ์ ํ์ต, ํ๊ฐ ์๋ฃ ์ ๋ณ, ๊ฒ์ ์ ์ ๋ณ๊ฒฝ์ ์๋ค.
๋ณ๊ฒฝ๊ณผ ์ฌ์ฉ
pkg/hintsearch.Index.RankInto(query, previous)๊ฐ ํธ์ถ์ ์์ ์ ์์ยท์ ์ ๋ฐฐ์ด์ ์ฌ์ฌ์ฉํ๋ค. ๊ธฐ์กด Rank๋ ๋
๋ฆฝ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ณ์ฝ์ ์ ์งํ๋ค. ์ ์ ๊ณ์ฐ, ๋์ ์ฒ๋ฆฌ, 0์ ํ๋ณด์ ์ ์ฒด ํ๋ณด ๋ณด์กด์ ๋์ผํ๋ค.
var scratch hintsearch.Ranking
for _, query := range queries {
var err error
scratch, err = index.RankInto(query, scratch)
if err != nil {
return err
}
// Consume scratch.Order and scratch.Scores before the next call.
}
๋ค์ ํธ์ถ์ ๊ฐ์ ๋ฐฐ์ด์ ๋ฎ์ด์ด๋ค. ๊ฒฐ๊ณผ๋ฅผ ์ค๋ ๋ณด๊ดํ๋ ค๋ฉด ๋ณต์ฌํ๊ฑฐ๋ ๊ธฐ์กด Rank๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ๋ฌ ์์
์๊ฐ ๋์์ ๊ฒ์ํ๋ฉด ์์
์๋ง๋ค ๋ณ๋์ ๋ฐฐ์ด์ ๋๋ค. ์์ธ์ ๋ถ๋ณ์ด๋ฉฐ ๊ณต์ ํยท๋งตยท๋ฎคํ
์ค๋ฅผ ์ถ๊ฐํ์ง ์์๋ค. ์๋ชป๋ ์ง๋ฌธ์ ๊ธฐ์กด ๋ฐฐ์ด์ ์์ ํ๊ธฐ ์ ์ ๊ฑฐ๋ถํ๋ค. ๋ ํฐ/์์ ์์ธ์์ ์ฌ์ฌ์ฉํด๋ ํ์ํ ๊ธธ์ด๋ก ์กฐ์ ํ๊ณ ๋จ์ ์ ์๋ฅผ ์ด๊ธฐํํ๋ค.
ํ ๋ฒ๋ง ์์ฒญ์ ์ฒ๋ฆฌํ๋ riido-hints CLI๊ฐ ์ด๋ฒ ๋ณ๊ฒฝ์ผ๋ก ๋ฐ๋ณต ๊ฒ์ ์์ค์ ์ ๊ฐ์ ์ป๋๋ค๋ ์ฃผ์ฅ์ ํ์ง ์๋๋ค. ์ฃผ๋ ์ฌ์ฉ์ฒ๋ ๊ฐ์ ์์ธ์ ์ฌ๋ฌ ๋ฒ ์ง๋ฌธํ๋ Go ํธ์ถ์์ ํฅํ daemon์ด๋ค. ํ๊ฐ CLI์์๋ --reuse-rank๋ก ์ง์ ์ฌ์ฉํ ์ ์๋ค.
์ค์ ์๋ฃ์ ๊ฒฐ๊ณผ ๋ณด์กด๊ณผ ํ ๋น
๊ธฐ์กด ๋ฐฉ์ โ ์ฌ์ฌ์ฉ โ ์ฌ์ฌ์ฉ โ ๊ธฐ์กด ๋ฐฉ์ ์์๋ก ๋ค ๋ฒ ์คํํ๋ค. ๊ฐ ์คํ์์ ๋ ๊ฒ์ ๋ฐฉ์(raw/identifiers)์ ๋ชจ๋ ํ๊ฐํ๋ค. ์ง๋ฌธ๋ณ ๋ชจ๋ ํ๋ณด ์์์ float64 ์ ์ ๋นํธ๋ฅผ ํด์ํ๊ณ ๋ค ์คํ์์ ์ผ์นํ๋ค. ๊ธฐ์กด 07์ ์ ์ฒดยท์ด๋ฆ ์ ๋ฌดยท์ ์ฅ์๋ณ ํ์ง ์งํ๋ ๋ชจ๋ ๊ฐ์๋ค.
| ์คํ | ์ง๋ฌธ ์ฒ๋ฆฌ ๋ฃจํ์ ๋์ ํ ๋น ํฉ๊ณ | ์ ์ฒด wall | ์ต๋ RSS |
|---|---|---|---|
| ๊ธฐ์กด 1 | 298,879,080 B | 1.89์ด | 102,465,536 B |
| ์ฌ์ฌ์ฉ 1 | 9,176,888 B | 1.50์ด | 92,291,072 B |
| ์ฌ์ฌ์ฉ 2 | 9,176,888 B | 1.50์ด | 93,503,488 B |
| ๊ธฐ์กด 2 | 298,884,224 B | 1.52์ด | 91,062,272 B |
๋์ ํ ๋น์ ์ฝ 96.93% ๊ฐ์ํ๋ค. ์ด ํฉ๊ณ๋ ๋ ๋ฐฉ์์ผ๋ก ๊ฐ๊ฐ 2,948๋ฒ ๊ฒ์ํ๋ ๋ฃจํ์ Go TotalAlloc ์ฐจ์ด์ด๋ฉฐ ์ ์ฒ๋ฆฌยท์ถ์ ํด์ยทํ๊ฐ ์ง๊ณ๋ ํฌํจํ๋ค. ๋์์ ์ด์ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ชจ๋ธ ํฌ๊ธฐ๊ฐ ์๋๋ค. ์์ฒ ZIP ๊ฒ์ฆ๊ณผ ์์ธ ์ค๋น๋ ๋ฃจํ ํ ๋น์์ ์ ์ธํ์ง๋ง ์ ์ฒด wall/RSS์๋ ํฌํจํ๋ค. ๋ ๋ฒ์งธ ๊ธฐ์กด ๋ฐฉ์์ RSS๊ฐ ์ฌ์ฌ์ฉ๋ณด๋ค ๋ฎ์์ผ๋ฏ๋ก ์ต๋ RSS ๊ฐ์ ์ ํ์ ํ์ง ์๋๋ค. ๊ฐ๋ณ ๊ฒ์ p95๋ ๊ฑฐ์ ๊ฐ์์ผ๋ฉฐ JSON์ ์๊ฐ์ ๋จ๊ฒผ๋ค.
์์ ๋ฒค์น๋งํฌ
์๋ณธ ๊ณต๊ฐ์ฉ ๊ณ ์ ๋ฌธ์์ด๋ก ํ๋ณด 64๊ฐ/3,009๊ฐ๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ ์ง๋ฌธ์ ๋ฐ๋ณตํ๋ค. ๊ฐ ๊ตฌ์ฑ 300ms์ฉ 5ํ ์ธก์ ํ ์ค์๊ฐ์ด๋ค. ์ด๊ฒ์ ์ค์ ์ง๋ฌธ 2,948๊ฐ์ ๋ค์์ฑ์ ๋์ฒดํ์ง ์๋๋ค.
| ํ๋ณด ์ | ๋ฐฉ์ | ํธ์ถ๋น ์ ํ ๋น | ํธ์ถ๋น ํ ๋น ํ์ | ์๊ฐ ์ค์๊ฐ |
|---|---|---|---|---|
| 64 | ๊ธฐ์กด | 1,112 B | 5 | 655.3ns |
| 64 | ์ฌ์ฌ์ฉ | 88 B | 3 | 588.9ns |
| 3,009 | ๊ธฐ์กด | 49,240 B | 5 | 59,595ns |
| 3,009 | ์ฌ์ฌ์ฉ | 88 B | 3 | 59,493ns |
3,009๊ฐ ํ๋ณด์ ํธ์ถ๋น ํ ๋น์ ์ฝ 99.82% ์ค์์ง๋ง ์๋ ์ฐจ์ด๋ ๋ฏธ๋ฏธํ๋ค. ์ฌ์ฌ์ฉ ๋ฐฐ์ด์ด ์์ด์ง๋ ๊ฒ์ ์๋๋ค. ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ค๋น ํ ํธ์ถ์๊ฐ ๋ณด์ ํ๊ณ , 88๋ฐ์ดํธ๋ ๊ทธ ์ดํ ๊ฐ ํธ์ถ์ ์ ํ ๋น๋ง ์ผ๋ค. ๋จ์ ๋น์ฉ์ ์ง๋ฌธ ํ ํฐํ์ ์ ๋ ฌ ๋ฑ์ ์๋ค. SIMD ํจ๊ณผ๋ฅผ ์ธก์ ํ ์คํ์ด ์๋๋ค.
์ฌํ๊ณผ ๊ฒ์ฆ
Apple M4 Pro/Go1.27.1 CPU. ์์ 07์ ๊ณ ์ ์์ฒ๊ณผ ZIP์ ์ค๋นํ๊ณ ์คํํ๋ค.
go test -race ./pkg/hintsearch ./internal/retrievalbench
go test ./pkg/hintsearch -run '^$' -bench BenchmarkRankReuse -benchmem -benchtime=300ms -count=5
go run ./cmd/riido-retrievalbench --stage evaluate
go run ./cmd/riido-retrievalbench --stage evaluate --reuse-rank
ํ๊ท ์ํ์ ์๋ก ๋ค๋ฅธ ์ง๋ฌธ์ผ๋ก ๋จ์ ์ ์ ์ง์ฐ๊ธฐ, ๋ฌด๋งค์นญยท๋์ ํ๋ณด ๋ณด์กด, ์์ธ ํฌ๊ธฐ ๋ณ๊ฒฝ, ์๋ชป๋ ์ ๋ ฅ์ ๋น์์ , ์์ ์๋ณ ๋ฒํผ๋ฅผ ์ฌ์ฉํ ๋์ ๊ฒ์์ ๊ฒ์ฌํ๋ค. ๊ธฐ์กด BM25 ๊ณ์ฐ ์ฐธ์กฐ ์ํ๊ณผ ํ๋ณด ๋ณด์กด ์ํ๋ ์ ์งํ๋ค.
์ด ๊ฒฐ๊ณผ๋ ๊ฒ์ ๋ฐํ์์ ํ ๋น ๊ฐ์ ์ด๋ค. ์๋ก์ด ๋ชจ๋ธ ์ฑ๋ฅ์ด๋ ์ค์ ์์ด์ ํธ ์ฑ๊ณต๋ฅ ยทLLM ์ ๊ฐ์ ์ ์ฆํ์ง ์๋๋ค. ๋ค์ ์๋ฏธ ๋ชจ๋ธ ์คํ์ ๊ฒ์ ๋์ ์ฌ๋ถ๋ฅผ ๋ฐํ์์์ ๊ด์ธก ๊ฐ๋ฅํ ์ ํธ๋ก ์์ธกํ๋ ๋ณ๋ ์๋ฃยท๊ธฐ์ค์ผ๋ก ๊ฒ์ฆํด์ผ ํ๋ค.