임베딩은 단어·문장 같은 데이터의 특징을 여러 숫자로 표현해, 서로 얼마나 관련 있는지 계산할 수 있게 만드는 방법입니다. 문장 임베딩을 활용하면 표현이 달라도 뜻이 비슷한 문장을 찾을 수 있습니다. 다만 그 숫자는 의미를 완벽히 번역한 정답표가 아니라, 모델이 학습한 관계를 담은 표현입니다.
예를 들어 고객 문의에서 ‘배송이 늦어요’와 ‘택배가 아직 안 왔어요’를 함께 찾고 싶다고 해보겠습니다. 두 문장은 쓰는 단어가 다르지만 비슷한 상황을 말합니다. 문장을 각각 숫자 표현으로 바꾼 뒤 비교하면, 이런 관련성을 계산할 수 있습니다.
임베딩의 숫자는 문장에 붙인 번호와 무엇이 다른가요?
문장 번호는 대상을 구별하고, 임베딩은 대상 사이의 관계를 계산하는 데 쓰입니다. 문의에 접수번호를 붙여도 번호가 가깝다는 이유로 문의 내용까지 비슷해지지는 않습니다. 임베딩 모델은 학습 목표에 맞는 관계가 숫자 표현에 반영되도록 훈련됩니다.
여러 숫자를 정해진 순서로 나열한 것을 벡터라고 합니다. 임베딩은 이런 벡터로 표현하는 방법을 뜻하며, 문맥에 따라 결과로 나온 벡터 자체를 가리키기도 합니다. 숫자가 세 개라면 3차원 벡터입니다. 여기서 차원은 ‘숫자를 담는 칸의 개수’로 이해하면 충분합니다.
벡터를 지도 위의 좌표처럼 생각하면 관계를 떠올리기 편합니다. 의미 비교에 맞게 학습된 모델에서는 관련 있는 표현들이 서로 가깝게 나타나도록 만들 수 있습니다. 실제로는 평면 지도보다 많은 차원을 사용하며, 가까움을 판단하는 계산 방법도 정해야 합니다. 이 지도는 위치 관계를 설명하는 비유입니다. Google의 임베딩 공간 설명
각 숫자 칸에 ‘배송 관련성’, ‘불만 정도’ 같은 이름이 하나씩 붙어 있지는 않습니다. 보통은 여러 값의 조합에 특징이 분산되어 있어, 숫자 하나만 읽어 문장의 뜻을 해석하기 어렵습니다. 어떤 관계를 잘 표현하는지도 모델이 학습한 데이터와 과제에 따라 달라집니다.
문장은 어떻게 비교 가능한 벡터가 되나요?
문장 임베딩 모델은 입력 문장을 처리해 벡터를 만들고, 별도의 유사도 계산이 두 벡터를 비교합니다. 먼저 두 문장을 같은 문장 임베딩 모델에 각각 넣는 경우를 생각해 보세요. 문장마다 벡터가 하나씩 나오고, 이 두 결과를 비교해 얼마나 비슷하게 표현되었는지 확인합니다.

