Tag: 임베딩

  • 실무에서 바로 쓰는 RAG 파이프라인 구축 단계별 튜토리얼

    실무에서 바로 쓰는 RAG 파이프라인 구축 단계별 튜토리얼

    RAG(검색 증강 생성)는 LLM에 우리 회사의 문서나 최신 정보를 결합해 답하게 만드는 가장 현실적인 방법입니다. 파인튜닝보다 비용이 낮고, 출처를 제시할 수 있으며, 데이터가 바뀌어도 모델을 다시 학습할 필요가 없습니다. 이 글에서는 동작하는 RAG 파이프라인을 다섯 단계로 나눠 구축합니다.

    1단계: 문서 적재와 정제

    RAG의 품질은 입력 문서의 품질을 넘지 못합니다. PDF, HTML, 노션 등에서 텍스트를 추출할 때 머리말·바닥글·내비게이션 같은 노이즈를 제거하고, 표와 코드 블록의 구조를 최대한 보존해야 합니다. 정제되지 않은 문서를 그대로 넣으면 이후 단계가 아무리 좋아도 엉뚱한 답이 나옵니다.

    2단계: 청킹 전략

    문서를 검색 단위로 쪼개는 청킹은 RAG에서 가장 과소평가되는 단계입니다. 너무 작게 자르면 문맥이 끊기고, 너무 크게 자르면 관련 없는 내용까지 섞입니다. 일반 문서는 300~600토큰에 10~20% 오버랩을 주는 것이 무난한 출발점입니다.

    • 고정 크기 청킹: 단순하지만 문장이 중간에 끊길 수 있음
    • 문장/문단 기준 청킹: 의미 단위 보존에 유리
    • 구조 기반 청킹: 제목 계층을 활용해 섹션 단위로 분리

    3단계: 임베딩과 벡터 저장

    각 청크를 임베딩 모델로 벡터화한 뒤 벡터 DB에 저장합니다. 이때 청크 본문뿐 아니라 문서 제목, 출처 URL, 작성일 같은 메타데이터를 함께 저장해야 나중에 필터링과 출처 표시가 가능합니다. 메타데이터 설계를 미루면 운영 단계에서 반드시 후회합니다.

    chunk = {
      "text": "...본문...",
      "embedding": [0.12, -0.04, ...],
      "source": "policy_2026.pdf",
      "page": 12,
      "updated_at": "2026-03-01"
    }

    4단계: 검색과 재정렬

    사용자 질문을 임베딩해 벡터 검색으로 상위 K개 청크를 가져옵니다. 여기서 끝내지 말고, 가져온 후보를 리랭커(reranker)로 다시 정렬하면 정확도가 눈에 띄게 올라갑니다. 보통 벡터 검색으로 20~30개를 넉넉히 뽑은 뒤 리랭커로 상위 3~5개만 추리는 2단계 구성을 권장합니다.

    5단계: 생성과 출처 표기

    마지막으로 추려진 청크를 프롬프트에 문맥으로 넣고 LLM에게 답하게 합니다. 이때 “제공된 문맥에만 근거해 답하고, 근거가 없으면 모른다고 답하라”는 지침을 명시해 환각을 억제합니다. 또한 각 청크의 출처를 답변에 함께 노출해 사용자가 검증할 수 있게 합니다.

    처음부터 완벽한 파이프라인을 만들려 하지 마세요. 청킹과 검색 K값만 바꿔도 체감 품질이 크게 달라지므로, 작게 만들고 평가셋으로 반복 개선하는 것이 정석입니다.

    다음 단계로는 검색 정확도를 정량 측정하는 방법과, 답변 품질을 평가하는 지표를 도입해 보길 권합니다. 측정 없이 개선하는 RAG는 결국 감에 의존하게 됩니다.

  • 벡터검색 정확도가 낮을 때 점검해야 할 7가지 원인

    벡터검색 정확도가 낮을 때 점검해야 할 7가지 원인

    RAG를 만들었는데 “분명 문서에 있는데 검색이 못 찾는다”는 문제는 거의 모든 팀이 겪습니다. 생성 모델이 아무리 좋아도 검색이 관련 문맥을 못 가져오면 답은 무너집니다. 이 글에서는 벡터검색 정확도가 낮을 때 점검할 원인을 우선순위대로 정리합니다.

    원인 1~2: 청킹과 정제 문제

    가장 흔한 원인은 검색이 아니라 그 앞 단계에 있습니다. 청크가 너무 커서 하나의 벡터에 여러 주제가 섞이면 임베딩이 흐려져 어떤 질문에도 어중간하게 매칭됩니다. 반대로 너무 작으면 핵심 문장이 문맥 없이 떠다닙니다. 또한 정제가 부실해 머리말·각주가 본문에 섞이면 노이즈가 임베딩을 오염시킵니다.

    원인 3: 부적합한 임베딩 모델

    영어 위주로 학습된 임베딩 모델을 한국어 문서에 쓰면 의미가 비슷한 문장끼리도 벡터 거리가 멀어집니다. 도메인 용어가 많은 경우(의료·법률·금융)에는 일반 모델보다 해당 언어와 도메인을 잘 반영하는 모델을 선택해야 합니다.

    원인 4: 거리 측정과 정규화

    코사인 유사도를 가정한 모델인데 벡터를 정규화하지 않고 유클리드 거리로 검색하면 결과가 망가집니다. 임베딩 모델 문서가 권장하는 거리 측정 방식과 정규화 여부를 반드시 확인하세요. 이 작은 설정 하나가 정확도를 좌우합니다.

    • 코사인 유사도: 정규화된 벡터, 의미 유사도에 일반적
    • 내적(dot product): 정규화 안 된 벡터에서 사용, 크기 반영
    • 유클리드 거리: 절대적 거리, 일부 모델에서만 적합

    원인 5~6: 질문과 문서의 표현 격차

    사용자는 “환불 어떻게 해요”라고 묻지만 문서에는 “청약 철회 절차”라고 적혀 있으면 순수 의미 검색만으로는 잘 안 잡힙니다. 이런 어휘 격차에는 키워드 검색(BM25)과 벡터 검색을 함께 쓰는 하이브리드 검색이 효과적입니다. 또한 질문을 LLM으로 확장·재작성하는 쿼리 변환도 도움이 됩니다.

    원인 7: 리랭킹 부재

    벡터 검색의 상위 결과가 정확히 1등은 아닐 때가 많습니다. 상위 후보를 넉넉히 뽑은 뒤 리랭커로 다시 정렬하면, 같은 검색 결과에서도 실제로 답에 쓰이는 청크의 적중률이 올라갑니다.

    진단 순서를 기억하세요: 정제 → 청킹 → 임베딩 모델 → 거리 설정 → 하이브리드/쿼리 변환 → 리랭킹. 위에서부터 막혀 있으면 아래를 아무리 손봐도 효과가 없습니다.

    정리

    벡터검색 문제는 대부분 검색 알고리즘이 아니라 그 앞뒤 단계에서 발생합니다. 작은 평가셋(질문-정답 청크 쌍)을 만들어 두고, 한 번에 한 가지 변수만 바꾸며 적중률을 측정하면 원인을 빠르게 좁힐 수 있습니다.

  • 임베딩 모델 선택 가이드: 한국어 RAG에서 무엇을 기준으로 고를까

    임베딩 모델 선택 가이드: 한국어 RAG에서 무엇을 기준으로 고를까

    RAG 파이프라인에서 임베딩 모델은 검색 품질의 천장을 결정합니다. 그런데 모델 종류가 너무 많아 무엇을 기준으로 골라야 할지 막막합니다. 이 글에서는 한국어 RAG를 전제로 임베딩 모델 선택 기준을 실무적으로 비교합니다.

    기준 1: 다국어·한국어 성능

    한국어 문서를 다룬다면 다국어 학습 데이터 비중과 한국어 벤치마크 점수를 먼저 봐야 합니다. 영어 전용 모델은 영어 벤치마크에서 아무리 높아도 한국어 의미 검색에서 무너지는 경우가 흔합니다. 가능하면 자신의 실제 문서로 작은 테스트셋을 만들어 직접 비교하는 것이 가장 확실합니다.

    기준 2: 벡터 차원과 저장 비용

    차원이 높을수록 표현력은 좋아지지만 저장 공간과 검색 지연이 늘어납니다. 1024차원과 384차원은 메모리 사용량이 거의 3배 차이가 납니다. 문서가 수백만 건이라면 차원 수가 인프라 비용에 직접 반영됩니다.

    • 384차원: 가볍고 빠름, 대규모 인덱스에 유리
    • 768차원: 균형점, 가장 보편적
    • 1024차원 이상: 표현력 우수, 비용과 지연 증가

    기준 3: 최대 입력 길이

    임베딩 모델마다 한 번에 처리 가능한 토큰 한도가 다릅니다. 512토큰 한도 모델에 800토큰 청크를 넣으면 뒷부분이 잘려 의미가 손실됩니다. 청킹 전략과 임베딩 모델의 입력 한도는 반드시 함께 설계해야 합니다.

    기준 4: 호스팅 방식과 비용

    API형 임베딩은 도입이 쉽지만 호출량이 많으면 비용이 누적되고 외부로 데이터가 나갑니다. 오픈 모델을 자체 호스팅하면 데이터 통제와 단가는 좋아지지만 GPU 운영 부담이 생깁니다. 민감 데이터가 있다면 자체 호스팅이 사실상 필수입니다.

    벤치마크 1위 모델이 우리 데이터에서도 1위라는 보장은 없습니다. 공개 리더보드는 후보를 좁히는 용도로만 쓰고, 최종 선택은 자체 평가셋으로 검증하세요.

    흔한 실수

    가장 흔한 실수는 한 번 고른 임베딩 모델을 나중에 바꾸는 것을 가볍게 보는 것입니다. 모델을 바꾸면 전체 문서를 다시 임베딩해야 하므로, 수백만 건 규모에서는 상당한 시간과 비용이 듭니다. 그래서 처음 선택 시 확장성을 함께 고려해야 합니다. 또 다른 실수는 질문과 문서를 서로 다른 모델로 임베딩하는 것으로, 이 경우 벡터 공간이 달라 검색이 전혀 동작하지 않습니다.

    정리

    임베딩 모델은 한국어 성능, 차원, 입력 길이, 호스팅 비용의 네 축으로 비교하고, 최종 결정은 반드시 자체 데이터로 검증하세요. 작은 평가셋 하나가 리더보드 100개보다 정확한 답을 줍니다.