
CLIP 아저씨, 강력한 RAG 토대 앞에 패배하다
요약
이미지 검색 시스템에서 CLIP을 활용한 rerank 단계가 검색 엔진 교체 후 불필요해진 사례를 다룹니다. SearXNG 사용 시에는 CLIP이 노이즈를 제거하는 역할을 했으나, Tavily로 백엔드를 교체하자 검색 결과의 질이 높아져 CLIP의 필요성이 사라졌습니다.
핵심 포인트
- 검색 엔진(SearXNG vs Tavily)의 품질이 후속 RAG 단계에 미치는 영향
- CLIP을 활용한 이미지 rerank의 역할과 한계
- 검색 토대의 개선이 복잡한 보정 로직을 대체할 수 있음
- Similarity 스코어 분석을 통한 모델의 유효성 검증
안녕하세요, CLIP 아저씨입니다.
쿼리 확장(Query Expansion)에 hybrid 검색, 그리고 마무리로 rerank.
크으~ 참을 수 없네. 이것이 Advanced RAG라는 것이군요.
……라고 생각하던 시기가 있었습니다.
그 마무리 단계인 rerank에 CLIP을 사용하고 있었습니다. 검색으로 가져온 이미지 후보들을 CLIP의 similarity(유사도)로 다시 정렬합니다. 문맥에서 벗어난 이미지는 점수를 낮추고, 원하는 이미지는 상단으로 올립니다.
정신을 차려보니, 검색 정밀도를 높이고 싶었던 것인데 rerank의 스코어를 노려보고 있었습니다.
우와ㅋ, 그냥 이미지를 찾고 싶을 뿐인데 CLIP의 기분을 맞추기 시작했다.
예전의 감각으로는, 검색 결과에 후속 단계를 쌓을수록 강력해진다, 였습니다.
검색으로 후보를 가져온다. rerank로 다시 정렬한다. 노이즈를 걸러낸다. 상위 항목을 정돈한다.
층을 쌓을수록 출력의 질이 올라가는 기분이 들었습니다.
물론, rerank는 지금도 유효합니다. 검색 결과에 노이즈가 섞이는 현장에서는 후단에서 보정하는 의미가 있습니다.
다만, 그 전제는 '노이즈가 섞인다'는 것이었습니다.
이전의 이미지 검색 백엔드(Backend)는 SearXNG였습니다.
여기서 한 가지 문제가 발생하고 있었습니다.
tech casual
과 같은 쿼리를 던지면, 패션 이미지가 아니라 tech에 끌려 기술 계열의 아이콘이나 관계가 옅은 이미지가 섞입니다.
패션 시각 예시를 원하는 것인데 기술 계열 아이콘이 돌아온다. 이건 곤란합니다.
그래서 CLIP을 넣었습니다. 쿼리는 텍스트 측에서, 후보는 이미지 측에서 임베딩(Embedding)하여, similarity로 문맥에서 벗어난 이미지를 낮춥니다.
이때 CLIP은 제대로 일을 하고 있었습니다. 벗어난 후보를 걸러낸다는 의미에서는 효과가 있었습니다.
그 후, 이미지 검색 백엔드를 Tavily로 바꿨습니다. CLIP을 위해서가 아니라, 검색 전체를 Tavily로 옮기는 흐름의 일부였습니다.
그런데 조금 이상한 일이 일어났습니다. CLIP의 similarity 스코어를 보니, 상위 후보들이 대략 0.3 정도로 나란히 늘어서 있었습니다.
candidate 1: 0.31
candidate 2: 0.30
candidate 3: 0.30
...
이러면 rerank를 해도 순위가 거의 바뀌지 않습니다. CLIP이 랭킹 신호를 거의 내보내지 않고 있는 것입니다.
우와ㅋ, 이거 일 안 하고 있잖아.
처음에는 CLIP이 고장 난 건가 생각했습니다. 모델 로딩이 이상한가.
하지만 후보 자체를 보고 생각이 바뀌었습니다.
Tavily는 애초에 문맥에서 벗어난 이미지를 반환하지 않았던 것입니다. tech casual에서 tech 아이콘이 섞이는 그 문제가 일어나지 않았습니다.
즉, CLIP의 스코어가 나란히였던 것은 CLIP이 고장 났기 때문이 아니었습니다. CLIP이 걸러내야 할 '벗어난 후보'가 처음부터 후보에 들어있지 않았던 것입니다.
rerank할 대상의 질이 올라간 결과, rerank의 차례가 없어지고 있었습니다.
CLIP은 고장 나지 않았습니다. CLIP이 풀고 있던 문제가 사라졌을 뿐입니다.
이것은 조금 흥미로운 구조였습니다.
CLIP은 SearXNG의 약점에 대한 패치(Patch)였습니다. 문맥에서 벗어난 이미지가 섞이는 문제가 있었기에, 그 위에 CLIP을 얹어 보정하고 있었습니다.
하지만 토대를 Tavily로 바꾸자 보정해야 할 대상이 없어졌습니다.
SearXNG 시대:
문맥에서 벗어난 이미지가 섞임
→ CLIP으로 걸러냄 (효과가 있었음)
...
CLIP은 '틀렸던' 것이 아닙니다. 어느 시점에는 확실히 필요했습니다. 그리고 토대가 좋아짐으로써 불필요해졌습니다.
고장 나서 제거한 것이 아니라, 풀고 있던 문제가 사라져서 제거한 것입니다.
만약 similarity 스코어를 보고 있지 않았다면 아마 제거하지 않았을 것입니다.
CLIP의 rerank 단계는 코드상으로는 동작하고 있었습니다. 에러도 나지 않습니다. 처리도 통과합니다. 이미지도 돌아옵니다. 겉보기에는 제대로 작동하고 있습니다.
하지만 스코어를 보면 랭킹에 대한 기여가 거의 없었습니다.
동작하고 있는 것과 효과가 있는 것은 다릅니다.
이 부분을 혼동하면 '동작하니까 남겨두자'라며 불필요한 부품을 계속 떠안게 됩니다. 관측할 수 있는 상태로 만들어 두었기에 효과가 없다는 것을 깨달을 수 있었습니다.
게다가 CLIP을 제거하자 부수적인 것들도 사라졌습니다. 텍스트 모델과 이미지 모델, 그것을 로드하기 위한 로컬 모델 캐시, 다운로드 관련 번거로움. 이것들이 한꺼번에 필요 없게 되었습니다.
패션의 시각적 예시를 반환한다는 기능은 변하지 않았습니다. 하지만 그 기능을 뒷받침하기 위해 떠안고 있던 로컬 모델(local model)이 하나 사라졌습니다.
하고 있는 일은 같지만, 떠안고 있는 것은 줄었습니다.
Docker를 제거하고, Vector DB를 제거하고, 이번에는 CLIP rerank도 제거했습니다. 처음에는 인프라 수족관 같았던 local stack도, 조금씩 수조 정도의 크기로 돌아온 느낌입니다.
보세요, 또 LLM 이야기를 하고 있지 않습니다.
다만, 이것은 "로컬 모델은 필요 없다"는 이야기가 아닙니다.
CLIP이 효과가 없었던 이유는, Tavily가 문맥에 맞는 이미지를 반환하게 되었기 때문입니다. 만약 미래에 다른 백엔드(backend)에서 다시 문맥에서 벗어난 이미지가 섞이게 된다면, rerank는 다시 필요해질지도 모릅니다. 그때는 다시 넣으면 됩니다.
여기서 한 것은, 점수(score)를 관측하여 현재 구성에서는 효과가 없음을 확인하고, 제거한 것뿐입니다. 그것뿐입니다. 토대가 바뀌면 판단도 다시 바뀝니다.
CLIP의 텍스트 모델. 이미지 모델. similarity. rerank 단계. 로컬 모델 캐시.
대전 감사합니다.
CLIP 아저씨, 강력한 RAG 토대 앞에 패배했습니다.
하지만 아마 이것은 나쁜 패배가 아닙니다. 패배한 상대는 외부 서비스도, 더 강력한 모델도 아니었습니다. 스스로 토대를 다진 retrieval 그 자체였습니다.
토대가 약할 때는 그 위에 얹은 patch가 일을 하고 있는 것처럼 보입니다. 하지만 토대를 다지면, patch가 해결하던 문제 자체가 사라집니다.
덧셈(rerank)으로 해결하려던 것이 뺄셈(토대)으로 사라졌습니다. 이것은 처음부터 가장 효과적인 곳이 상부 구조가 아니라 토대 쪽이었다는 이야기입니다.
rerank가 정말로 효과가 있는지, 토대가 좋아지면 patch가 불필요해지는 구조를 CLIP뿐만 아니라 hybrid reranker나 bge-m3, MMR까지 나열하며 일반화하고 있습니다.
『검색 결과를 늘리기 전에 봐야 할 RAG 설계』
rerank를 믿기 전에, 관측할 수 있는 지점이 있었다는 이야기입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기