AI 세부 실습 07 - 임베딩 기초와 벡터 검색

최대 1 분 소요

임베딩 기초와 벡터 검색

이 글은 다음 원본 실습 파일을 기준으로 정리합니다.

17_20250421_01.py
17_20250421_01_embedding.py
17_20250421_01_embedding02.py
17_20250421_01_embedding03_chunk_and_embedding.py

17번 실습은 RAG로 가기 전 가장 중요한 개념인 임베딩을 다룹니다.

임베딩이란?

임베딩은 문장이나 단어를 숫자 배열로 바꾸는 작업입니다.

"고양이는 소파에서 잔다"
-> [0.12, -0.04, 0.33, ...]

컴퓨터는 문자의 의미를 직접 이해하지 못합니다. 그래서 AI 모델을 사용해 의미를 숫자 벡터로 표현합니다.

왜 숫자로 바꿀까?

숫자로 바꾸면 문장끼리의 유사도를 계산할 수 있습니다.

예를 들어 다음 두 문장은 의미가 비슷합니다.

고양이가 잠을 잔다.
고양이가 자고 있다.

임베딩 벡터로 바꾸면 두 문장의 위치가 가까워집니다.

청크

긴 문서를 한 번에 임베딩하기 어렵기 때문에 작은 조각으로 나눕니다.

chunk_size = 500
chunks = [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]

이 조각을 청크라고 부릅니다.

임베딩 생성 함수

강의 코드의 핵심 구조는 다음과 같습니다.

from openai import OpenAI
import numpy as np

client = OpenAI()

def get_embedding(text):
    response = client.embeddings.create(
        input=text,
        model="text-embedding-ada-002",
    )
    return np.array(response.data[0].embedding, dtype=np.float32)

문장을 넣으면 벡터가 반환됩니다.

벡터 검색

질문도 임베딩으로 바꾼 뒤, 문서 청크 임베딩과 비교합니다.

질문 벡터
-> 문서 벡터들과 거리 계산
-> 가장 가까운 청크 선택

이 과정을 빠르게 해 주는 대표적인 도구가 FAISS입니다.

정리

17번 실습은 RAG의 기초입니다. 임베딩을 이해하면 “AI가 문서에서 관련 내용을 어떻게 찾는지” 이해할 수 있습니다.

댓글남기기