단위 2 / 11

임베딩 및 벡터 데이터베이스 로직

이득:

  • 임베딩은 의미 공간에서 텍스트를 벡터로 변환하고 비슷한 의미는 가까운 벡터라는 점을 이해합니다.
  • ANN 검색이 코사인 및 도트 유사성 측정항목과 함께 작동하는 방식 설명
  • 비용, 규모, 메타데이터 필터링 필요성을 기반으로 공통 벡터 데이터베이스 선택

RAG의 핵심은 하나의 질문입니다. "사용자의 질문과 가장 유사한 텍스트는 무엇입니까?" 컴퓨터는 문자 그대로가 아닌 숫자로 텍스트를 처리합니다. 그렇기 때문에 먼저 텍스트를 의미를 전달하는 숫자로 변환해야 합니다. 임베딩이란 텍스트를 해당 텍스트의 의미를 나타내는 일련의 숫자(벡터)로 변환하는 프로세스입니다. 이 단원을 마치면 임베딩 작동 방식, 유사성 측정 방법, 올바른 벡터 데이터베이스 선택 방법을 알게 됩니다.

임베딩: 의미를 좌표로 변환

임베딩 모델(특별히 훈련된 인공 지능)은 사용자가 제공한 텍스트를 예를 들어 1024개 숫자로 구성된 벡터로 변환합니다. 이 벡터를 다차원 공간의 좌표로 생각하십시오. 마법은 이렇습니다. 의미가 유사한 텍스트가 이 공간에서 긴밀한 좌표에 속한다는 것입니다.

간단한 예: "연차 휴가", "휴가 권리" 및 "연간 유급 휴가"는 서로 다른 단어를 사용하지만 의미는 동일합니다. 즉, 벡터가 서로 가깝습니다. "급여 계정"은 다른 문제입니다. 벡터가 멀기 때문입니다. 그래서 사용자는 "나의 휴가는 며칠 남았나요?"라고 묻습니다. 문의하시면 "휴일"이라는 단어는 포함되어 있지 않지만 "연차는 14일입니다"라고 적힌 문서도 찾을 수 있습니다. 이는 기존의 키워드 검색(단어와 정확히 일치하는 검색)이 수행할 수 없는 작업입니다.

팁: 임베딩을 '의미의 지문'으로 생각하세요. 동일한 의미를 지닌 두 문장의 지문은 유사하게 보입니다. 말이 달라도 말이죠.

중요한 규칙: 질문을 포함할 때 사용하는 모델은 문서를 포함할 때 사용하는 모델과 동일해야 합니다. 모델에 따라 공간이 달라집니다. 좌표가 비교할 수 없게 됩니다.

유사성을 측정하는 방법?

두 벡터가 얼마나 유사한지 측정하는 방법에는 여러 가지가 있습니다. 가장 일반적인 것은 코사인 유사성입니다. 두 벡터 사이의 각도를 측정합니다. 각도가 작으면(같은 방향을 가리키는 벡터) 유사성이 높습니다. 값은 -1과 1 사이입니다. 1에 가까움 = 매우 유사함.

기준

무엇을 측정하나요?

언제 선호되나요?

코사인

벡터 사이의 각도(방향)

가장 일반적인 것; 텍스트 의미 유사성의 기본값

내적

방향 + 크기 함께

벡터가 정규화되면 코사인과 동일한 결과를 제공합니다. 빠르다

유클리드(유클리드 거리)

좌표 간 직선 거리

일부 클러스터링 시나리오에서는 다음과 같습니다. 텍스트에서는 덜 사용됨

실제로 대부분의 임베딩 모델은 정규화된 벡터(크기가 1로 설정됨)를 생성합니다. 이 경우 코사인과 내적은 동일한 순서를 갖습니다. 결정이 마비되지 않도록 하세요: 코사인으로 시작하세요.

수백만 개의 벡터 중 하나씩 비교하는 것은 속도가 느립니다. 이것이 바로 벡터 데이터베이스가 ANN(Approximate Nearest Neighbor) 알고리즘을 사용하는 이유입니다. ANN은 "정확히 가장 가까운" 대신 "거의 정확한 가장 가까운"을 매우 빠르게 찾습니다. 예를 들어 HNSW라는 메서드는 천만 개의 벡터에 대해서도 몇 밀리초 안에 결과를 반환할 수 있습니다. 정확성을 조금만 희생하더라도 엄청난 속도를 얻을 수 있습니다.

