HyDE (Hypothetical Document Embeddings)是一种搜索技术,它通过生成虚构文档,并将其转化成向量,来帮助搜索系统在没有相关性标签的情况下 找到相关信息。 它能够过滤掉虚构文档中的错误信息,具有强大的搜索性能,适用于多种任务和语言。
案例:https://github.com/BloopAI/bloop 使用 HyDE 生成假设性代码,以进行代码的相似式检索。
HyDE 实现
HyDE 由三个步骤组成:
- 生成假设文档:使用 zero-shot 方法,指导一个指令驱动的语言模型(如 InstructGPT)生成一个假设性文档。这个文档捕获了相关性模式,尽管它是虚构的,并且可能包含错误细节。
- 对比编码器:接着,通过一个无监督对比学习的编码器(如 Contriever),将生成的假设文档编码成一个嵌入向量。这个向量在语料库嵌入空间中确定了一个邻域,基于向量相似性从中检索出相似的真实文档。
- 关联实际语料库搜索:第二步将生成的文档与实际语料库进行关联,将生成的向量在本地知识库中进行相似性检索,寻找最终结果。
即,根据用户的输入,生成一个假设性的文档,然后将其转换成向量,最后在本地知识库中进行相似性检索。
示例
ChocoBuilder 实现示例:
ExplainQuery(
question = "如何通过 ID 查找代码库变更信息?",
englishQuery = "query git path change count by system id",
originLanguageQuery = "// 通过 id 查找 Git 代码库路径变更统计信息",
hypotheticalCode = """
|```kotlin
| @SqlQuery(
| "select system_id as systemId, line_count as lineCount, path, changes" +
| " from scm_path_change_count where system_id = :systemId"
| )
| fun findCountBySystemId(systemId: Long): List<GitPathChangeCount>
|```""".trimMargin()
)
相关资源
GitHub: https://github.com/texttron/hyde 原始论文信息:Precise Zero-Shot Dense Retrieval without Relevance Labels
其它: