27

실습: 임베딩 모델 비교 실험

Day 2: 청킹 & 임베딩

학습 목표
  • 텍스트를 벡터로 바꾸고 코사인 유사도로 문서를 검색할 수 있다
  • 낱말이 겹치는 검색과 의미를 보는 검색의 차이를 실측으로 구분할 수 있다
  • 관련 있음과 없음을 가르는 임계값을 자기 데이터에서 정할 수 있다

임베딩 검색 실험

오늘 본문은 "의미가 비슷하면 벡터가 가깝다"고 말했다. 그 말이 맞는지, 그리고 무엇을 안 쓰면 틀리는지를 직접 잰다.


환경 설정

pip install numpy
pip install openai        # 실제 임베딩을 부를 때만 필요

실습 순서

  1. 기본값인 MODE = "lexical"로 그대로 실행한다. 이때 벡터는 글자 2-gram의 겹침만 담는다. 의미가 들어갈 자리가 없다.
  2. 화면 마지막에 나오는 세 숫자를 적는다.
    • A: 문서의 낱말을 그대로 쓴 질의의 Top-1 적중률
    • B: 같은 것을 다른 말로 물은 질의의 Top-1 적중률
    • C: 관련 없는 질의의 최고 유사도
  3. MODE = "openai"로 바꾸고 OPENAI_API_KEY를 설정해 다시 돌린다.
  4. 세 숫자를 나란히 적고, 무엇이 달라졌고 무엇이 그대로인지 한 문단으로 쓴다.

키가 없다면 3번은 건너뛰고 A·B·C만 적는다. 재보지 않은 것을 재본 것처럼 쓰지 않는 것이 이 실습의 또 다른 목표다.


함께 볼 것

같은 대비를 Embedding Explorer에서 화면으로 볼 수 있다. 그 시뮬레이터의 Mock 모드도 여기와 같은 방식(한국어 2-gram 해싱)으로 만들어져 있다. Real 모드로 바꾸면 실제 임베딩 모델이 붙는다.

에디터 로딩 중...
힌트 보기
  • MODE = "openai"로 바꾸려면 OPENAI_API_KEY 환경변수가 필요하다. 키를 코드에 적지 않는다.
  • 유사도 임계값에 정답은 없다. 관련 없는 질의를 몇 개 넣어 그때 나오는 최고 유사도를 재고, 그보다 조금 위를 기준선으로 잡는 것이 시작점이다. 모델을 바꾸면 다시 재야 한다.
  • zlib.crc32는 실행할 때마다 같은 값을 준다. 파이썬 내장 hash()는 문자열에 대해 프로세스마다 달라지므로 재현이 필요한 곳에 쓰면 안 된다.
  • BGE-M3 같은 다국어 모델은 sentence-transformers로 로컬에서 쓸 수 있다: SentenceTransformer("BAAI/bge-m3"). 내려받는 용량이 크므로 미리 준비한다.
정답 보기
에디터 로딩 중...
AI로 학습하기 — 꿀팁
임베딩 코사인 유사도 계산 검증AI 학습 팁

AI에게 임베딩 모델 비교 실험 코드의 코사인 유사도 계산 및 정규화 로직을 리뷰받아, 차원 불일치·벡터 정규화 누락·배치 처리 오류를 사전에 잡으세요.

이 임베딩 모델 비교 실험 코드를 리뷰해줘. OpenAI 임베딩 벡터의 L2 정규화 누락 여부, 코사인 유사도 공식 구현 오류, 여러 임베딩 모델 출력 차원이 다를 때 비교 시 생기는 문제를 점검하고 개선안을 제시해줘.
이 팁이 도움이 됐나요?
실습 — 직접 해보기
Embedding Explorer
먼저 기본값인 Mock 모드에서 청크 원문을 그대로 질의로 넣어 보고, 그다음 Real(Gemini) 모드로 바꿔 같은 질의를 다시 넣는다. 볼 것은 '서보 에러'와 '서보 알람'처럼 낱말이 다르고 뜻이 같은 두 문장의 유사도가 모드에 따라 어떻게 달라지는가다. 의심할 것: Mock 모드가 화면에 적는 모델 이름은 계산에 쓰이지 않는다. 모델을 바꿔도 값이 거의 그대로라면 시드만 바뀐 것이다.
용어