HyDE: 가상 문서 임베딩
LLM으로 가상의 ‘이상적인’ 답변을 생성하고 임베딩한 뒤 이를 사용해 검색해보세요. 짧은 질의 임베딩보다 효과적입니다.
HyDE: 가상 문서 임베딩은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
쿼리 임베딩의 문제
사용자 쿼리는 대개 짧고 검색하려는 문서와 전혀 비슷하지 않습니다.
- 쿼리: "내 키보드를 고쳐 줘"
- 문서: "기계식 키보드의 키가 걸린다면 이소프로필 알코올로 스위치를 청소할 수 있습니다..."
벡터가 의미적으로 멀리 떨어져 있어 검색에서 문서를 놓칩니다.
HyDE 아이디어
HyDE = Hypothetical Document Embeddings(Gao 외, 2022)입니다.
- LLM에 쿼리에 대한 가짜 "이상적인 답변"을 작성하도록 요청합니다
- 쿼리가 아니라 가짜 답변을 임베딩합니다
- 그 벡터를 사용하여 실제 말뭉치를 검색합니다
작동하는 이유
가상의 답변은 실제 문서처럼 보입니다(비슷한 어휘와 비슷한 구조를 가짐). 따라서 임베딩이 실제 문서 임베딩 가까이에 위치하고, 검색에서 문서를 더 안정적으로 찾을 수 있습니다.
Implementation
def hyde_search(query, k=5):
# Step 1: hallucinate an answer
hypo_answer = llm.invoke(f'Please write a passage to answer the question: {query}').content
# Step 2: embed it
vec = embed(hypo_answer)
# Step 3: retrieve
return vector_db.query(vec, k=k)답변이 틀려도 OK
HyDE의 가상 답변은 사실과 다를 수 있지만 괜찮습니다. 검색에는 그 임베딩만 사용합니다. 그런 다음 검색된 REAL 문서를 최종 답변 생성에 사용합니다.
Code Example with LangChain
from langchain.chains import HypotheticalDocumentEmbedder
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
embeddings = HypotheticalDocumentEmbedder.from_llm(
ChatOpenAI(),
OpenAIEmbeddings(),
'web_search' # built-in prompt template
)
vector = embeddings.embed_query('How do I fix a sticky keyboard?')비용 절충
HyDE는 쿼리마다 LLM 호출을 한 번 추가합니다. 다음과 같은 경우에 사용할 가치가 있습니다:
- 쿼리 표현이 문서 표현과 매우 다른 경우
- 검색 재현율이 병목인 경우
- 말뭉치에 사용자가 바꾸어 표현하는 기술 문서가 포함된 경우
다중 샘플 HyDE
N개의 가상 답변을 생성하고, 각각을 임베딩한 다음, 각각에 대해 상위 K개를 검색하여 결과를 합집합으로 묶습니다. 비용은 더 많이 들지만 까다로운 쿼리의 재현율이 높아집니다.
hypos = [llm.invoke(...).content for _ in range(3)]
vecs = [embed(h) for h in hypos]
results = set()
for v in vecs:
results.update(vector_db.query(v, k=5))HyDE와 재순위화 결합
재현율에는 HyDE를, 정밀도에는 교차 인코더를 사용합니다:
- HyDE가 상위 50개를 검색합니다
- 교차 인코더가 상위 5개로 재순위화합니다
- LLM이 상위 5개를 사용하여 답변합니다
HyDE를 사용하면 안 되는 경우
- 쿼리가 이미 문서 언어와 일치하는 경우(FAQ)
- 지연 시간이 중요한 경로
- 단순한 검색으로 충분한 매우 작은 말뭉치
코드에 사용하는 HyDE
코드 검색에서는 사용자가 찾는 함수를 환각으로 생성하고, 이를 임베딩한 뒤 실제 함수를 검색합니다.
code_hypo = llm.invoke(f'Write the Python function that does: {user_request}').content
results = code_index.search(embed(code_hypo))변형: 단계 후퇴 프롬프팅
관련 기법으로, 먼저 모델에 더 일반적인 질문을 도출하도록 요청합니다("키보드를 어떻게 청소합니까?" -> "기계식 키보드에 적용되는 일반적인 청소 방법은 무엇입니까?"). 그런 다음 이를 임베딩하고 검색합니다.
HyDE가 작동하는 이유
원시 쿼리를 임베딩하는 것보다 HyDE가 더 잘 검색하는 이유는 무엇입니까?
복습
HyDE는 답변을 환각으로 생성하고, THAT을 임베딩한 다음 검색합니다. LLM 호출이 한 번 추가되지만 어렵거나 바꾸어 표현된 쿼리, 기술 쿼리의 검색 성능이 향상됩니다.
자주 묻는 질문
“HyDE: 가상 문서 임베딩” 강의는 무료인가요?
네 — “HyDE: 가상 문서 임베딩” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
“HyDE: 가상 문서 임베딩”에서 뭘 배우나요?
LLM으로 가상의 ‘이상적인’ 답변을 생성하고 임베딩한 뒤 이를 사용해 검색해보세요. 짧은 질의 임베딩보다 효과적입니다. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Agents을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“HyDE: 가상 문서 임베딩” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 교차 인코더를 사용한 재순위화
- HyDE: 가상 문서 임베딩
- 다중 벡터 검색(ColBERT)
- RAG 평가(RAGAS, Recall@K)