From 59eeec2117e1c57e63e7bbdacd9be874e89c1b12 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Sat, 21 Mar 2026 15:56:17 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EB=B2=A1=ED=84=B0=20=EA=B2=80=EC=83=89?= =?UTF-8?q?=20=EC=8B=A4=ED=8C=A8=20=EC=9B=90=EC=9D=B8=20=ED=99=95=EC=A0=95?= =?UTF-8?q?=20=E2=80=94=20=EC=BF=BC=EB=A6=AC-=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=EC=9E=84=EB=B2=A0=EB=94=A9=20=EA=B1=B0=EB=A6=AC=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=8B=A4=EC=B8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 옐로펀치 MOU: 인덱싱 완료, 임베딩 정상, 문서간 유사도 0.8+ - 쿼리 임베딩과 문서 청크 간 cosine 거리가 멀어 top-50에도 미등장 - Gemini 비대칭 임베딩(RETRIEVAL_QUERY vs DOCUMENT)의 한계 확인 - keyword 보완 실패와 합쳐 이중 실패 구조 확정 Co-Authored-By: Claude Opus 4.6 (1M context) --- ...grounding_실패_원인확정_리서치.md | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/journey/research/rag/260321_하이브리드검색_keyword_recall0_및_grounding_실패_원인확정_리서치.md b/journey/research/rag/260321_하이브리드검색_keyword_recall0_및_grounding_실패_원인확정_리서치.md index 2169cdc..ddfda39 100644 --- a/journey/research/rag/260321_하이브리드검색_keyword_recall0_및_grounding_실패_원인확정_리서치.md +++ b/journey/research/rag/260321_하이브리드검색_keyword_recall0_및_grounding_실패_원인확정_리서치.md @@ -123,7 +123,7 @@ hybrid 모드에서 `relevance_score`가 RRF 점수로 대체된다. RRF 점수 | keyword recall = 0 (원인1) | `simple` 토크나이저가 한국어 조사 분리 불가 → tsv 토큰과 tsquery 불일치 | DB/인덱스 | | keyword recall = 0 (원인2) | `keyword_search()` 단독 호출 시 threshold 0.35 적용 → ts_rank 최대 0.089로 전부 필터링 | 검색/점수 | | RRF score ≪ threshold | RRF 점수(0.01~0.03)와 threshold(0.35)의 스케일 불일치 | 검색/점수 | -| 인덱싱 문서 있는데 검색 실패 | 벡터 임베딩이 해당 청크를 근접 이웃으로 잡지 못함 + keyword 보완 불가 | 검색 | +| 인덱싱 문서 있는데 검색 실패 | 쿼리 임베딩과 문서 청크 임베딩 사이의 cosine 거리가 멀어 top-50에도 미등장 (아래 §4 참조) + keyword 보완 불가 | 검색/임베딩 | | 3건 grounding 미진입 | intent/domain 마커에 일반 질문 패턴 미포함 | 라우팅 | ## 해결 방향 (구현은 별도 계획) @@ -147,11 +147,22 @@ hybrid 모드에서 `relevance_score`가 RRF 점수로 대체된다. RRF 점수 | 한국어 형태소 분석 | mecab + textsearch_ko | 근본 해결 | 확장 설치 필요 (51123 서버), PG14 EOL 고려 | | 하이브리드 보완 | ILIKE fallback | 간단 | 인덱스 미사용, 느림 | -### 벡터 검색 품질 개선 +### 4. 벡터 검색 품질 — 인덱싱 문서 있는데 검색 실패의 직접 원인 확정 -- 200개 인덱싱 대상에 옐로펀치 협약/오늘전통 문서가 포함되어 있는지 확인 필요 -- 포함되어 있다면 청킹 경계에서 핵심 내용이 잘리는지 확인 -- 임베딩 모델(Gemini 768d)의 한국어 고유명사 처리 능력 검증 +옐로펀치 MOU(`TalkFile_MOU_옐로펀치X컴퍼니엑스- 25.01.23.pdf.pdf`)를 지표로 확인: + +- **인덱싱 여부**: completed, doc_id `b7116f6a`, 청크 1개 (2,703자), 임베딩 존재 +- **자기 유사도**: self-cosine = 1.000 (임베딩 정상) +- **다른 MOU와 유사도**: 0.81~0.91 (같은 문서군끼리는 근접) +- **쿼리 "옐로펀치 컴퍼니엑스 업무협력협약서"로 검색**: threshold=0.0, limit=50에서도 **미등장** + +직접 원인: **쿼리 임베딩(짧은 질문)과 문서 청크 임베딩(2,703자 긴 본문)의 cosine 거리가 멀다.** + +이는 Gemini Embedding 2가 task_type `RETRIEVAL_QUERY` vs `RETRIEVAL_DOCUMENT`로 비대칭 임베딩을 생성하는데, 짧은 한국어 고유명사 쿼리와 긴 법률/계약 문서 사이의 의미 거리가 크기 때문이다. 문서끼리(document-document)는 유사하지만 쿼리-문서 간은 다른 공간에 놓임. + +keyword 검색이 이를 보완해야 하지만, 위 §1의 이유로 keyword도 작동하지 않아 이중 실패. + +### 벡터 검색 품질 개선 방향 ### 라우팅 마커 확장