Redian新闻
>
LlamaIndex :面向QA 系统的全新文档摘要索引

LlamaIndex :面向QA 系统的全新文档摘要索引

公众号新闻

来自:ChallengeHub

在这篇博文中,我们介绍了一种全新的 LlamaIndex 数据结构:文档摘要索引。我们描述了与传统语义搜索相比,它如何帮助提供更好的检索性能,并通过一个示例进行了介绍。



https://github.com/jerryjliu/llama_index

后台回复:入群,加入NLP交流大群~

1

背景

大型语言模型 (LLM) 的核心场景之一是对用户自己的数据进行问答。为此,我们将 LLM 与“检索”模型配对,该模型可以对知识语料库执行信息检索,并使用 LLM 对检索到的文本执行响应合成。这个整体框架称为检索增强生成。

今天大多数构建 LLM 支持的 QA 系统的用户倾向于执行以下某种形式的操作:

  1. 获取源文档,将每个文档拆分为文本块
  2. 将文本块存储在向量数据库中
  3. 在查询期间,通过嵌入相似性和/或关键字过滤器来检索文本块。
  4. 执行响应并汇总答案

由于各种原因,这种方法提供了有限的检索性能。

2

现有方法的局限性

使用文本块进行嵌入检索有一些限制。

  • 文本块缺乏全局上下文。通常,问题需要的上下文超出了特定块中索引的内容。
  • 仔细调整 top-k / 相似度分数阈值。假设值太小,你会错过上下文。假设值值太大,并且成本/延迟可能会随着更多不相关的上下文而增加,噪音增加。
  • 嵌入并不总是为问题选择最相关的上下文。嵌入本质上是在文本和上下文之间分别确定的。

添加关键字过滤器是增强检索结果的一种方法。但这也带来了一系列挑战。我们需要手动或通过 NLP 关键字提取/主题标记模型为每个文档充分确定合适的关键字。此外,我们还需要从查询中充分推断出正确的关键字。

3

文档摘要索引

在LlamaIndex中提出了一个新索引,它将为每个文档提取/索引非结构化文本摘要。该索引可以帮助提高检索性能,超越现有的检索方法。它有助于索引比单个文本块更多的信息,并且比关键字标签具有更多的语义。它还允许更灵活的检索形式:我们可以同时进行 LLM 检索和基于嵌入的检索。

4

怎么运行的

在构建期间,我们提取每个文档,并使用 LLM 从每个文档中提取摘要。我们还将文档拆分为文本块(节点)。摘要和节点都存储在我们的文档存储抽象中。我们维护从摘要到源文档/节点的映射。

在查询期间,我们使用以下方法根据摘要检索相关文档以进行查询:

  • 基于 LLM 的检索:我们向 LLM 提供文档摘要集,并要求 LLM 确定哪些文档是相关的+它们的相关性分数。
  • 基于嵌入的检索:我们根据摘要嵌入相似性(使用 top-k 截止值)检索相关文档。

请注意,这种检索文档摘要的方法(即使使用基于嵌入的方法)不同于基于嵌入的文本块检索。文档摘要索引的检索类检索任何选定文档的所有节点,而不是返回节点级别的相关块。

存储文档的摘要还可以实现基于 LLM 的检索。我们可以先让 LLM 检查简明的文档摘要,看看它是否与查询相关,而不是一开始就将整个文档提供给 LLM。这利用了 LLM 的推理能力,它比基于嵌入的查找更先进,但避免了将整个文档提供给 LLM 的成本/延迟

5

想法

带有摘要的文档检索可以被认为是语义搜索和所有文档的强力摘要之间的“中间地带”。我们根据与给定查询的摘要相关性查找文档,然后返回与检索到的文档对应的所有节点

我们为什么要这样做?通过在文档级别检索上下文,这种检索方法为用户提供了比文本块上的 top-k 更多的上下文。但是,它也是一种比主题建模更灵活/自动化的方法;不再担心自己的文本是否有正确的关键字标签!

6

例子

让我们来看一个展示文档摘要索引的示例,其中包含关于不同城市的维基百科文章。

本指南的其余部分展示了相关的代码片段。您可以在此处找到完整的演练(这是笔记本链接)。

我们可以构建GPTDocumentSummaryIndex一组文档,并传入一个ResponseSynthesizer对象来合成文档的摘要。

from llama_index import (
    SimpleDirectoryReader,
    LLMPredictor,
    ServiceContext,
    ResponseSynthesizer
)
from llama_index.indices.document_summary import GPTDocumentSummaryIndex
from langchain.chat_models import ChatOpenAI

# load docs, define service context
...

