RAG 글에서 "문서를 임베딩해서 벡터 데이터베이스에 저장한다"는 설명이 나왔습니다. 그런데 임베딩이 정확히 무엇이길래, 단어가 하나도 겹치지 않는 질문과 문서를 찾아서 연결해 줄 수 있는 걸까요?
LLM 공부 시리즈 2단계의 첫 글로, 검색과 추천, RAG의 기반이 되는 임베딩(embedding)의 개념과 활용을 정리해 보겠습니다.
1. 임베딩이란?
임베딩은 글(단어, 문장, 문서)의 의미를 숫자 목록(벡터)으로 바꾼 것입니다. 예를 들어 "강아지가 공원에서 뛰어논다"라는 문장을 임베딩 모델에 넣으면 [0.12, -0.48, 0.33, ... ]처럼 수백~수천 개의 숫자로 이루어진 벡터가 나옵니다.
이 숫자들 하나하나가 사람이 이해할 수 있는 뜻을 가진 것은 아닙니다. 중요한 성질은 의미가 비슷한 글은 비슷한 벡터가 된다는 점입니다. 벡터를 공간 속의 한 점이라고 생각하면, 뜻이 비슷한 문장들은 서로 가까운 곳에 모이고 뜻이 다른 문장은 멀리 떨어집니다.
| 문장 | "강아지가 공원에서 뛰어논다"와의 거리 |
|---|---|
| 반려견이 잔디밭을 달리고 있다 | 가까움 (단어는 달라도 의미가 비슷) |
| 고양이가 창가에서 졸고 있다 | 중간 (동물이라는 공통점) |
| 이번 분기 매출이 감소했다 | 멂 (관련 없음) |
첫 번째 문장은 겹치는 단어가 하나도 없는데도 가깝게 나옵니다. 단어 일치에 의존하던 기존 키워드 검색과 가장 크게 다른 점입니다.
2. 임베딩은 어떻게 만들어지나요?
임베딩의 아이디어는 "비슷한 맥락에서 쓰이는 단어는 비슷한 의미를 가진다"는 언어학의 오래된 관찰에서 출발합니다. 2013년에 발표된 Word2Vec은 주변 단어를 맞히는 방식으로 학습해 단어 하나하나를 벡터로 표현했고, '왕 - 남자 + 여자 ≈ 여왕' 같은 벡터 연산이 가능하다는 사실로 큰 주목을 받았습니다.
이후 트랜스포머가 등장하면서 단어 단위를 넘어 문장과 문서 전체의 의미를 하나의 벡터로 표현하는 문장 임베딩 모델이 발전했습니다. 요즘 임베딩 모델은 대체로 다음과 같이 학습합니다.
- "질문과 그 질문의 정답 문서", "같은 뜻의 두 문장"처럼 관련 있는 쌍은 벡터가 가까워지도록 학습합니다.
- 관련 없는 문장 쌍은 벡터가 멀어지도록 학습합니다.
- 이 과정을 아주 많은 데이터로 반복하면 의미에 따라 문장을 배치하는 능력이 생깁니다.
임베딩 모델은 답변을 생성하는 LLM과는 별개의 모델입니다. 크기가 훨씬 작고 빠르며, 비용도 생성 모델보다 훨씬 저렴한 편입니다.
3. 임베딩은 어디에 쓰이나요?
- 의미 검색: 질문과 의미가 가까운 문서를 찾습니다. RAG의 검색 단계가 대표적인 예입니다.
- 추천: 사용자가 본 글이나 상품과 벡터가 가까운 항목을 추천합니다.
- 분류: 문의 내용을 임베딩한 뒤 가장 가까운 카테고리로 분류합니다.
- 군집화: 수천 개의 고객 리뷰를 임베딩해서 비슷한 의견끼리 묶으면 주요 불만 유형을 빠르게 파악할 수 있습니다.
- 중복 탐지: 표현만 다르고 내용이 같은 질문이나 문서를 찾아냅니다.
4. 임베딩 모델 고를 때 확인할 점
- 언어 지원: 한국어 문서를 다룬다면 다국어 또는 한국어 성능이 검증된 모델을 고르세요.
- 벤치마크 참고: MTEB처럼 여러 작업에서 임베딩 모델 성능을 비교한 공개 리더보드가 있습니다. 다만 내 데이터에서의 성능과는 다를 수 있으니 직접 테스트가 가장 정확합니다.
- 차원 수: 벡터의 숫자 개수입니다. 클수록 표현력이 좋을 수 있지만 저장 공간과 검색 비용이 늘어납니다.
- 최대 입력 길이: 한 번에 임베딩할 수 있는 토큰 수입니다. 청크 크기를 정할 때 함께 고려하세요.
- 일관성: 문서와 질문은 반드시 같은 임베딩 모델로 변환해야 합니다. 모델을 바꾸면 기존 문서도 모두 다시 임베딩해야 합니다.
- 실행 환경: API로 쓰는 상용 모델과 직접 실행할 수 있는 오픈 모델이 있습니다. 오픈 모델은 라이선스 조건을 확인하세요.
정리
임베딩은 글의 의미를 숫자 벡터로 바꾼 것으로, 의미가 비슷한 글은 가까운 벡터가 됩니다. 덕분에 단어가 달라도 뜻이 통하는 문서를 찾을 수 있고, 검색과 추천, 분류, 군집화 등에 폭넓게 쓰입니다. 임베딩 모델을 고를 때는 언어 지원, 차원 수, 입력 길이를 확인하고 문서와 질문에 같은 모델을 쓰는 것이 중요합니다. 다음 글에서는 이렇게 만든 벡터들 사이에서 '가까운 것'을 어떻게 빠르게 찾는지, 유사도 계산과 벡터 인덱스를 알아보겠습니다.
참고자료
- Mikolov et al., "Efficient Estimation of Word Representations in Vector Space" (Word2Vec, 2013): https://arxiv.org/abs/1301.3781
- Reimers & Gurevych, "Sentence-BERT" (2019): https://arxiv.org/abs/1908.10084
- Muennighoff et al., "MTEB: Massive Text Embedding Benchmark" (2022): https://arxiv.org/abs/2210.07316
- Google Machine Learning Crash Course, Embeddings: https://developers.google.com/machine-learning/crash-course/embeddings
'AI > LLM 공부' 카테고리의 다른 글
| [LLM] LLM 공부 9편: 벡터 데이터베이스 비교와 선택 (0) | 2026.11.01 |
|---|---|
| [LLM] LLM 공부 8편: 코사인 유사도와 벡터 인덱스 (0) | 2026.10.31 |
| [LLM] LLM 공부 6편: 생성 옵션 temperature와 top_p 이해하기 (0) | 2026.10.23 |
| [LLM] LLM 공부 5편: 컨텍스트 윈도우와 API 비용 (0) | 2026.10.23 |
| [LLM] LLM 공부 4편: 토큰과 토크나이저 쉽게 이해하기 (0) | 2026.10.23 |