39 LlamaIndex中的HyDE查询转换:提升查询质量

LlamaIndex中的HyDE查询转换:提升查询质量

在本笔记本中,我们将探讨如何在LlamaIndex中使用HyDE(Hypothetical Document Embeddings)查询转换来提升特定时间查询的质量。如果你在Colab上打开此笔记本,你可能需要安装LlamaIndex。

安装LlamaIndex

!pip install llama-index

下载数据

!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'

加载文档,构建VectorStoreIndex

import logging
import sys

logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.indices.query.query_transform import HyDEQueryTransform
from llama_index.core.query_engine import TransformQueryEngine
from IPython.display import Markdown, display

# 加载文档
documents = SimpleDirectoryReader("./data/paul_graham/").load_data()
index = VectorStoreIndex.from_documents(documents)

示例:HyDE提升特定时间查询

查询字符串

query_str = "what did paul graham do after going to RISD"

不使用转换查询

相同的查询字符串用于嵌入查找和总结。

query_engine = index.as_query_engine()
response = query_engine.query(query_str)
display(Markdown(f"<b>{response}</b>"))

使用HyDEQueryTransform查询

生成一个假设文档并用于嵌入查找。

hyde = HyDEQueryTransform(include_original=True)
hyde_query_engine = TransformQueryEngine(query_engine, hyde)
response = hyde_query_engine.query(query_str)
display(Markdown(f"<b>{response}</b>"))

在这个例子中,HyDE显著提升了输出质量,通过幻觉准确地描述了Paul Graham在RISD之后做了什么,从而提高了嵌入质量和最终输出。

失败案例1:HyDE可能在无上下文的情况下误导查询

查询字符串

query_str = "What is Bel?"

不使用转换查询

response = query_engine.query(query_str)
display(Markdown(f"<b>{response}</b>"))

使用HyDEQueryTransform查询

response = hyde_query_engine.query(query_str)
display(Markdown(f"<b>{response}</b>"))

在这个例子中,HyDE在没有文档上下文的情况下误解了Bel,导致完全不相关的嵌入字符串和糟糕的检索结果。

失败案例2:HyDE可能偏移开放式查询

查询字符串

query_str = "What would the author say about art vs. engineering?"

不使用转换查询

response = query_engine.query(query_str)
display(Markdown(f"<b>{response}</b>"))

使用HyDEQueryTransform查询

response = hyde_query_engine.query(query_str)
display(Markdown(f"<b>{response}</b>"))

在这个例子中,HyDEQueryTransform导致了一个更偏颇的输出。

通过这些示例,我们可以看到HyDE查询转换在特定情况下可以显著提升查询质量,但在某些情况下也可能导致误导或偏颇的结果。因此,在使用HyDE查询转换时,需要谨慎考虑其适用性和潜在的局限性。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值