RAG2026-5일9차시 · 임베딩 이해11 / 19← 이전목차다음 →MetaContents

9차시. 임베딩 이해

8. 임베딩 관점에서 검색 실패 진단하기

출처: 원본 PDF 09차시_임베딩이해.pdf 16쪽 · 쪽 그림 16쪽

8차시 과제에서 모은 실패 사례를 임베딩으로 분석해봅시다.

📝 왜 못 찾았는지 확인하는 코드

Python
def why_failed(question, chunks, top=5):
    # 질문과 모든 조각의 유사도를 재서 순위를 본다
    qv = np.array(emb.embed_query(question))
    scored = []
    for c in chunks:
        cv = np.array(emb.embed_query(c.page_content))
        # 코사인 유사도 = 내적 ÷ (길이 × 길이)
        dot_product = np.dot(qv, cv)
        length1 = np.linalg.norm(qv)
        length2 = np.linalg.norm(cv)
        s = float(dot_product / (length1 * length2))
        scored.append((s, c))

    # 점수 높은 순 정렬 (lambda 대신 이름 있는 함수 사용)
    def get_score(pair):
        return pair[0]
    scored.sort(key=get_score, reverse=True)

    print(f"질문: {question}")
    print("-" * 50)
    for s, c in scored[:top]:
        preview = c.page_content[:60].replace("\n", " ")
        print(f"{s:.3f}  [조각{c.metadata['chunk_id']}] {preview}...")
why_failed("반품하고 싶어요", chunks)

실행 결과 예시 (코드를 읽고 만든 예상 화면입니다. 실제 실행 결과, 특히 모델의 답은 다를 수 있습니다)

출력
질문: 반품하고 싶어요
--------------------------------------------------
0.493  [조각9] 교환 상품 불량의 경우 30 일 이내에 교환이 가능합니다. 이 경우 배송비는 당사가 부담합니다. 5. 보증 ...
0.481  [조각8] 4. 환불 및 교환 규정 환불 상품 수령 후 7 일 이내에 환불을 신청하실 수 있습니다. 단순 변심의 경우 ...
0.452  [조각7] 자동 모드에서는 내장된 먼지 센서가 실내 공기질을 감지하여 풍량을 자동으로 조절합니다. 필터 교체 알림 램프...
0.437  [조각0] 1 제품 사용 설명서 가정용 공기청정기 AP-3300 목차 1. 제품 개요 2. 설치 방법 3. 사용 방법 ...
0.398  [조각13] 처리됩니다. 필터 등 소모품은 무상 보증 대상이 아니며 별도로 구매하실 수 있습니다....

8-1) 결과 해석 방법

💡 상위 조각들을 보고 판단하세요
① 정답 조각이 1~3위에 있다면
→ 검색은 정상입니다. 생성(프롬프트) 문제입니다
② 정답 조각이 5~10위쯤 있다면
→ k값을 늘리면 해결됩니다 (11차시)
③ 정답 조각의 점수가 아주 낮다면
→ 질문과 문서의 표현 차이가 큽니다
→ 질의 재작성이 필요합니다 (30차시)
④ 정답 조각이 아예 이상하게 잘려 있다면
→ 분할 문제입니다. chunk_size를 조정하세요 (7차시)
이렇게 원인 단계를 좁혀가는 것이 RAG 디버깅입니다.

← 이전 절9차시 · 7. 임베딩 모델 고르기다음 절 →9차시 · 9. 자주 하는 오해