RAG에 대해 공부하던 도중, HyDE라는 것을 알게 되었다.
🎁 리랭킹과 하이드라는 두 가지 방식을 통해 검색 시스템의 성능을 향상시킬 수 있다.
→ RAG 시스템에 이러한 검색 성능 향상 기법들을 필요에 따라 적절히 적용한다면 검색의 정확도를 향상시키고 더욱 신뢰할 수 있는 답변을 얻을 수 있다.
🎁 코사인 유사도가 1에 가까울수록(유사할수록), 코사인 거리는 0에 가까워진다.
하이드는 검색 성능을 향상시키는 방법 중 하나이다.
전통적인 검색 시스템에서는 사용자의 질의를 직접 임베딩하여 문서를 검색했지만, 하이드는 질의에 대한 가상의 답변 문서(=LLM의 답변)를 먼저 생성한 후 이를 기반으로 검색을 수행하여 검색 성능을 높인다.
- 가상 문서 생성 단계
: LLM을 활용하여 사용자의 질문에 대한 답변 문서를 생성하는 단계
- 임베딩 및 검색 단계
: 위에서 얻은 LLM의 답변을 임베딩 모델을 통해 벡터화하고, 이 벡터를 사용하여 벡터 데이터베이스에서 유사한 문서들을 검색한다.
🎁 다시 말해, 사용자의 질문으로 검색하는 것이 아니라 사용자의 질문에 대한 LLM의 일반적인 답변으로 검색을 수행한다.
- 최종 답변 생성
: 벡터 데이터베이스에서 검색된 관련 문서들을 컨텍스트로 활용하여 LLM이 최종 답변을 생성한다.
<하이드의 장점>
🎁 질의의 의미적 확장성
🎁 검색 정확도 향상
<하이드 구현 시 고려해야 할 주요 요소>
HyDE (Hypothetical Document Embeddings)는 OpenAI에서 제안한 RAG (Retrieval-Augmented Generation) 시스템의 성능을 개선하기 위한 pre-retrieval 전략 중 하나
- 기존 dense search vs. HyDE 방식
- 왜 쓰는가? (장점)
- 예시 Query: "왜 지구는 둥근가요?"
지구는 중력에 의해 둥근 형태를 유지하게 됩니다.
질량이 충분히 크면 물체는 중력에 의해 중심을 향해 당겨지게 되고,
이로 인해 구형 형태가 형성됩니다. 이러한 과정은 행성과 별 등 큰 천체에서 흔히 발생합니다.
- HyDE의 특징
| 항목 | 설명 |
|---|---|
| 목적 | query 자체보다 더 정보가 풍부한 임베딩 생성 |
| 방식 | LLM이 생성한 가상 문서를 벡터화 |
| 효과 | 검색 정확도 향상, 특히 짧거나 모호한 질문에 강함 |
| 사용 위치 | Pre-Retrieval 단계 (질문을 재구성하는 과정) |
- 🧪 실제 적용 시 고려사항
- 간단히 Python으로 시뮬레이션
- OpenAI API를 통해 아래와 같은 과정을 거칠 수 있다
from openai import OpenAI
client = OpenAI(api_key="...")
# 1. 가상 문서 생성
query = "왜 지구는 둥근가요?"
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": f"{query}에 대해 짧은 문서 형식으로 설명해줘."}],
temperature=0.7,
)
hypothetical_doc = response.choices[0].message.content
# 2. 임베딩 생성
embedding_response = client.embeddings.create(
model="text-embedding-3-small",
input=hypothetical_doc
)
embedding = embedding_response.data[0].embedding