0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

深度学习自然语言处理 来源:ChallengeHub 2023-05-12 09:57 次阅读

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

1

背景

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

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

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

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

2

现有方法的局限性

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

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

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

3

文档摘要索引

e2c969b6-f062-11ed-90ce-dac502259ad0.png



在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 asetof relevant nodesfora 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,356in2021,it is the most populous cityinCanada...

高级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)

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4656

    浏览量

    67698
  • 语言模型
    +关注

    关注

    0

    文章

    487

    浏览量

    10195
  • nlp
    nlp
    +关注

    关注

    1

    文章

    481

    浏览量

    21927

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

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    新文档控件软件!

    我们通过对在线文档编辑的各种解决方案进行分析,列出了以下几种方案: 基于WebOFFICE API这是一种新兴起来的网页上在线编辑浏览Office文档的方式,目前全世界只有
    发表于 02-11 16:52

    TouchGFX 4.15是否可以使用有效的链接更新文档

    是否可以使用有效的链接更新文档。另一种方法是删除超链接。这不会真正有帮助,但它会减少恶化。
    发表于 01-13 07:56

    请问能提供下K210 datasheet与standloneSDK最新文档吗?

    请问能提供下K210 datasheet(包含寄存器的那个)与standloneSDK最新文档(官网下的文档与github上的源码有些不一样)吗?
    发表于 09-13 06:59

    基于词频统计的多文档自动摘要生成方案

    文档自动摘要技术可以向用户提供一个简洁、全面的摘要信息,因此研究多文档自动摘要技术具有很重要的意义。本文提出了一种上下文敏感的基于词频统计
    发表于 12-18 16:58 12次下载

    电位器整定的定时器专用电路QA640896/QA640892

    电位器整定的定时器专用电路QA640896/QA640892B 摘要QA640896和QA640892B是台湾宏太科技研制的定时器专用i
    发表于 06-03 15:36 29次下载

    基于知识图谱的QA系统研究

    QA系统用于回答人们以自然语言形式提出的问题,其在互联网、通信及医疗等领域获得显著的成功。其中,IBM研发的Watson系统就在与人类的答题比赛中获胜并首次获得100万美金奖励;苹果的Siri
    发表于 10-10 14:59 0次下载
    基于知识图谱的<b class='flag-5'>QA</b><b class='flag-5'>系统</b>研究

    探讨面向驾驶员信息及娱乐系统全新嵌入式MPU产品解决方案

    探讨面向驾驶员信息及娱乐系统全新嵌入式MPU产品解决方案
    发表于 10-31 14:01 10次下载
    探讨<b class='flag-5'>面向</b>驾驶员信息及娱乐<b class='flag-5'>系统</b>的<b class='flag-5'>全新</b>嵌入式MPU产品解决方案

    基于HBase行键面向海量交通数据的HBase时空索引

    针对HBase无法直接建立时空索引所带来的交通数据查询性能问题,基于HBase行键设计了面向海量交通数据的HBase时空索引。首先利用Geohash降维方法将二维空间位置数据转化为一维编码,再与时间
    发表于 12-06 15:23 0次下载
    基于HBase行键<b class='flag-5'>面向</b>海量交通数据的HBase时空<b class='flag-5'>索引</b>

    基于网页排名算法面向论文索引排名的启发式方法

    为了提高学术论文检索的精准性,进而为学术研究提供便利,提出了针对学术论文检索问题的排名策略。首先,介绍了基于网页排名算法面向论文索引排名的启发式方法,其中利用Hash索引技术有效地减少了稀疏矩阵计算
    发表于 12-30 17:00 0次下载

    基于布谷鸟搜索算法与多目标函数的多文档摘要方法

    为最大化生成摘要的信息量,提出一种基于布谷鸟搜索(CS)算法与多目标函数的多文档摘要方法。对多文档数据进行预处理,通过句子分割、分词、移除停用词和词干化将
    发表于 03-30 11:44 11次下载
    基于布谷鸟搜索算法与多目标函数的多<b class='flag-5'>文档</b><b class='flag-5'>摘要</b>方法

    VectorCAST/QA如何在LiteOS-A内核上实现系统白盒测试

    本文将通过演示实例介绍VectorCAST/QA如何在LiteOS-A内核上实现系统白盒测试,获取被测程序的代码覆盖信息。具体实现在支持sudo超级用户模式的Ubuntu 18.04(或以上)版本中
    的头像 发表于 06-26 16:21 9072次阅读
    VectorCAST/<b class='flag-5'>QA</b>如何在LiteOS-A内核上实现<b class='flag-5'>系统</b>白盒测试

    面向关系数据库的智能索引调优方法

    面向关系数据库的智能索引调优方法   来源:《软件学报》 ,作者邱 涛等   摘 要:数据库索引是关系数据库系统实现快速查询的有效方式之一.智能索引
    的头像 发表于 02-21 17:31 1235次阅读
    <b class='flag-5'>面向</b>关系数据库的智能<b class='flag-5'>索引</b>调优方法

    摘要模型理解或捕获输入文本的要点

    输入文本的要点;   (2)模型过度依赖语言模型,生成流畅但不充分的单词。   在本文研究中,提出了一个忠实增强摘要模型(FES),旨在解决这两个问题,提高抽象摘要的忠实度。对于第一个问题,本文使用问答(QA)来检查编码器是否完
    的头像 发表于 11-01 11:37 905次阅读

    什么是LlamaIndexLlamaIndex数据框架的特点和功能

    LlamaIndex是一个数据框架,用于让基于LLM的应用程序摄取、结构化和访问私有或领域特定的数据。它提供Python和Typescript版本。
    的头像 发表于 01-05 11:08 8039次阅读
    什么是<b class='flag-5'>LlamaIndex</b>?<b class='flag-5'>LlamaIndex</b>数据框架的特点和功能

    微软计划在搜索引擎Bing中引入AI摘要功能

    近期,科技界传来新动向,微软紧随百度与谷歌的步伐,宣布计划在其搜索引擎Bing中引入先进的AI摘要功能,旨在为用户带来更加智能、丰富的搜索体验。
    的头像 发表于 07-26 14:23 356次阅读