🔍 검색 벤치 가이드 짝꿍
1 / 1
🔍

검색 벤치 — 18에서 23으로

본편 「GraphRAG 검색 원리」의 짝꿍 — 실제 24문항을 돌려 정답률을 어떻게 끌어올렸는지, 그리고 정직하게 못 잡은 1개까지.

본편에서 "다음 레버 = 더 좋은 임베딩(BGE-M3) + 정답 셋 재검토"라고 예고했었죠. 이 짝꿍은 그걸 실제로 당겨본 기록입니다. 같은 24개 질문에 답이 몇 위로 나오는지를 측정해서, 18 → 23으로 올렸습니다 — 그리고 끝까지 못 잡은 1개는 끼워맞추지 않고 정직하게 남겼습니다.
23/24정답을 상위 5위 안에
48과적합 검증용 별도 질문
1정직하게 남긴 진짜 약점
이 짝꿍에서 보는 것
  • "정답·상위 5위·속도"가 정확히 무슨 뜻인지
  • 같은 질문을 기본 검색 vs GraphRAG로 돌리면 얼마나 다른지 (0 · 7 · 23)
  • 18을 23으로 올린 3단계 — 그리고 점수 부풀리기를 안 했다는 증거
  • 순위도 없는 기본 검색이 그래도 꽤 먹히는 이유 (우리 볼트 구조)
용어

먼저 — 용어 4개만

표와 막대를 보기 전에, 딱 4개만 알면 됩니다. 어렵지 않아요.

🎯 ① 정답(gold)

질문마다 "이 문서가 나와야 한다"고 미리 정해둔 핵심 문서입니다. 대부분 주제별 목차(MOC) 문서예요. 검색 결과에 이게 뜨면 정답.

예) "MCP" → 정답: MCP-생태계-현재와-미래-MOC
🏅 ② 상위 5위 안 (hit@5)

검색 결과 목록의 맨 위 5개 안에 정답이 들어왔는가. 사람은 보통 위 5개만 보니까, "위 5개 안에 정답이 있나"가 실질 성공 기준입니다. 23/24는 24문항 중 23개에서 정답이 상위 5위 안에 들어왔다는 뜻.

정답이 3위 → 상위 5위 안 ✓ / 357위 → 실패 ✗
📊 ③ 평균 순위 점수 (MRR)

"위 5개 안에 있나(hit@5)"만으론 그게 1위인지 5위인지 구분이 안 되죠. MRR은 정답이 평균 몇 등으로 나오는지를 0~1 점수로 압축한 거예요 — 1등이면 1점, 2등 0.5점, 4등 0.25점… 식. 우리 점수 0.81 = 정답이 평균 1.2등쯤(거의 1등)에 나온다는 뜻입니다.

hit@5 = "위 5개 안에 드나(○/✗)" · MRR = "평균 몇 등이냐(높을수록 위)"
⏱️ ④ 속도

질문 하나에 답을 찾기까지 걸린 시간(밀리초, 1000ms=1초). 같은 질문을 3번 돌려 가운데값(중앙값)을 씁니다.

이 네 개만 들고 있으면 다음 장의 막대·표가 전부 읽힙니다.
측정 방법

어떻게 쟀나 — 24문항 · 3회 · 채점

"23개 맞혔다"가 어디서 나온 숫자인지, 측정 과정을 그대로 공개합니다. 끼워맞춤이 없다는 걸 보이려면 방법부터 투명해야 하니까요.

질문 24개 카드가 검색 서버를 거쳐 채점표(상위 5위 체크·평균 등수 게이지)로 가는 측정 과정
측정 과정 — 질문 24개를 라이브 검색 서버에 넣고, 상위 5위 안 정답 여부(✓)와 평균 등수로 채점한다
📝 ① 질문 24개 — 난이도를 섞어서

우리가 실제로 볼트에서 찾을 법한 질문 24개를 뽑았습니다. 쉬운 것(단어 하나, 예 "MCP"·"GraphRAG")부터 막연한 것(개념·관계를 묻는, 예 "RAG와 GraphRAG의 차이"·"내 지식에서 핵심 주제 3가지의 연결")까지 난이도를 섞었어요. 질문마다 "이게 정답 문서"를 미리 정해뒀습니다(대부분 그 주제의 목차=MOC 문서).

