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

9차시. 임베딩 이해

4. 실습 ① — 벡터를 직접 눈으로 보기

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

개념만으로는 와닿지 않습니다. 실제 숫자를 봅시다.

📝 src/embed_look.py

출력
from langchain_openai import OpenAIEmbeddings
from dotenv import load_dotenv
load_dotenv()

emb = OpenAIEmbeddings(model="text-embedding-3-small")

vec = emb.embed_query("환불 규정이 궁금합니다")

print("차원 수 :", len(vec))
print("앞 10개 :", [round(v, 4) for v in vec[:10]])
print("최댓값  :", round(max(vec), 4))
print("최솟값  :", round(min(vec), 4))

실행 결과
────────────────────────────────
차원 수 : 1536
앞 10개 : [0.0212, -0.0341, 0.0087, 0.0455, -0.0129,
           0.0203, -0.0518, 0.0091, 0.0362, -0.0247]
최댓값  : 0.1183
최솟값  : -0.0994

💡 이 숫자들의 의미는?
솔직히 말씀드리면, 사람은 알 수 없습니다.
0.0212가 무엇을 뜻하는지,
3번째 숫자가 어떤 의미 축인지
아무도 해석할 수 없습니다.
하지만 괜찮습니다.
우리에게 필요한 건 "두 벡터가 가까운가"뿐이고,
그건 계산으로 알 수 있으니까요.

실습 코드 · 09/embed_look.py

실습 코드: 실습/src/09/embed_look.py · 위의 원본 PDF 9차시 9쪽 「4️⃣ 실습 ① — 벡터를 직접 눈으로 보기」과 이어집니다.

Python
# ============================================================
# 9차시 | PPT: 09차시_임베딩이해.pptx
# 역할: 질문 한 문장을 embedding(벡터)으로 바꾸고 앞부분만 출력
# 입력: 문장 "환불 규정이 궁금해요"
# 출력: 차원 수, 앞 10개 숫자를 소수 4자리로 반올림한 목록
# 흐름:
#   문장 -> OpenAIEmbeddings.embed_query() -> 숫자 리스트 -> print
# ============================================================
# embedding: 문장을 숫자 목록으로 바꾼 값. 비슷한 뜻은 비슷한 숫자가 됩니다.
# vector: 그 숫자 목록 자체. 길이를 차원수라고 부릅니다.

from dotenv import load_dotenv
from langchain_openai import OpenAIEmbeddings

# .env의 OPENAI_API_KEY를 읽은 뒤, 8차시와 같은 임베딩 모델을 준비합니다.
load_dotenv()
emb = OpenAIEmbeddings(model="text-embedding-3-small")

# embed_query는 네트워크로 문장을 보내 숫자 리스트를 받아 옵니다.
vec = emb.embed_query("환불 규정이 궁금해요")

# text-embedding-3-small은 어떤 문장을 넣어도 길이가 1536입니다.
print(f"차원수 : {len(vec)}")
# 1536개를 다 찍으면 화면이 넘치므로 아래 줄은 꺼 두었습니다.
# print(f"임베딩 결과 : {vec}")

first_10 = []

# 앞 10개만 소수 넷째 자리로 줄여서 봅니다. 숫자 하나하나의 뜻은 사람이 해석할 수 없습니다.
for value in vec[:10]:
    first_10.append(round(value, 4))
print(f"임베딩 결과(앞 10개) : {first_10}")

실행 결과 샘플 (교안 기록. API 키가 필요한 코드는 키 없이 맞춘 예시이고, 모델의 답은 실행할 때마다 달라집니다)

출력
===== 실행 결과 샘플 =====
실행: cd 실습/src/09
      python embed_look.py
예시 출력 (API 키 필요, 실행하지 않음)
차원수 : 1536
임베딩 결과(앞 10개) : (앞 10개 숫자는 기록되지 않아 적지 않음)
(1536은 text-embedding-3-small의 벡터 길이입니다. 유사도 점수는 이 파일에 없습니다.)

코드 해설

질문 한 문장을 embedding(벡터)으로 바꾸고 앞부분만 출력입니다. 입력은 문장 "환불 규정이 궁금해요"이고, 출력은 차원 수, 앞 10개 숫자를 소수 4자리로 반올림한 목록입니다.

주석에 적힌 흐름입니다.

출력
문장 -> OpenAIEmbeddings.embed_query() -> 숫자 리스트 -> print

코드 앞에서 고정해 두는 말입니다.

  • embedding: 문장을 숫자 목록으로 바꾼 값. 비슷한 뜻은 비슷한 숫자가 됩니다.
  • vector: 그 숫자 목록 자체. 길이를 차원수라고 부릅니다.

함수로 나누지 않고 위에서 아래로 실행됩니다.

  • vec = emb.embed_query("환불 규정이 궁금해요") — embed_query는 네트워크로 문장을 보내 숫자 리스트를 받아 옵니다.
  • first_10 = [] — print(f"임베딩 결과 : {vec}")

파일 맨 아래 실행 결과 샘플 주석은 실행되지 않습니다. 화면 출력은 다음 절에 다시 적어 두었습니다.

← 이전 절9차시 · 3. 코사인 유사도 — 가까움을 재는 자다음 절 →9차시 · 5. 실습 ② — 유사도 직접 재보기