벡터 데이터베이스는 무엇을 합니까?

벡터 데이터베이스는 한 번에 세 가지 작업을 수행합니다. (1) 벡터를 저장하고, (2) 쿼리 벡터와 가장 유사한 벡터를 빠르게 찾고, (3) 각 벡터 옆에 있는 메타데이터를 기준으로 필터링합니다. 메타데이터는 소스 파일, 날짜, 부서, 개인 정보 보호 수준 등 해당 부분에 첨부하는 태그입니다. 메타데이터 필터링은 엔터프라이즈 RAG에서 매우 중요합니다. "재무부서의 2025년 문서에서만 검색" 등의 제한을 설정할 수 있어야 하기 때문입니다.

# 벡터 데이터베이스에 등록 (개념적)vektor_db.add( id="izin-politikasi-parca-3", vektor=embed("연간 유급 휴가는 14일입니다..."), text="연간 유급 휴가는 14일입니다...", 메타데이터={"source": "ik_el_kitabi.pdf", "department": "IK", "date": "2025-06", "개인 정보 보호": "ic"})

# 메타데이터 필터링된 검색(개념적)result = vektor_db.search( vektor=embed("나에게 남은 휴가 일수는 얼마입니까?"), top_k=4, filter={"department": "HR", "privacy": ["internal", "on"]})

올바른 데이터베이스 선택

차량

주요 측면

적합한 상황

내장/파일 기반(임베디드 라이브러리)

설치 없음, 단일 기계

프로토타입, 소형 키트(<수십만 부품)

관리형 클라우드 서비스

확장 및 유지 관리는 귀하의 책임이 아닙니다

생산, 빠르게 증가하는 데이터, 소규모 팀

자체 서버의 오픈 소스

모든 권한을 갖고 귀하의 데이터는 귀하의 소유로 유지됩니다

개인정보 보호 의무, 기존 인프라

기존 데이터베이스에 추가

별도의 시스템을 관리하지 않습니다.

이미 사용하고 있는 DB에 벡터 지원 추가

선택할 때 물어보십시오. 몇 개의 조각이 있습니까? 메타데이터 필터링은 얼마나 중요합니까? 데이터가 회사 외부로 유출될 수 있나요(기밀성)? 팀이 인프라를 운영할 수 있나요? 작게 시작하여 필요에 따라 확장하는 것이 현명한 경우가 많습니다.

약한 접근 / 강한 접근

약함(일반 임베딩 저장, 메타데이터 없음):

텍스트와 벡터를 저장하기만 하면 됩니다. 검색: 가장 유사한 4개의 벡터를 반환합니다.# 문제: "현재 HR 문서만"처럼 필터링할 수 없습니다.# 오래되거나 승인되지 않은 부분도 응답에 포함될 수 있습니다.

강력함(풍부한 메타데이터 + 필터링된 검색):

각 항목에 소스, 날짜, 부서 및 개인정보 태그를 추가하세요. 검색 중 사용자의 권한과 최신성에 따라 필터링합니다. filter = {"privacy": user_authority, "date_date": "2024-01"}# 따라서 결과는 안전하고 최신입니다.

미니 케이스 3개

사례 1 - 잘못된 모델 조합. 한 팀은 모델 A의 문서와 모델 B의 질문을 삽입했습니다. 검색 결과는 의미 없는 결과가 나왔고 정답률은 31%에 머물었습니다. 단일 모델(둘 다 동일한 임베딩 모델)로 전환했을 때 비율이 88%로 뛰어올랐습니다. 교훈: 질문과 문서는 같은 공간에 있어야 합니다.

사례 2 - 메타데이터가 없는 개인 정보 보호 위험. 의료 회사에서는 모든 부서 문서가 메타데이터 없이 단일 풀에 저장되었습니다. 영업 직원이 질문을 하면 시스템은 환자 데이터의 일부를 맥락화했습니다. 메타데이터 + 필터가 추가되면(인증 수준에 따라) 이 위험이 제거되었습니다. 회수 시 허가되지 않은 조각 12개는 전혀 가져오지 않았습니다.