🔁 ② 모형이 아니라 — 라이브 서버에 직접

테스트용 흉내가 아니라 실제로 돌아가는 검색 서버에 같은 질문을 넣습니다. 속도는 3번 돌려 가운데값을 써요(한 번 튄 값에 안 휘둘리려고). 정확도(순위)는 같은 질문이면 매번 같게 나오니 한 번이면 충분합니다.

✅ ③ 두 점수로 동시에 채점

결과를 받으면 두 가지로 채점합니다 — 상위 5위 안에 정답이 들었나(hit@5) + 정답이 평균 몇 등인가(MRR). 하나는 "성공/실패", 하나는 "얼마나 위냐". 둘을 같이 봐야 "간신히 5위로 맞혔다"인지 "1위로 시원하게 맞혔다"인지가 구분됩니다.

왜 이렇게까지? 측정이 허술하면 "23개"라는 숫자도 못 믿어요. 그래서 ① 실제 질문 ② 라이브 서버 ③ 미리 정한 정답 ④ 두 지표 동시 — 넷을 다 박아서, "그냥 좋아 보인다"가 아니라 누가 다시 돌려도 같은 숫자가 나오게 만들었습니다.
눈으로 비교

같은 24문항 — 0 · 7 · 23

똑같은 24개 질문을 두 방식으로 돌렸습니다. 막대는 "정답을 상위 5위 안에 올린 개수"입니다.

기본 검색그냥 검색어만
0
기본 검색 + 구조파일명·태그 활용
7
GraphRAG · 개선 전기존 모델(MiniLM)
18
GraphRAG · 개선 후새 모델(bge-m3)
23
🔎 기본 검색은 왜 0인가?

옵시디언 기본 검색은 'MCP'라는 글자가 든 곳을 전부 찾아주지만 — "어느 게 더 관련 있나"를 판단하지 않습니다(순위가 없음). 그래서 흔한 단어일수록 정답이 묻혀요. 실제로 "MCP" 검색 = 1,279개 결과가 나오는데 정답은 357위에 묻혔습니다. '찾아지냐'는 되지만 '정답이 위로 오느냐'가 안 되는 거죠.

비유: 기본 검색은 'MCP'가 적힌 모든 카드를 책상에 쏟아내는 사서입니다 — 1,279장을 그냥 쌓아만 줘요. GraphRAG는 그 카드들을 "질문과 얼마나 관련 있나"로 줄 세워 맨 위 5장을 건네는 사서입니다.

공정하게: 기본 검색이 나쁜 도구라는 게 아닙니다. 파일명·태그를 정확히 알 때는 즉시 여는 1급 도구예요(구조를 활용하면 7개까지). 다만 "그게 어디 있더라" 같은 의미·막연한 질문엔 약합니다. 우열이 아니라 용도예요.

검색 경로

경로별로 — 뭘 어떻게 쟀나

"기본 검색 0, GraphRAG 23"이 어떻게 갈렸는지 — 두 경로가 같은 질문에 각각 무슨 일을 하는지를 실제 측정값으로 해부합니다.

왼쪽 기본 검색은 카드를 순위 없이 쏟아두고, 오른쪽 GraphRAG는 4채널이 찾아 깔때기로 합산 후 검사원이 상위 5장으로 재정렬
두 경로 — 기본 검색은 카드를 쏟아만 두고(순위 없음), GraphRAG는 4채널로 찾아 합산·재정렬해 상위 5를 가린다
📂 경로 1 — 기본 검색(옵시디언): 두 방식으로 쟀다

같은 24질문을 옵시디언 기본 검색에 넣되, 두 가지로 측정했습니다:

  • 그냥(raw) — 검색이 준 순서 그대로. 순위 판단이 없어 정답이 한참 밑에. → 0/24
  • 구조 가중(struct) — 결과를 "파일명에 질문어가 들었나 + 목차(MOC) 문서인가"로 다시 줄 세움. → 7/24
