2026 04 02
2026-04-02¶
Embedding Model¶
qwen3-embedding-8b를 예시로...
- Parameters: 8B
- 모델이 학습한 가중치의 갯수
- 8B = 80억 개의 파라미터를 가지고 있다
- 파라미터가 많을수록 언어의 미묘한 차이를 포착. 하지만 GPU와 메모리 연산 비용 올라감
- 모델을 사용한다 = 80억 개의 파라미터를 메모리에 올려놓고 계산을 돌린다
- 8B 모델을 float16(반정밀도)으로 로드하면 약 16GB의 메모리가 필요
- float16 (2 byte) * 80억 = 16GB
- CPU로 임베딩 연산을 하면 한 문장 처리하는데 수초가 걸릴 수 있음
- GPU가 있어야 정상적으로 뚝딱
- 모델이 학습한 가중치의 갯수
- Context Length: 32k
- 한 번의 입력으로 받을 수 있는 최대 텍스트 길이
- 32K 토큰: 한국어 기준 대략 1만~1.5만자 정도
- 이 길이를 넘어가면 텍스트 짤리기 때문에, 긴 문서 임베딩할 때 청킹이 필요하기도 함
-
Dimension: 4096
- 임베딩 결과로 나오는 벡터의 길이
- 차원이 높을수록 의미의 미세한 차이를 더 세밀하게 표현 가능
- 벡터 하나당 저장 공간과 검색 비용이 비례해서 올라감
RAG¶
- 완벽한 정답 보다는, 주어진 제약 조건 내에서 충분히 좋은 답변을 빠르게 제공하는 것이 목표
[Tech Series] kt cloud AI 검색 증강 생성(RAG) #1 : 핵심 개념과 시스템 구조 이해¶
참고: https://tech.ktcloud.com/entry/2025-08-ktcloud-ai-rag-시스템구조-이해
- 문서 전처리 과정
- 텍스트 추출: PDF, HTML, 스캔 이미지 등에서 본문 텍스트와 메타 정보 추출
- 정제: 불필요한 공백, 제어 문자, 마크업 태그 제거 및 표준화
- 분할: 긴 문서를 작은 텍스트 조각으로 나눠 검색 효율성 확보
- 메타데이터 태깅: 작성자, 생성일, 출처, 카테고리 같은 속성을 붙여 정밀 지원
-
벡터 임베딩과 벡터 데이터베이스
- 임베딩 모델
- 초창기 단어 수준에서 출발 -> 문장/문서 수준까지 진화
- OpenAI의 text-embedding-3-small 모델은 단락을 1,536 차원 벡터로 표현해 대규모 의미 공간에서 비교할 수 있게 해줌
- 벡터 데이터베이스
- 벡터를 저장하고, 빠르게 검색하는 역할 (수백만 개 이상의 고차원 벡터를 실시간으로 탐색할 수 있도록 최적화 됨)
* FAISS: Meta가 개발한 고성능 라이브러리. GPU 가속으로 초당 수백만 쿼리를 처리할 수 있지만 인프라 관리가 복잡해요. * Pinecone: 완전 관리형 서비스. 자동 확장과 일관된 100ms 미만 지연을 제공하고, 보안·컴플라이언스도 지원해요. * Weaviate: 오픈소스 벡터 DB. 하이브리드 검색(sparse+dense)을 지원하고, 모듈화된 AI 통합 기능을 제공하며 평균 100ms 미만의 지연을 보여줘요. * Milvus: 대규모 분산 처리에 특화된 오픈소스 솔루션. 클라우드 네이티브 인프라와 높은 확장성, 기업급 기능을 갖췄어요. * Annoy: Spotify에서 개발한 근사 최근접 탐색 라이브러리. 메모리 효율이 높고 정적 데이터에 강점을 보여요. * ChromaDB: 개발자 친화적인 오픈소스 벡터 DB. $18M 시드 펀딩을 받으며 단순성과 사용 편의성으로 주목 받고 있어요. * Qdrant: HNSW 알고리즘 기반의 오픈소스 벡터 DB. 고급 압축 기술과 4~6ms의 매우 낮은 지연시간으로 신흥 강자로 떠오르고 있어요. * Redis: 대표적인 인메모리 DB에서 벡터 검색 기능이 추가되어, 기존 서비스와 쉽게 연계하며 빠른 검색 성능을 경험할 수 있어요.
- 벡터를 저장하고, 빠르게 검색하는 역할 (수백만 개 이상의 고차원 벡터를 실시간으로 탐색할 수 있도록 최적화 됨)
- 벡터 거리 측정
- 코사인 유사도: 벡터간 각도 기준으로 유사성 평가. 벡터 크기 무시하고 의미적 유사성에 집중
- 내적 (Dot Product): 벡터의 크기와 방향 모두 고려하는 방식
- 유클리드 거리 (L2 Distance): 두 벡터간 절대적인 직선 거리 계산
- 대부분의 텍스트 임베딩 모델은 코사인 유사도를 기준으로 학습되기에, 검색에서도 코사인 유사도 사용하는 것이 일관성 있음
- 임베딩 모델
- 검색기(Retriever)
- 사용자의 질의와 관련된 문서를 벡터 디비에서 빠르고 효율적으로 찾아내는 역할
- 희소 검색(Sparse Retrieval): BM25, TF-IDF 같은 전통 IR 기법을 활용한 "키워드 일치 기반"으로 문서 찾음. 동의어나 의미적 변형에는 취약
- 밀집 검색(Dense Retrieval): 트랜스포머 기반 임베딩 모델 활용해 질의/문서 "고차원 벡터로 변환". "코사인 유사도나 내적"으로 의미적 유사성 평가
- 사용자의 질의와 관련된 문서를 벡터 디비에서 빠르고 효율적으로 찾아내는 역할
- 재순위화(Re-ranker)
- 초기 검색으로 수백개의 후보 문서 추린 뒤, 진짜 관련성 높은 문서 골라내는 정교한 필터링 단계
- Chunking - 검색 성능을 좌우하는 핵심 전처리
- 고정 크기 청킹: 일정 토큰 수나 문자수 기준으로 균일하게 분할. 계산 비용 낮고 구현 쉽지만, 단락 경계 무시해 의미 끊길 수 있음
- 재귀적 문자 청킹: 구두점이나 개행 문자 우선적으로 고려해 분할하는 방식
- 의미적 청킹: LLM이나 임베딩 활용해 의미 단위로 잘라내는 정교한 방법. 학술 논문이나 기술 보고서 처럼 복잡한 문서에서 효과적
- 구조 기반 청킹: 문서 자체의 형식을 활용하는 방식
- Metadata
- 검색 정확도와 응답 품질 좌우하는 전략적 자산
- 정보
- 문서 출처
- 저자, 작성/발행일자
- 문서 종류
- 주제 분류, 부서/프로젝트 구분
- 보안 등급, 중요도, 신뢰도 점수
- 검색 실패
- 지식 베이스에 문서가 없거나, 질의가 모호하거나, 벡터 검색의 한계로 적절한 컨텍스트 못찾을 수 있음. fallback 전략 필요
1. 질의 확장 & 재검색
- 다중 쿼리 재작성 2. 검색 모드 전환 & 가중치 조정
- Dense 검색 실패시 Sparse 검색으로 전환 3. 메타데이터 필터 완화
- 조건이 너무 엄격하면 검색이 막히기도 함
- 지식 베이스에 문서가 없거나, 질의가 모호하거나, 벡터 검색의 한계로 적절한 컨텍스트 못찾을 수 있음. fallback 전략 필요
1. 질의 확장 & 재검색
- RAG 측정
- Recall@K: 상위 K개 검색 결과중 실제 문서가 포함될 비율
- MRR: 첫번째 관련 문서가 얼마나 상위에 위치하는지 평가
- Precision@K: 상위 K개 검색 결과 중 실제로 관련 있는 문서의 비율.
[Tech Series] kt cloud AI 검색 증강 생성(RAG) #2 : 데이터 파싱과 전처리 최적화¶
참고: https://tech.ktcloud.com/entry/2025-09-ktcloud-ai-rag-parsing-전처리-최적화
- RAG 데이터 유형별 파싱 전략
- 정형 데이터(DB, CSV)
- 값만 뽑지말고, 구조까지 보존해라
- 테이블을 행 단위로 풀어서 문장 형태로 변환하거나
- 스키마를 포함한 row로 저장
-
반정형 데이터 (JSON, HTML, 로그)
- JSON 계층 구조
- HTML: DOM 구조 유지할 것
- 로그: 시간과 패턴을 챙겨라
- 비정형 데이터 (PDF, PPT, 이미지, 코드 등)
- 틀이 없는 데이터. 사람이 읽던 의미/맥락을 어떻게 파싱에서 지켜낼 것인가
- 좌->우/상->하 흐름으로 복원해야 맥락이 살아남
- 정형 데이터(DB, CSV)
- 텍스트 추출/정규화
- 토큰화, 언어감지, 불용어 처리
- 토큰화: 텍스트를 모델이 이해할 수 있는 단위로 쪼개는 과정
- 임베딩 모델이 제공하는 토크나이저를 그대로 쓰는게 기본
- 토크나이저 특성까지 고려하는게 중요
- 언어감지: 계층적 언어 감지
- 문서 전체에서 주요 언어 먼저 식별
- 문단/문장 단위에서 세부 변화 추적
- 다국어 문서가 섞여있다면 언어 감지 -> 토큰화 순서 지키는 게 필수
- 불용어 처리: 맥락 살리고, 잡음 줄이기
- 토큰화: 텍스트를 모델이 이해할 수 있는 단위로 쪼개는 과정
- 표/수식/코드블록
- 표: 행/열 구조를 유지해 맥락을 살리기. HTML/md 형태로 표 보존시 검색 성능 높음
- 수식: LaTeX, MathML 원형 보존
- 코드 블록: 들여쓰기/펜스(```) 지키기
- 메타데이터 & 문맥 연결: 본문 맥락과 연결해 의미 강화
- 특수문자/줄바꿈/메타데이터 정리
- 특수문자 처리: 의미없는건 제거, 중요한건 변환/보존
- 줄바꿈과 공백 정리: 일관성 유지하며 단어 쪼개짐 복원
- 메타데이터 관리: 본문에 섞지말고 별도 필드에 구조화
- 페이지 번호, 헤더/푸터, 문서명 같은 반복 데이터는 본문에 섞어두면 벡터 유사도 왜곡
- 토큰화, 언어감지, 불용어 처리
- 데이터 클렌징 & 품질 관리
- 중복/노이즈 제거
- 중복 제거 -> 고유 답변 비율 40% 증가
- 노이즈 제거: 저품질/짧은 문서/HTML 파편 필터링
- 버전 관리와 출처 추적
- 데이터 버전 관리: 최신판만 기본 제공, 과거판은 아카이브로 보존
- 중복/노이즈 제거
[Tech Series] kt cloud AI 검색 증강 생성(RAG) #3 : 청킹(Chunking) 전략과 최적화¶
참고: https://tech.ktcloud.com/entry/2025-11-ktcloud-rag-ai-청킹전략-최적화
- 어떻게 자르느냐가 중요한 이유
- 검색 정확도, 토큰 예산 & LLM 입력 한계, 운영 효율성
- Chunking 전략과 최적화
- 크기/오버랩/중복의 최적의 균형 찾기
1. 고정 길이 청킹
- 텍스트를 일정한 토큰/문자 단위로 균등하게 나누기에 간단하고 처리속도도 일정.
- LangChain 기본 전략
- 다만, 문장/문단이 중간에서 짤리면 개념이 분해됨. 의미적 일관성 떨어지고, Precision도 떨어짐
- 그럼에도 baseline 전략으로 높은 평가
- 오버랩
- 10~25% 구간 포함하여 안정적으로 짜르길 권장
- 문서 유형별로 오버랩 크기 조금씩 바꿔가며 안정적인 조합을 찾는 과정이 필수
- 중복된 구간이 생기면 경계에 걸린 중요한 문장도 한 청크 이상에서 온전히 포함되기에 recall 손실을 줄이는데 큰 도움
- Qdrant 가이드: 10~20% 오버랩이 가장 안정적인 기본값
- 의료/법률 문서처럼 문맥 연속성이 특히 중요하다면 25~30% 오버랩 2. 의미론 Semantic 청킹
- 문서 안의 의미 경계를 기준으로 텍스트 분할
- 청크 내부 의미 자연스럽게 보전
ClusterSemanticChunker>RecursiveCharacterTextSplitter- 모든 문장을 임베딩하고 유사도/클러스터링 계산 수행해야 해서, 초기 인덱싱 비용이 고정 길이보다 3~5배 증가
- 유사도 임계값을 엄격하게 잡으면 문서가 지나치게 잘게 쪼개짐. -> latency 악화
- 최대 길이 (max chunk length) 제한 함께 적용 3. 문서 구조 Structure-aware 청킹
- 형식적 구조 헤더, 섹션, 문단, 리스트, 표, 코드 블록 등 텍스트를 나누는 전략
- 사람의 글쓰기 방식이 가진 논리적 단위를 그대로 반영해 분할. -> 문맥 단절 최소화
- 주변 설명과 함께 해석되어야 의미가 살아나는 데이터
- 구조 기반 + 의미 기반의 결합도 많이 쓰임 4. 지연 청킹
- 압도적인 길이를 처리하는 모델이 등장함에 따라, 긴 문서 통쨰로 임베딩해 문맥을 충분히 반영한 뒤, 마지막에 청크를 나누는 방식
- 텍스트를 일정한 토큰/문자 단위로 균등하게 나누기에 간단하고 처리속도도 일정.
- 크기/오버랩/중복의 최적의 균형 찾기
1. 고정 길이 청킹
- RAG 도구 기반 청킹 기능과 실전 활용
- RAG 프레임워크들이 제공하는 청킹 기능
- LangChain
- RecursiveCharacterTextSplitter: 개행 -> 문장 -> 단어 순 자연스러운 경계 고려해 분할
- Haystack
- LlamaIndex
- TokenTextSplitter: 임베딩 모델의 실제 토크나이저를 활용한 정확한 토큰 단위 분할 수행
- LangChain
- 도구 선택보다 중요한 것은 파이프라인 전반의 일관성 유지
- 청킹은 독립적인 단계가 아님. 도구의 성능은 파이프라인이 전체 일관성이 확보 되었을 때만 의미가 있음
- 파서 > 청킹 > 임베딩 > 인덱싱이 같은 문서 스키마로 연결되는 구조
- 청킹은 RAG의 흐름을 설계하는 일에 가까움
- 잘 설계해두면 검색 정확도나 응답 품질 같은 핵심 지표들이 놀라울 만큼 안정적으로 유지됨
- 임베딩 모델 선정과 청킹은 결코 분리할 수 없으며, 이 둘의 최적 조합을 찾는 것이 RAG 시스템 성공의 핵심 변수
- RAG 프레임워크들이 제공하는 청킹 기능
[Tech Series] kt cloud AI 검색 증강 생성(RAG) #4 : 임베딩(Embedding)과 벡터 인덱싱 기술¶
참고: https://tech.ktcloud.com/entry/2026-03-ktcloud-rag-embedding-vectorindex-검색-색인
- 개요
- 모델의 표현력과 인프라의 검색 효율이 완벽한 밸런스를 이뤄야만 진정한 RAG 시스템이 완성됨
- 임베딩 모델
- 비정형 데이터를 얼마나 정교한 수치적 표현으로 변환하느냐 (텍스트/이미지 등을 고정된 길이의 고차원 벡터 공간 내 한점으로 매핑)
1. Dense 임베딩
- 인코더를 활용해 텍스트의 전체 의미를 실수 값의 고정 크기 벡터로 압축하는 기술
- 동의어나 문장 구조가 달라도 의미적 유사성을 탁월하게 포착 2. Sparse 임베딩
- 전체 어휘 사전 크기만큼 차원이 크지만, 대부분의 값이 0으로 채워진 벡터
- BM25를 넘어 SPLADE 같은 학습 기반 모델이 주류. 3. Mutlimodal 임베딩
- 텍스트와 이미지가 혼합된 기업용 문서 니즈
- PDF 스크린샷 등 시각적 요소 직접 벡터화해 복잡한 파싱 과정 줄임
- 비정형 데이터를 얼마나 정교한 수치적 표현으로 변환하느냐 (텍스트/이미지 등을 고정된 길이의 고차원 벡터 공간 내 한점으로 매핑)
1. Dense 임베딩
- 다국어 및 SOTA 모델 성능 분석
- MTEB v2, MMTEB의 등장 (다국어 평가인듯)
- 단순 텍스트를 넘어 표/이미지/레이아웃 까지 포괄하는 문서 표현 계층으로 확장
- 영어권 최상위권 모델
- Gemini EMbedding, NV-Embed-v2, Cohere Embed v4, OpenAI text-embedding-3
- 비영어권 환경에서는 모델 크기보다 사전 학습 데이터의 다국어 비중이 훨씬 더 중요
- Solar 임베딩, BGE-M3, KoE5 등 다국어 특화 모델이 성능 더 잘나오는 경우도 있어.
- 리더보드 평균 점수에만 의존하지 말고, 사내 데이터 기반 자체 벤치마크 교차 검증 + 태스크별 분해 점수 포함하여 선정할 것
- 인덱스 알고리즘 (in Vector DB)
- HNSW 알고리즘 : 데이터 간의 연결을 다층적인 그래프로 구성하여 빠르고 정확하게 이웃을 찾는 근사 최근접 이웃 검색