# build the index
response_synthesizer = ResponseSynthesizer.from_args(response_mode="tree_summarize", use_async=True)
doc_summary_index = GPTDocumentSummaryIndex.from_documents(
    city_docs, 
    service_context=service_context,
    response_synthesizer=response_synthesizer
)

建立索引后,我们可以获得任何给定文档的摘要:

summary = doc_summary_index.get_document_summary("Boston")

接下来,我们来看一个基于 LLM 的索引检索示例。

from llama_index.indices.document_summary import DocumentSummaryIndexRetriever

retriever = DocumentSummaryIndexRetriever(
    doc_summary_index,
    # choice_select_prompt=choice_select_prompt,
    # choice_batch_size=choice_batch_size,
    # format_node_batch_fn=format_node_batch_fn,
    # parse_choice_select_answer_fn=parse_choice_select_answer_fn,
    # service_context=service_context
)
retrieved_nodes = retriever.retrieve("What are the sports teams in Toronto?")
print(retrieved_nodes[0].score)
print(retrieved_nodes[0].node.get_text())The retriever will retrieve a set of relevant nodes for a given index.`

请注意,除了文档文本之外,LLM 还返回相关性分数:

8.0
Toronto ( (listen) tə-RON-toh; locally [təˈɹɒɾ̃ə] or [ˈtɹɒɾ̃ə]) is the capital city of the Canadian province of Ontario. With a recorded population of 2,794,356 in 2021, it is the most populous city in Canada...

高级api

query_engine = doc_summary_index.as_query_engine(
  response_mode="tree_summarize", use_async=True
)
response = query_engine.query("What are the sports teams in Toronto?")
print(response)

底层api

# use retriever as part of a query engine
from llama_index.query_engine import RetrieverQueryEngine

# configure response synthesizer
response_synthesizer = ResponseSynthesizer.from_args()

# assemble query engine
query_engine = RetrieverQueryEngine(
    retriever=retriever,
    response_synthesizer=response_synthesizer,
)

# query
response = query_engine.query("What are the sports teams in Toronto?")
print(response)


后台回复:入群,加入NLP交流大群~



微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
大会论坛重磅来袭:面向“双碳”目标的电力视觉技术 | CIVC 2023正式上线,GitHub向所有用户开放全新代码搜索引擎姚晨回应张颂文感谢自己一辈子 夸赞其是“戏痴”微软给的压力太大,谷歌计划下个月发布全新搜索引擎基于NT架构的全新QQ Windows版正式发布裂缝已到21层!租户叫来铲车拆除承重墙,当事人被警方控制,200多户业主:损失1.68亿,要索赔!Vue+SpringBoot 集成 PageOffice 实现在线编辑Word、excel文档大规模语言训练模型应用,如何让文档问答系统快速拥有“高智商”?直播预告:面向汽车区域架构的ADI电源管理IC产品及应用浅谈复杂业务系统的架构设计在没有构建系统的情况下编写 Javascript | Linux 中国16款开源的全文搜索引擎一座房子四口人谷歌开发全新搜索引擎Magi,由人工智能技术驱动裂缝已到21层!租户叫来铲车拆除承重墙,当事人被警方控制,业主:损失1.68亿,要索赔!lāo dao?láo dao!案例 | Truebill:面向千禧一代的个人综合理财平台第三届 冇(Mǎo)国际青年影像周 开始征片啦!TPVFormer项目原作解读:面向自动驾驶场景的纯视觉三维语义占有预测大型SaaS系统的数据范围权限设计与实现长新冠:神经系统的持久战 | 《环球科学》新刊导读全球首款,搭载 openKylin 系统的 RISC-V 笔记本电脑 ROMA 正式发布Agustín Hernández:中美洲建筑背景下的未来主义巨构When RS Meets LLM:推荐系统如何从大语言模型中取长补短?面向应用视角的全面综述Cell Stem Cell:乳腺癌或能远程干扰机体免疫系统的功能从而促进其生长扩散免费直播来啦!文档专家助你构建B端产品文档思维!法国害怕中国毁了巴斯德的声誉【无忧买房】Lexington全新联排别墅出售,顶级学区,2023年全新建成,近2号公路和Arlington趣图:三种系统的用户是哪里邂逅的硅谷银行破产,银行如何“引以为戒”?摘要提交截至6月9日Cell Symposia日程新鲜出炉丨肥胖的分子机制和整合生理学王朔:这个人,我极其仰慕,若下令全民追星,我就追他!Cell | 郭红山等解析前列腺癌免疫调控的全新表观遗传学机制“我要索赔!”原董事长被立案,突然暴跌14%!高位强势股,再现闪崩潮,后市哪个板块来接棒?年薪百万!14岁天才男孩刚大学毕业,就入职SpaceX核心部门,还自学中文和中国功夫!(附视频&摘要稿)
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。