질문검색 결과 수그냥(raw) 순위구조 가중 순위
MCP1,279개357위 ✗1위 ✓
김재경812개745위 ✗1위 ✓
GraphRAG786개164위 ✗1위 ✓
얼룩소 아카이브674개78위 ✗1위 ✓
프롬프트 엔지니어링550개30위 ✗1위 ✓

→ 정답은 결과 안에 있긴 한데 수백~천 개 중에 묻혀 있어요(그냥 = 전부 5위 밖 = 0/24). 파일명·목차 구조로 다시 줄 세우면 7개는 1위로 올라옵니다 — 우리 볼트의 작명·MOC 규율이 '순위'를 대신 메운 것(뒷장 "그래도 먹히는 이유"). 나머지 17개는 구조로도 못 잡아요 — "RAG와 GraphRAG의 차이"처럼 의미·관계를 묻는 질문이라, 바로 여기서 GraphRAG가 필요해집니다.

🔀 경로 2 — GraphRAG: 4채널이 각각 뭘 가져오나

GraphRAG는 한 질문을 4개 채널이 동시에 검색합니다. "프롬프트 엔지니어링" 질문에 각 채널이 실제로 올린 결과예요(라이브 trace):

① 의미 채널 (dense)

뜻으로 — "옵시디언"(0.79)·"실험보고서"(0.78)·"Codex-CLI-가이드"(0.63). 단어가 안 겹쳐도 뜻이 가까운 걸 가져와요(가끔 엉뚱한 것도).

② 단어 채널 (sparse)

글자로 — "프롬프트엔지니어링"·"프롬프트-엔지니어링-핵심원칙"·"…-한계". 단어가 그대로 든 노트.

③ 개념 채널 (entity)

개념으로 — "컨텍스트-엔지니어링"(0.88)·"컨텍스트윈도우-하네스엔지니어링"(0.88). 연관된 개념 노트.

④ 분해 채널 (decomposed)

복잡한 질문을 작은 질문들로 쪼개 각각 검색(이 질문은 단순해서 비어 있음).

→ 네 채널 결과를 RRF로 공정하게 합산(여러 채널이 공통으로 올린 걸 위로) → 재정렬(검사원=cross-encoder)이 질문과 가장 잘 맞는 걸 다시 골라 → 최종 상위 5. 그래서 의미 채널이 잘못 올린 "옵시디언" 같은 잡음은 걸러지고, 단어·개념 채널이 받친 진짜 정답이 위로 옵니다.

차이의 핵심: 기본 검색은 "글자 든 걸 다" 쏟고 끝(순위 없음). GraphRAG는 4가지 눈으로 찾아 → 합산 → 재정렬까지 해서 "정답을 맨 위로" 올립니다. 같은 질문, 다른 경로 = 0 vs 23.
핵심

18 → 23, 어떻게 올렸나

설정값(채널 가중치)만으로는 18이 천장이었습니다. 검색 엔진의 핵심 부품(의미 모델)을 더 똑똑한 것으로 교체하고, 벤치 정답 자체의 오류를 바로잡으니 23까지 올랐어요. 세 단계로:

① 18 → 20

더 똑똑한 의미 모델

의미를 좌표로 바꾸는 모델을 옛것(MiniLM)에서 한국어·다국어에 강한 새 모델 bge-m3로 교체하고 채널 합산 방식을 손봤습니다. 검색 자체가 18→20.

② 과적합 아님

전혀 다른 48문항으로도 검증

"24문항에만 맞춘 꼼수 아니냐"를 막으려고, 겹치지 않는 48개 독립 질문으로도 측정했습니다 → 9 → 15 동반 상승, 하나도 안 깎임. 특정 문제집 답을 외운 게 아니라 전체 실력이 늘었다는 증거.

③ 20 → 23

틀린 건 검색이 아니라 정답이었다

원래 '놓침' 6개 중 3개(Q07·Q08·Q21)는 검색이 더 나은 노트를 1위로 올렸는데 우리가 적어둔 정답이 좁았던 것. 정답 정의를 바로잡으니 23.

