Skip to content

Semantic Hints KO

teamswyg edited this page Sep 30, 2026 · 3 revisions

Semantic hint experiment 01 — 매우 싼 주장으로 탐색 돕기

상태: 연구용. 기존 난이도 라우터·3진 QAT와 독립된 실험이며 기본 동작을 바꾸지 않는다.

타겟을 한 문장으로

이미 접근 권한이 있는 여러 저장소의 근거를 찾는 에이전트가, 비싼 읽기·검증을 하기 전에 확인 순서를 정하도록 돕는 초소형 힌트 공급기.

가상의 Harbor 작업 공간에는 64개 저장소가 있고, 각 저장소에 공개 가능한 요약과 근거 조각 ID가 있다. 요청은 “중복 결제를 막는 구현을 찾아라”이다. 출력은 “repo-17의 evidence-4가 이 요청에 관련될 수 있다”라는 검증 가능한 후보 주장이다. 다음 단계가 해당 근거를 읽고 확인한다. 모델이 결제 코드를 수정하거나 최종 저장소·LLM을 결정하지 않는다.

첫 구현의 작은 시험장은 16개 가상 근거 조각이다. 64→256→1024 후보 확장은 별도 측정이다. 16개 시험 결과를 64개 시스템의 성능으로 보고하지 않는다.

‘주장 모델’의 의미

자유로운 문장 생성 대신 제한된 술어와 근거 참조를 출력한다.

{
  "predicate": "may_contain_evidence",
  "candidate_id": "repo-17",
  "evidence_ids": ["evidence-4"],
  "snapshot_id": "catalog-version",
  "rank_score": 0.7,
  "status": "unverified",
  "reason_code": "semantic_candidate"
}

위 JSON은 인터페이스 설계 예시이며 현재 CLI의 출력 형식은 아니다. 점수는 진실 확률이 아니다. 조회 요청·카탈로그 버전·권한 범위가 바뀌면 재사용하지 않는다. 힌트 미제공은 거짓 판정이 아니며, 후보를 영구 제거하지 않는다. 근거 ID도 검증 전에는 관련성을 보장하지 않는다.

도메인은 우선 저장소/코드 근거 검색 하나다. 이후 may_need_joint_change(함께 바뀔 가능성), may_be_decomposable(분리 가능성), may_need_stronger_model(추가 검증 필요성)은 각각 별도 라벨·검증기·실험으로 다룬다. 진실 판별, 권한 판단, 코드 실행 권한은 목표에서 제외한다.

동작과 실패 비용

요청 → 싸게 후보 정렬 → 상위 후보 검증 → 실패하면 아직 안 본 후보 → 전체 탐색 또는 기존 LLM 경로.

검증 예산이 끝나면 incomplete로 종료하며 ‘없음’이라고 단정하지 않는다. 모든 후보를 검사했다는 사실과 현실 세계에 정답이 없다는 판단도 다르다. 잘못된 힌트는 검증 비용을 더 쓴다. 맞는 후보를 뒤로 밀면 응답 지연이 늘어난다. 빠른 종료가 필요한 서비스는 별도 누락 허용 계약을 정해야 한다.

블룸필터에서 빌리는 것은 ‘싼 앞단으로 비싼 뒷단을 돕는다’는 구성이다. 학습 점수 자체에는 블룸필터의 false-negative 없음 보장이 없다. Learned Bloom Filter 논문의 백업 필터도 알려진 집합의 누락을 보완하는 장치다. 열린 의미 검색에 그 보장을 그대로 옮길 수 없다. 전체 후보를 보존하는 이번 fallback은 주어진 유한 목록과 정확한 검증기 안에서만 누락 방지를 논할 수 있다.

실험을 분리하는 방법

경로 질문 이번 단계
A 단순 토큰 일치만으로도 검증 횟수를 줄이는가? Go 기준선 실행
B 작은 비트 특징은 충돌·속도·크기 교환이 유리한가? 256/4096 bit 비교; 학습 아님
C 인코더 없는 3진 학습기가 A/B보다 의미 일반화를 개선하는가? 새 학습/검증/최종 가족 고정 후 QAT
D Laya/기존 QAT를 선택적으로 호출하면 비용 대비 도움이 되는가? 독립 후속 비교; 2.5GiB 인코더 비용 포함
E 에이전트가 실제 동일 품질로 LLM 사용을 줄이는가? 공개 실제 작업의 쌍대 비교; 별도 검증

A/B 결과를 C의 학습 결과나 E의 토큰 절감이라고 부르지 않는다. 비트 특징은 단어 해싱이며 의미 인코더가 아니다. 3진이 FP32/INT8보다 느리거나 질이 낮으면 채택하지 않는다.

이번에 고정하는 측정 계약

