개요
Embedding은 단어, 문장, 문서 같은 대상을 연속적인 숫자 벡터로 표현하는 방법을 뜻한다. 좋은 임베딩 공간에서는 의미나 사용 맥락이 비슷한 대상이 벡터 공간에서도 가까운 위치를 갖도록 학습할 수 있다.
단어에서 문장·문서로
Word2Vec 연구는 대규모 데이터에서 단어의 연속 벡터 표현을 효율적으로 학습하는 신경망 구조를 제안했고, 학습된 벡터가 단어의 구문적·의미적 유사성을 포착할 수 있음을 보였다.[1] 이후 문장과 문서 전체를 하나의 벡터로 표현하는 방식도 널리 연구됐다.
유사도 검색
Sentence-BERT 연구는 문장 단위의 의미 벡터를 만들고 코사인 유사도를 이용해 문장 쌍을 빠르게 비교하는 방식을 제시했다.[2] 검색 시스템에서는 질문과 문서를 같은 임베딩 공간의 벡터로 만든 뒤, 코사인 유사도나 거리 지표를 이용해 가까운 항목을 찾는 방식이 자주 사용된다.
어디에 쓰이는가
임베딩은 의미 검색, 군집화, 추천, 중복 탐지, 분류 보조 등 여러 작업에 활용된다. 특히 RAG에서는 사용자의 질문과 관련 문서 조각을 찾는 검색 단계에 임베딩 기반 벡터 검색이 자주 사용된다.
해석할 때의 주의점
벡터가 가깝다는 것은 해당 임베딩 모델이 학습한 기준에서 유사하다는 뜻이지, 두 문장이 사실적으로 동일하거나 정답이라는 뜻은 아니다. 사용 언어, 도메인, 문서 길이와 분할 방식, 임베딩 모델의 학습 목적에 따라 검색 품질이 달라질 수 있다. 따라서 실제 시스템에서는 임베딩 모델 선택과 검색 평가를 함께 해야 한다.
핵심 구분
Embedding은 원본 문서 자체를 저장하는 방식이 아니라 검색·비교를 쉽게 하기 위한 수치 표현이다. 벡터 검색 결과를 사용할 때도 필요하면 원문을 다시 가져와 확인하는 단계가 중요하다.
사례: 단어가 달라도 같은 요청 찾기
다음은 ORBiS Tree가 만든 가상 검색 사례다. 문서 제목은 '상품 반품 신청 방법'이고 사용자는 '산 물건을 돌려보내려면?'이라고 검색했다고 하자. 단어의 일치만 보면 두 문장의 연결이 약할 수 있다. 문장 임베딩은 이런 표현을 벡터로 바꾸어 의미상 가까운 후보를 찾는 데 사용될 수 있다. Sentence-BERT는 문장을 각각 표현한 뒤 코사인 유사도로 비교하는 접근을 제시했다.[2]
다만 '반품 가능한 상품'과 '반품 불가능한 상품'은 많은 단어를 공유한다. 두 문서가 가까운 후보로 검색되더라도 실제 적용 조건은 반대일 수 있다. 비슷한 의미를 찾는 역할과 이용 가능 여부를 판정하는 역할을 구분해야 한다.
벡터·검색·생성 모델의 역할
- Embedding: 입력을 비교 가능한 숫자 표현으로 바꾼다. 그 자체로 사용자에게 설명 문장을 만드는 기능은 아니다.
- Vector Search: 만들어진 벡터를 대상으로 가까운 후보를 찾는다. 임베딩 모델을 바꾸는 것과 인덱스를 바꾸는 것은 다른 작업이다.
- 생성형 LLM: 질문과 제공된 문맥을 바탕으로 답변 문장을 만든다.
- RAG: 검색과 생성을 연결해 답변의 근거를 외부 자료에서 공급하는 구성이다.
유사도 점수를 읽는 방법
유사도 점수가 높다는 사실은 두 표현이 선택한 벡터 공간에서 가깝다는 뜻이다. 그 점수를 '정답일 확률'이나 '문서가 사실일 확률'로 읽으면 안 된다. 거리 종류, 벡터 정규화, 모델과 검색 구현에 따라 값의 범위와 해석이 달라질 수 있다.[3] 다른 모델에서 나온 점수나 다른 검색 설정의 점수를 그대로 비교하는 것도 주의해야 한다.
한국어 자료에서 확인할 조건
고유명사, 제품 코드, 띄어쓰기 변형, 줄임말, 부정문을 나눠 시험해 보는 것이 좋다. 예를 들어 'A-100의 충전 시간'은 의미가 비슷한 B-100 설명서보다 정확한 제품 코드가 중요하다. 이런 질문에서는 키워드 조건이나 메타데이터 필터를 함께 검토할 수 있다. 이는 특정 방식이 항상 우월하다는 주장보다 실제 자료의 특성에 맞춘 판단이다.
모델을 바꿀 때 놓치기 쉬운 점
새 임베딩 모델로 만든 질문 벡터를 이전 모델로 만든 문서 벡터와 비교하면 두 표현이 같은 좌표계라고 가정하게 된다. 모델 변경은 문서 재변환과 인덱스 교체를 함께 검토해야 한다. 교체 전에 같은 질문 묶음으로 올바른 문서가 상위 후보에 드는지 확인하고, 바뀐 모델·자료 버전·검색 설정을 기록하면 결과의 원인을 비교하기 쉽다.
계산 예제: 코사인 0.8은 정답 확률이 아니다
이 좌표는 ORBiS Tree의 설명용 가상 벡터이며 실제 모델 출력이 아니다. 질문 q=(3, 4), 문서 a=(0, 5)는 각각 길이가 5이고 내적은 20이므로 코사인 유사도는 20 / (5 × 5) = 0.8이다. 문서 b=(4, -3)은 q와 내적이 0이어서 코사인 유사도가 0이다. 따라서 이 지표에서는 a가 b보다 가깝다. 그러나 0.8을 '정답일 확률 80%'로 바꾸어 읽을 근거는 없다. 길이가 0인 벡터는 이 산식의 분모가 0이므로 별도 처리해야 한다.
후보 순위와 답변의 사실성을 따로 판단한다. '반품 가능'과 '반품 불가'가 가까운 벡터여도 정책은 반대일 수 있다. 부정어·상품 코드·시행 날짜를 원문에서 확인해야 유사한 후보를 정확한 근거로 좁힐 수 있다.
좌표계 교체와 문서 재색인
임베딩 모델, 토크나이저, 차원, 정규화 방식, 질문·문서용 입력 형식을 하나의 버전 묶음으로 기록한다. 같은 차원이라는 이유만으로 서로 다른 모델의 벡터를 섞어 비교하지 않는다. 입력 분할이나 문서 조각을 바꾸어도 검색 기준이 달라질 수 있다.
교체할 때는 새 문서 벡터와 새 인덱스를 따로 만들고, 새 질문 인코더로 같은 평가 질문을 시험한다. 새 인코더와 새 인덱스를 함께 전환하고 이전 묶음을 복구 지점으로 둔다. 원문 수정·삭제가 파생 벡터와 자료 버전에 반영됐는지도 확인한다. 좌표만 다시 계산하고 이전 문서 내용이 남으면 최신 자료를 검색했다는 보장이 없다.
한국어·영어와 정밀 조건을 나눠 평가하기
가상의 AI 제품 설명서를 찾는다면 한국어 질문, 영어 질문, 언어를 바꾼 같은 질문, 제품 코드, 부정문, 날짜 조건을 별도 묶음으로 만든다. 예를 들어 'X-20은 오프라인에서 되나?'와 'X-20 requires an internet connection'은 언어와 부정 조건을 함께 시험한다. 번역 문서나 비슷한 제목이 여러 개 있으면 같은 원문 ID의 중복 후보도 기록한다.
정답 문서가 상위 k개 안에 들어오는지와, 검색된 문서가 실제 조건을 지키는지 모두 확인한다. 보류했던 질문으로 새 모델을 평가하고 임계값을 정하는 자료와 최종 평가 자료를 분리한다. 코사인 0.8 같은 공통 임계값을 모든 언어·모델에 고정하기보다 업무 질문에서 오탐과 누락을 비교한다.
원문 연구와 검색 실패를 연결해서 읽기
Sentence-BERT ↗는 문장 벡터를 별도로 만들고 코사인 유사도로 비교하는 연구 사례다.[2] Dense Passage Retrieval ↗은 질문과 문단을 표현하는 이중 인코더로 개방형 질의응답의 검색을 평가했다.[4] 이 연구의 결과를 모든 한국어 자료나 현재 모델의 성능으로 일반화하지 않는다.
RAG 답변이 틀리면 먼저 정답 원문이 저장소에 있는지, 문서 조각에 조건이 남아 있는지, 인코더·인덱스 버전이 맞는지 확인한다. 올바른 근거를 검색했는데도 생성 단계가 조건을 무시했다면 임베딩만 바꾸는 것으로 원인을 해결하기 어렵다.
연구 방법: 쌍둥이 인코더와 풀링의 역할
Sentence-BERT 원문 ↗ §3은 같은 가중치의 인코더를 두 입력에 적용하는 siamese 구조와 삼중항 학습을 설명한다. 토큰 출력을 문장 벡터로 모으는 풀링에서는 CLS·평균·최댓값을 비교하며 기본 구성은 평균이다. 분류·회귀 등 학습 목적과 추론 때의 문장 비교를 구분한다.[2] 해당 실험의 문장 유사도 결과가 모든 한국어 검색의 관련성이나 사실성을 보장하지는 않는다.
정규화된 거리 변환을 해석하는 조건
다음은 연구 성능이 아닌 수학적 설명이다. 길이가 모두 1인 벡터 u와 v에 대해서만 제곱 유클리드 거리는 ||u-v||² = 2 - 2·cos(u,v)다. 코사인이 0.25인 가상 단위 벡터 쌍의 제곱 거리는 1.5다. 이 조건에서는 코사인 내림차순과 제곱 거리 오름차순이 같은 순위를 만든다. 정규화하지 않은 벡터까지 같은 순위라고 일반화하지 않는다. 0벡터는 단위 벡터로 만들 수 없으며, 이 변환은 정답 확률을 계산하지 않는다. 인덱스 거리 설정과 원문 입력의 전처리를 함께 기록한다.