🎯 정직하게 — 남은 1개(Q09): 'Anthropic 안전연구' 질문은 옳은 노트(Claude-Mythos-RSP-안전평가)를 정답에 추가해도 여전히 상위 5위에 못 올렸습니다 = 진짜 검색 약점. 정답을 끼워맞춰 24로 만들 수도 있었지만, 1개는 정직하게 miss로 남겼습니다 — 점수 부풀리기를 하지 않았다는 증거예요. (이게 23/24를 믿을 수 있는 핵심입니다.)
⚖️ 속도는 trade-off

새 모델이 더 무거워서 속도는 조금 느려집니다(테스트 측정 약 0.15초 → 0.23초). 정확도(18→23)를 위해 속도를 조금 내준 셈 — 그래도 0.23초라 체감은 어렵습니다.

라이브 반영: 이 엔진은 실제 검색에 이미 켜져 동작 중입니다(되돌리기 준비 완비 후 적용). 위는 전부 측정값.
공정성

기본 검색은 왜 '그래도' 먹히나

순위도 없는 기본 검색이 24문항 중 7개나 잡는 건 도구가 좋아서가 아니라, 우리가 노트를 구조적으로 잘 정리해뒀기 때문입니다. 4가지 구조가 받쳐줘요 — 전부 실측.

📛 ① 파일명이 주제를 담는다

노트 이름에 핵심 주제어를 그대로 넣는 규율(예: MCP-생태계-MOC·GraphRAG-Theory-MOC). 그래서 결과를 '파일명에 질문어가 든 것' 우선으로 다시 줄 세우면 정답이 위로 올라옵니다.

🏷️ ② frontmatter 별칭·태그

노트 윗부분에 영문/한글 별칭(aliases)과 태그를 달아둡니다. 영어로 검색해도 한글 노트가, 한글로 검색해도 영문 개념이 걸려요. ("MCP" 노트 별칭 = "Model Context Protocol" 등.)

🗂️ ③ MOC 목차 허브 · 🔗 ④ wikilink 그물

주제마다 'MOC' 목차 노트를 둬 관련 문서를 모으고, 노트끼리 촘촘히 링크로 엮습니다. 그래서 "이 노트로 뭐가 연결됐나"를 즉시 답할 수 있어요 — 이건 기본 검색(CLI)이 GraphRAG보다 오히려 잘하는 영역입니다.

정리: 기본 검색의 약점(순위 없음)은 우리 볼트의 구조 규율(작명·별칭·MOC·링크)이 상당 부분 메웁니다. 단순 조회·구조 질문엔 즉답, "그게 어디 있더라" 의미 질문은 GraphRAG가 필요 — 그래서 둘은 경쟁이 아니라 상보입니다.

마무리

한 장 요약

한 줄: 더 똑똑한 의미 모델 + 정직한 정답 교정으로 18 → 23/24. 24문항에만 맞춘 게 아니라 별도 48문항에서도 9→15로 동반 상승(과적합 아님). 못 잡은 1개는 정직하게 남김.

무엇을 쟀나 — 같은 24개 질문에 정답이 상위 5위 안에 들어오는 비율. 사람이 실제로 보는 건 위 몇 개니까요.

왜 올랐나 — ① 의미 모델 교체(bge-m3) ② 별도 48문항 검증(과적합 차단) ③ 잘못 적은 정답 교정. 셋이 합쳐 23.

왜 믿나 — 끝까지 못 잡은 1개(Q09)를 끼워맞추지 않고 남겼습니다. 24가 아니라 정직한 23인 이유.

기본 검색과의 관계 — 우열이 아니라 용도. 정확히 알면 기본 검색, "그게 어디 있더라"는 GraphRAG.

🔍 검색 벤치 — 18에서 23으로 · 본편 「GraphRAG 검색 원리」의 짝꿍
근거 raw: gr_goldfix_24q.json(개선 후 23/24·mrr 0.81) · broadval-48q(광범위 9→15) · 측정 = 라이브 서버 24문항×3회