0Pricing
AI Agents · 강의

HyDE: 가상 문서 임베딩

LLM으로 가상의 ‘이상적인’ 답변을 생성하고 임베딩한 뒤 이를 사용해 검색해보세요. 짧은 질의 임베딩보다 효과적입니다.

HyDE: 가상 문서 임베딩은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

쿼리 임베딩의 문제

사용자 쿼리는 대개 짧고 검색하려는 문서와 전혀 비슷하지 않습니다.

  • 쿼리: "내 키보드를 고쳐 줘"
  • 문서: "기계식 키보드의 키가 걸린다면 이소프로필 알코올로 스위치를 청소할 수 있습니다..."

벡터가 의미적으로 멀리 떨어져 있어 검색에서 문서를 놓칩니다.

HyDE 아이디어

HyDE = Hypothetical Document Embeddings(Gao 외, 2022)입니다.

  1. LLM에 쿼리에 대한 가짜 "이상적인 답변"을 작성하도록 요청합니다
  2. 쿼리가 아니라 가짜 답변을 임베딩합니다
  3. 그 벡터를 사용하여 실제 말뭉치를 검색합니다

작동하는 이유

가상의 답변은 실제 문서처럼 보입니다(비슷한 어휘와 비슷한 구조를 가짐). 따라서 임베딩이 실제 문서 임베딩 가까이에 위치하고, 검색에서 문서를 더 안정적으로 찾을 수 있습니다.

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를, 정밀도에는 교차 인코더를 사용합니다:

  1. HyDE가 상위 50개를 검색합니다
  2. 교차 인코더가 상위 5개로 재순위화합니다
  3. 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 교차 인코더를 사용한 재순위화
  2. HyDE: 가상 문서 임베딩
  3. 다중 벡터 검색(ColBERT)
  4. RAG 평가(RAGAS, Recall@K)
← AI Agents(으)로 돌아가기