사례 3 - 확장 병목 현상. 한 전자상거래 회사는 간단한 "모두 스캔" 방법으로 800만 개의 제품 설명을 검색했습니다. 각 쿼리에는 6초가 걸렸습니다. HNSW 기반 ANN으로 전환했을 때 시간은 45밀리초로 줄어들었고 정확도는 1%만 손실되었습니다. 교훈: 큰 세트에서는 ANN이 필수입니다.

일반적인 실수

  • 질문과 문서를 다른 모델에 포함: 결과는 의미가 없습니다. 항상 하나의 모델입니다.
  • 메타데이터 건너뛰기: 필터링할 수 없습니다. 개인 정보 보호 및 최신 상태에 대한 통제력을 잃게 됩니다.
  • 임베딩을 암호화로 착각함: 임베딩은 가역적인 정보를 전달합니다. 민감한 데이터가 "숨겨져 있다"고 가정하는 것은 잘못된 것입니다.
  • 작은 세트에 불필요하게 큰 인프라 구축: 5,000개의 부품을 관리하는 거대한 클러스터는 불필요하게 복잡합니다.
  • 유사성 기준에 대해 너무 걱정하지 마십시오. 텍스트에서 코사인으로 시작하십시오. 미세 조정은 나중에 이루어집니다.
주의: 포함은 텍스트의 의미를 숫자로 포함하지만 콘텐츠를 "파괴"하지는 않습니다. 벡터 데이터베이스가 유출되면 저장된 원본 텍스트(대부분의 설치에서 텍스트도 저장됨)도 손상됩니다. 벡터 저장소를 그 안에 있는 문서만큼 기밀로 유지하십시오.

요약하면

  • 임베딩은 텍스트를 의미를 전달하는 숫자 벡터로 변환합니다. 유사한 의미는 가까운 벡터입니다.
  • 유사성은 종종 코사인으로 측정됩니다. 정규화된 벡터의 경우 내적은 동일한 결과를 제공합니다.
  • 빅 데이터에서 ANN(예: HNSW)은 정확한 검색을 대체합니다. 즉, 정확성을 거의 희생하지 않으면서 빠른 속도를 제공합니다.
  • 벡터 데이터베이스는 벡터 저장 + 유사성 검색 + 메타데이터 필터링을 수행합니다. 메타데이터는 엔터프라이즈 RAG에 필수적입니다.
  • 질문과 문서는 동일한 임베딩 모델로 번역되어야 합니다. 그렇지 않으면 좌표를 비교할 수 없습니다.

응용과제

이전 단원에서 선택한 문서에서 10개의 짧은 구절(각각 3-6문장)을 추출합니다. (1) 각 항목에 대해 최소 3개의 메타데이터 태그(소스, 날짜 및 비즈니스 상황에 적합한 세 번째 태그: 부서, 제품, 개인 정보 보호 등)를 디자인합니다. (2) 3가지 다른 사용자 질문에 어떤 메타데이터 필터를 적용해야 하는지 작성합니다. (3) 서로 다른 단어(예: “vacation entitlement” ← “annual vacation”)로 동일한 의미를 표현하는 질문-부분 쌍 3개를 찾아 키워드 검색에는 일치하지 않지만 임베딩에는 일치하는 이유를 한 문장으로 설명합니다.

체크리스트

  • [ ] 임베딩은 의미 공간에서 텍스트를 벡터로 변환하고 비슷한 의미가 가깝다는 것을 알 수 있습니다.
  • 나는 [ ] 코사인 유사성이 각도를 측정하고 텍스트의 기본 선호도라는 것을 알고 있습니다.
  • [ ] 빅데이터에서 ANN이 필요한 이유를 설명할 수 있다.
  • [ ] 기밀성 및 최신성 제어에 메타데이터가 중요한 이유를 알고 있습니다.
  • [ ] 질문과 문서를 동일한 임베딩 모델로 번역하는 규칙을 따릅니다.