RAG에서 놓친 단계: 왜 당신의 Vector DB가 부풀어 있는가 (그리고 로컬에서 해결하는 방법)

발행: (2025년 12월 21일 오전 01:07 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Introduction

우리는 LLM 프롬프트를 최적화하고, 검색 파라미터(k‑NN)를 조정하며, 최고의 임베딩 모델을 선택하는 데 수많은 시간을 투자합니다. 하지만 종종 방 안의 코끼리, 즉 데이터 품질을 간과합니다.

내부 회사 데이터(로그, 티켓, 문서, 이메일 등)를 사용해 RAG(검색 기반 생성) 파이프라인을 구축하고 있다면 Semantic Duplicate Problem을 겪어봤을 가능성이 높습니다.

The Problem: Different Words, Same Meaning

표준 중복 제거 도구(예: pandas.DataFrame.drop_duplicates() 또는 SQL DISTINCT)는 문자열 수준에서 작동하며 정확히 일치하는 경우만 찾습니다.

예시 로그 항목

Error: Connection to database timed out after 3000ms.
DB Connection Failure: Timeout limit reached (3s).

표준 스크립트에서는 두 개의 고유 행으로 인식됩니다.
LLM(및 인간)에게는 동일한 내용입니다.

이러한 행 10,000개를 벡터 데이터베이스(Pinecone, Milvus, Weaviate)에 삽입하면:

  • 💸 비용 – 중복된 벡터를 저장하는 데 비용이 발생합니다.
  • 📉 검색 품질 – 사용자가 “DB가 왜 실패했나요?”라고 물으면 동일한 오류의 여러 변형이 반환되어 다른 관련 정보를 가립니다.
  • 😵 모델 환각 – 반복적인 컨텍스트가 출력 품질을 저하시킵니다.

The Solution: Semantic Deduplication

중복 제거는 **문법(텍스트)**이 아니라 **의미(벡터)**를 기준으로 해야 합니다.

경량이며 프라이버시를 우선시하고, Spark 클러스터나 외부 API 호출 없이 로컬에서 실행되는 도구를 찾지 못해 직접 만들었습니다: EntropyGuard.

EntropyGuard – A Local‑First ETL Engine

EntropyGuard는 파이썬으로 작성된 오픈소스 CLI 도구로, 데이터가 벡터 데이터베이스에 들어가기 전에 정제합니다. 다음 세 가지 핵심 문제를 해결합니다:

  • Semantic Deduplicationsentence‑transformers와 FAISS를 사용해 코사인 유사도로 중복을 찾습니다.
  • Sanitization – PII(이메일, 전화번호)와 HTML 잡음을 제거합니다.
  • Privacy – CPU만으로 100 % 로컬에서 실행되며, 데이터 유출이 없습니다.

Tech Stack (Hard Tech)

ComponentChoiceReason
EnginePolars LazyFrame스트리밍 실행; 16 GB RAM 노트북에서도 10 GB CSV를 메모리 전체에 로드하지 않고 처리 가능
Vector SearchFAISS (Facebook AI Similarity Search)CPU 전용 초고속 벡터 비교
ChunkingNative recursive chunker (paragraph → sentence)LangChain 같은 무거운 프레임워크의 부피를 피함
IngestionExcel (.xlsx), Parquet, CSV, JSONL네이티브 지원

How It Works (The Code)

Installation

pip install "git+https://github.com/DamianSiuta/entropyguard.git"

Running an Audit (Dry Run)

entropyguard \
  --input raw_data.jsonl \
  --output clean_data.jsonl \
  --dedup-threshold 0.85 \
  --audit-log audit_report.json

드라이 런은 어떤 행이 왜 삭제될지 정확히 보여주는 JSON 감사 로그를 생성합니다—컴플라이언스 팀에 필수적입니다.

What Happens Under the Hood

  1. Embeddingall-MiniLM-L6-v2와 같은 소형 모델을 사용해 로컬에서 임베딩을 생성합니다.
  2. Clustering – FAISS로 임베딩을 클러스터링합니다.
  3. Deduplication – 코사인 유사도가 지정된 임계값(예: 0.85)을 초과하는 이웃을 제거합니다.

Benchmark: 99.5 % Noise Reduction

10 000행(노이즈가 심한 HTML 태그, 문장 재구성, 오타 등)으로 구성된 합성 데이터셋에 대한 스트레스 테스트 결과:

  • Raw Data: 10 000 rows
  • Cleaned Data: ~50 rows
  • Execution Time: (not specified)

데이터 엔지니어링 커뮤니티의 피드백을 적극적으로 찾고 있습니다. 더러운 RAG 데이터셋에 어려움을 겪고 있다면 EntropyGuard를 한번 사용해보고, 어떻게 작동했는지 알려주세요!

Back to Blog

관련 글

더 보기 »

창고 활용에 대한 종합 가이드

소개 창고는 근본적으로 3‑D 박스일 뿐입니다. Utilisation은 실제로 그 박스를 얼마나 사용하고 있는지를 측정하는 지표입니다. While logistics c...