HyDE 查询转换¶
如果你在 Colab 上打开此 Notebook,你可能需要安装 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
# load documents
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>"))
在去了 RISD 之后,Paul Graham 继续追求他对绘画和艺术的热情。他在佛罗伦萨的 Accademia di Belli Arti 的绘画系学习,并参加了入学考试。他还继续撰写他的书《On Lisp》,并从事咨询工作赚钱。在学校里,Paul Graham 和其他学生达成了一项协议,教师不要求学生学习任何东西,作为回报,学生也不要求教师教授任何东西。Paul Graham 是少数真正画了提供的裸体模特的学生之一,而其他学生则把时间花在聊天或偶尔尝试模仿他们在美国艺术杂志上看到的东西上。模特后来住在了 Paul Graham 街对面,她通过模特工作和为当地古董商制作赝品来谋生。
现在,我们使用 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>"))
在去了 RISD 之后,Paul Graham 在 Interleaf 担任顾问,然后与 Robert Morris 共同创立了 Viaweb。他们创建了一个允许用户通过网络构建网站的软件,并从 Idelle 的丈夫 Julian 那里获得了 10,000 美元的种子资金。他们将公司 10% 的股份给了 Julian,以换取初期的法律工作和商业建议。由于 Paul Graham 欠税,他的净资产为负,因此种子资金对他来说是生活的必需。他们在 1996 年 1 月开业,共有 6 家商店。
Paul Graham 在他的期权行权后离开了雅虎,回到了纽约。他恢复了旧的生活,但他现在很富有。他尝试画画,但没有什么精力或抱负。他最终搬回了剑桥,开始着手开发一个用于制作网络应用的 Web 应用。他招募了 Dan Giffin 和两名本科生来帮助他,但他最终意识到他不想经营公司,于是决定将项目的一部分作为开源项目构建。他和 Dan 在他买的剑桥的一所房子里开发了一种新的 Lisp 方言,他称之为 Arc。他作为开源项目构建的那个子集就是新的 Lisp,其
在此示例中,HyDE
显著提高了输出质量,它准确地“幻化”出 Paul Graham 在 RISD 之后所做的事情(见下文),从而提高了嵌入质量和最终输出。¶
query_bundle = hyde(query_str)
hyde_doc = query_bundle.embedding_strs[0]
hyde_doc
1985 年从罗德岛设计学院 (RISD) 毕业后,Paul Graham 继续从事计算机编程事业。他曾在 Viaweb 等多家公司担任软件开发人员,Viaweb 是他于 1995 年共同创立的公司。Viaweb 最终于 1998 年被雅虎收购,Graham 利用这笔收入成为了一名风险投资家。他于 2005 年创立了 Y Combinator,这是一家创业加速器,已帮助启动了 2,000 多家公司,其中包括 Dropbox、Airbnb 和 Reddit。Graham 还撰写了几本关于编程和创业的书籍,并且他仍然是科技行业的活跃投资者。
失败案例 1:当查询在没有上下文的情况下可能被误解时,HyDE 可能会产生误导。¶
query_str = "What is Bel?"
不进行转换查询会得到合理的结果¶
response = query_engine.query(query_str)
display(Markdown(f"<b>{response}</b>"))
Bel 是 Paul Graham 用 Arc 花四年时间(2015 年 3 月 26 日至 2019 年 10 月 12 日)编写的一种编程语言。它基于 John McCarthy 的原始 Lisp,但增加了额外的功能。它是一个用代码表达的规范,旨在成为计算的正式模型,是图灵机的替代方案。
使用 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>"))
Bel 是 Paul Graham 的笔名,他是上下文信息的作者,需要种子资金才能生活,并且参与了一项成为 Y Combinator 模式的交易。
在此示例中,HyDE
在没有文档上下文的情况下误解了 Bel(见下文),导致生成了完全不相关的嵌入字符串和糟糕的检索结果。¶
query_bundle = hyde(query_str)
hyde_doc = query_bundle.embedding_strs[0]
hyde_doc
Bel 是一个古老的闪米特神,起源于中东。他通常与太阳联系在一起,有时被称为“天堂之主”。Bel 也被称为生育、富足和繁荣之神。他通常被描绘成一头公牛或一个长着公牛头的人。在某些文化中,Bel 被视为一位创造神,负责创造宇宙。他也与冥界有关联,有时被视为死亡之神。Bel 也与正义联系在一起,通常被视为无辜者的守护者。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>"))
作者可能会说,艺术是一种比工程更持久、更独立的工作形式。他们提到今天编写的软件在几十年后就会过时,而系统工作也不会持久。相比之下,他们注意到绘画可以持续数百年,并且作为艺术家有可能谋生。他们还提到,作为一名艺术家,你可以真正独立,不需要有老板或研究资金。此外,他们注意到艺术可以成为那些可能无法获得传统就业形式的人(例如示例中那位通过模特和为当地古董商制作赝品来谋生的模特)的收入来源。