문장 표현을 만드는 개발 도구인 Sentence Transformers의 공식 학습 예제도 이 관계를 설명합니다. 두 문장을 같은 모델로 처리한 뒤 각 문장의 벡터를 비교합니다. 그림의 두 처리 경로는 서로 따로 학습한 모델 두 개를 뜻하지 않습니다. Sentence Transformers의 문장 쌍 학습 예제
문장 조각을 읽고 문맥을 반영합니다
문장 안에서 모델이 처리하는 작은 단위를 토큰이라고 합니다. 토큰은 단어 하나일 수도 있고 단어의 일부나 문장부호일 수도 있습니다. 토큰을 식별하는 번호와 그 토큰의 특징을 담는 벡터는 구별해야 합니다. 번호가 비슷하다고 의미까지 비슷하지는 않습니다.
오늘날 널리 쓰이는 문장 임베딩 방식에서는 주변 표현을 함께 처리해 토큰의 표현을 갱신합니다. 예컨대 ‘배를 먹었다’와 ‘배를 타고 갔다’에서 ‘배’의 의미를 구별하려면 뒤에 오는 말이 필요합니다. 주변 문맥을 반영한 숫자 표현을 문맥 임베딩이라고 합니다. 단어마다 하나의 고정 벡터를 사용하는 방식과 구별되는 지점입니다. Google의 문맥 임베딩 설명
토큰별 표현을 문장 하나의 표현으로 모읍니다
토큰마다 만든 표현을 문장 전체의 벡터로 모으는 처리를 풀링이라고 합니다. 토큰 표현을 평균 내거나 특정 토큰의 표현을 사용하는 방식이 있습니다. 모든 문장 임베딩 모델이 같은 방식으로 모으지는 않습니다.
Sentence Transformers 문서는 주변 문맥을 처리하는 트랜스포머와 풀링을 흔한 구성으로 설명합니다. 따라서 ‘문장 임베딩은 단어 벡터를 무조건 평균 낸 것’이라고 이해하면 부족합니다. 평균을 쓰더라도 그 전에 문맥을 반영했는지가 다르고, 모델에 따라 다른 집계 방식이나 후처리를 적용합니다. 이 글은 문장 하나를 벡터 하나로 표현하는 방식을 중심으로 설명합니다. Sentence Transformers의 모델 구성 문서
주변 단어를 함께 처리하는 원리가 궁금하다면 트랜스포머와 셀프 어텐션 설명으로 이어서 읽어 보세요.
모델은 어떤 문장이 비슷한지 어떻게 배우나요?
학습 과정에서 원하는 관계와 모델이 계산한 관계의 차이를 줄이도록 내부 값을 조정합니다. 문장 유사도 학습이라면 문장 쌍과 그 의미가 얼마나 비슷한지 알려주는 정보를 사용할 수 있습니다.
앞의 두 배송 문의를 비슷한 문장 쌍으로, 배송 문의와 ‘비밀번호를 바꾸고 싶어요’를 덜 관련된 쌍으로 제시하는 상황을 떠올려 보세요. 모델이 만든 벡터의 비교 결과가 학습 목표와 어긋나면, 다음에는 더 적절하게 표현하도록 계산에 쓰이는 값을 조정합니다. 이는 학습 원리를 설명하기 위한 예시이며, 해당 한국어 문장으로 모델을 실행해 측정한 결과는 아닙니다.
공식 문장 유사도 학습 예제에서는 벡터끼리 비교한 결과와 주어진 유사도 점수를 맞추도록 훈련합니다. 다른 임베딩 모델은 관련 문서를 찾거나 주변 단어를 예측하는 등 다른 목표로 배울 수 있으므로, 모든 모델이 동일한 문장 쌍 학습을 거친다고 일반화하면 안 됩니다. 문장 유사도 학습 방식
이미 학습된 모델에 새 문장을 넣어 벡터를 얻는 단계에서는, 보통 기존에 배운 계산 규칙을 사용합니다. 문서를 임베딩해 저장하는 일과 모델을 추가 학습시키는 일은 다릅니다. 새 문서의 벡터를 만들었다고 모델 내부에 그 문서의 지식이 새로 학습되지는 않습니다.
숫자로 의미를 비교하면 어떤 일을 할 수 있나요?
대표적인 활용은 표현이 달라도 관련 있는 문장을 찾는 의미 검색입니다. 검색 대상의 벡터를 미리 만들어 두고, 질문이 들어오면 질문 벡터와 비교해 가까운 후보를 찾습니다. 검색어에 쓰인 단어가 문서에 그대로 등장하지 않아도 관련 내용을 찾을 수 있는 기반입니다.
고객 문의 목록을 검색한다면 ‘택배가 아직 안 왔어요’로 ‘배송이 늦어요’라는 기존 문의를 찾는 것이 목표가 될 수 있습니다. 다만 실제 검색 결과는 한국어 표현과 해당 업무에 모델이 얼마나 적합한지에 달려 있습니다. 질문과 후보가 비슷한 문장인지, 짧은 질문으로 긴 답변 문서를 찾는지에 따라서도 적절한 모델과 입력 방식이 달라집니다. Sentence Transformers의 의미 검색 설명
벡터의 방향이 얼마나 비슷한지 비교하는 대표적인 계산을 코사인 유사도라고 합니다. 이 외에도 벡터 사이의 거리나 내적을 사용할 수 있습니다. 모델과 함께 쓰도록 정해진 비교 방법을 따라야 하며, 유사도 점수를 곧바로 ‘같은 뜻일 확률’로 읽어서는 안 됩니다. 문장 벡터의 유사도 계산 문서
활용 범위를 넓히면 비슷한 문의끼리 묶거나 관련 콘텐츠를 추천할 수도 있습니다. 외부 자료를 찾아 생성 모델의 답변에 참고시키는 검색 증강 생성, RAG에서도 임베딩 기반 검색을 사용할 수 있습니다. 이때 임베딩은 자료를 찾기 위한 표현이고, 찾은 자료를 읽어 답변 문장을 만드는 것은 생성 모델의 역할입니다. Google Cloud의 임베딩과 벡터 검색 설명
비슷한 벡터가 항상 같은 뜻이나 정답을 보장하나요?
유사도는 관련 후보를 고르는 기준이지, 문장의 참·거짓이나 모든 조건의 일치를 보장하는 판정이 아닙니다. 무엇을 비슷하다고 표현할지는 학습 목표에 영향을 받으므로, 실제 사용 목적에 맞는 예시로 확인해야 합니다.
예를 들어 ‘환불이 가능하다’와 ‘환불이 불가능하다’는 같은 주제를 다루지만 결론은 반대입니다. 임베딩이 이런 차이를 언제나 놓친다는 뜻은 아닙니다. 업무에 도입할 때는 단어만 조금 바뀌어도 판단이 뒤집히는 사례를 평가에 넣어야 한다는 뜻입니다. ‘배송 완료’와 ‘배송 미완료’처럼 실제 업무의 중요한 차이를 드러내는 문장도 점검 대상으로 삼을 수 있습니다.
상품 코드, 날짜 범위, 가격 상한처럼 정확히 맞아야 하는 조건은 별도로 검사하는 편이 적절합니다. 관련성을 찾는 벡터 검색과 조건을 엄격하게 적용하는 필터를 함께 쓸 수 있습니다. Google Cloud도 의미 기반 검색과 구조화된 조건을 결합하는 활용을 설명합니다. 벡터 검색과 조건 필터의 결합
직접 확인해 보고 싶다면 비슷한 뜻을 다르게 표현한 문장, 주제는 같지만 결론이 반대인 문장, 관련 없는 문장을 준비해 비교해 보세요. 숫자 하나가 높게 나왔다는 사실보다 원하는 후보가 앞에 오고, 잘못된 후보가 구별되는지를 살펴보는 것이 유용합니다. 질문과 문서는 같은 벡터 공간에서 비교되도록 모델이 지정한 입력 방식을 따라야 합니다. 서로 다른 모델의 결과는 숫자 개수가 같다는 이유만으로 섞어 비교할 수 없습니다.
자주 묻는 질문
임베딩을 사용하려면 벡터 데이터베이스가 꼭 필요한가요?
아닙니다. 소량의 문장이라면 벡터를 메모리에 두고 직접 비교할 수 있습니다. 벡터 데이터베이스는 많은 벡터를 저장하고 검색하는 일을 지원합니다. 임베딩을 만드는 모델과 결과를 저장·검색하는 시스템은 역할이 다릅니다.
사진도 문장과 같은 방식으로 임베딩할 수 있나요?
사진도 모델을 통해 벡터로 표현할 수 있습니다. 다만 사진 벡터와 문장 벡터를 직접 비교하려면 두 종류의 데이터를 함께 비교할 수 있도록 학습된 모델이 필요합니다. 임의의 이미지 모델과 텍스트 모델에서 나온 벡터를 그대로 섞어 쓰는 것은 적절하지 않습니다.
참고 자료
- Embeddings: Embedding space and static embeddings — Google for Developers
- Embeddings: Obtaining embeddings — Google for Developers
- Creating Custom Models — Sentence Transformers
- Semantic Textual Similarity — Training Examples — Sentence Transformers
- Semantic Textual Similarity — Usage — Sentence Transformers
- Semantic Search — Sentence Transformers
- 임베딩 및 벡터 검색 소개 — Google Cloud
- 벡터 데이터베이스란 무엇이며 어떻게 작동하나요? — Google Cloud