합성 영어 16개 도메인 × 직접 표현/다른 표현/부정·반대 요청 3종, 정답 없음 4개. 단일 작성자 개발 자료이며 독립 최종 세트가 아니다. 부정 표현은 전역 문장 이해의 대용 지표일 뿐이다. 모든 순위 방법에 동일한 요청과 라벨을 사용한다. 후보 ID는 순위 함수에 목표 정보를 주지 않는다.

  • 후보 순서: 원래 순서, 고정 난수 순서, 정확 토큰 교집합, 해시 비트 교집합 256/4096.
  • 정답 후보 rank, recall@1/@4, 최초 정답까지 검증 횟수, 정답 없는 요청의 전체 탐색 비용, 최악 비용을 따로 기록한다.
  • 정답은 사람이 작성한 인덱스를 읽는 oracle다. 실제 verifier, LLM, 코딩 성공률을 측정하지 않는다. 모든 후보에 똑같은 검증 비용을 가정한다. 원래 순서 대비뿐 아니라 강한 비학습 기준선 대비를 보고한다.
  • 토큰화·점수·정렬 포함 warm query 지연과 allocations를 측정한다. 카탈로그 준비는 제외하고 명시한다. 전체 프로세스 최대 RSS는 OS 도구로 따로 측정한다. pprof는 Go 힙/CPU이며 GPU 메모리를 뜻하지 않는다.
  • 반복 동일 입력에서 점수가 달라지지 않는 것을 확인한다. 독립 투표로 합산하지 않는다. 실제 반복 배치는 새로운 근거/후보/가설을 평가해야 의미가 있다.

후속 C 목표(미달성): 모델 파일 ≤64KiB, 예측 상태 ≤1MiB, 전체 프로세스 RSS ≤64MiB, 64후보 warm p95 ≤1ms, 별도 최종 세트 recall@4 ≥95%, 정확 토큰 기준선보다 검증 횟수 ≥20% 감소. 튜닝 도중 기준을 낮추지 않고 실패도 남긴다. 언어/가족별 회귀와 fallback 비용을 함께 판단한다.

총비용 = 특징 준비 + 모든 힌트 호출 + 모든 검증 + fallback + 최종 LLM. 총비용이 감소하지 않으면 작은 모델이 빨라도 실패다. 실제 LLM 비용은 실사용 쌍대 검증 전까지 미측정이다.

학습 설계와 모델 관계

C의 입력은 요청/후보의 고정 크기 문자·단어 특징, 출력은 후보 관련성 순위다. 양성은 근거가 실제 요구를 만족하는 후보, 어려운 음성은 같은 어휘를 쓰지만 반대 조건·다른 API·오래된 버전·잘못된 저장소인 후보다. 동의어/한국어/영어/혼합 코드 식별자/정답 없음/다중 근거 요구를 구분한다. 라벨은 큰 모델의 주장만으로 확정하지 않고 근거와 독립 검증으로 만든다.

학습/검증/보정/최종 세트는 저장소 및 의미 가족 단위로 분리하고 중복/변형 누출을 검사한다. 개발 데이터로 특징과 기준을 정한 뒤 신규 최종 세트를 봉인한다. 최종 세트를 보고 개선했다면 다음 사이클에서 신규 최종 세트를 만든다. 최소 2개 seed, 같은 split과 예산의 FP32/INT8/PTQ/QAT 대조군, 오류 목록을 보존한다.

처음에는 관련성 모델 하나와 비학습 기준선만 둔다. Laya는 선택적 교사/비교군이며 자식 모델이 반드시 인코더를 상속할 필요는 없다. 기존 난이도 모델과 새 힌트 모델은 서로 다른 타겟의 형제 실험이다. 교사 점수는 학습 보조 신호이고 정답 증거는 아니다. 도메인별 자식/형제 모델 확장은 단일 모델 실패와 라벨 분리 효과가 입증될 때만 한다.

반복·병렬 실행과 자원

같은 입력을 100번 호출하면 대부분 같은 오답도 100번 나온다. 요청+카탈로그 버전+모델 버전+권한 범위를 캐시 키에 포함하고 중복 검증을 제거한다. 단일 호출 지연뿐 아니라 1/10/100/1000회 배치 총비용을 측정한다. 키에 private 원문을 공개 로그로 남기지 않는다.

인코더 없는 실험은 CPU로 시작한다. 작은 헤드 때문에 GPU 인코더를 중복 상주시킬 이유가 없다. GPU 병렬 학습은 최대 2작업을 예비 측정하고 메모리 압박·swap 증가·처리량 악화를 확인하면 1작업으로 줄인다. 학습과 최종 성능 벤치마크는 동시에 돌리지 않는다. GPU가 비어 보이는 것과 실제 메모리/처리량 여유는 구분한다.

배포·기록

코드/계획/공개 합성 결과는 GitHub, 실제 신규 학습 모델은 CI·라이선스·해시 검증 후 새 Hugging Face 버전으로 보낸다. 이번 A/B는 학습된 모델이 없으므로 모델 릴리스를 만들지 않는다. 기존 QAT 릴리스의 용도를 소급 변경하지 않는다. 공개 fixture 외 실제 사내 저장소/사용자 요청을 배포하지 않는다.

근거

Measured baseline / 기준선 결과 · Issue #19 · PR #20

PDCA 02: BM25 + bounded hints

Encoder-free learning 01: INT8 / ternary

Clone this wiki locally