首页 > 其他分享 >Summarization with Langchain

Summarization with Langchain

时间:2024-08-21 19:48:22浏览次数:10  
标签:Summarization prompt chain 摘要 reduce Langchain 文档 template

教程链接 — https://youtu.be/w6wOhSThnoo

摘要是自然语言处理(NLP)的一个关键方面,它能够将大量文本浓缩成简洁的摘要。LangChain,作为NLP领域中的一个强大工具,提供了三种不同的摘要技术:stuffmap_reducerefine。每种方法都有其独特的优点和局限性,使它们适用于不同的情况。本文深入探讨了这些技术的细节、它们的优缺点以及理想的应用场景。

教程中使用的完整实现代码和数据可在以下存储库中找到。

摘要技术

图片 3

来自langchain

  1. Stuff Chain

stuff链特别适用于处理大型文档。它的工作原理是将文档转换为较小的块,分别处理每个块,然后将摘要组合起来生成最终摘要。这种方法适用于管理庞大的文件,并且可以通过递归字符文本分割器的帮助来实现。

优点:

  • 高效处理大型文档。
  • 允许逐块摘要,适合管理庞大的文件。

缺点:

  • LLM上下文窗口
from langchain.chains.combine_documents.stuff import StuffDocumentsChain  
from langchain.chains.llm import LLMChain  
from langchain.prompts import PromptTemplate # 定义提示  
prompt_template = """Write a concise summary of the following:  
"{text}"  
CONCISE SUMMARY:"""  
prompt = PromptTemplate.from_template(prompt_template)  
# 定义 LLM 链  
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo-16k")  
llm_chain = LLMChain(llm=llm, prompt=prompt)  
# 定义 StuffDocumentsChain  
stuff_chain = StuffDocumentsChain(llm_chain=llm_chain, document_variable_name="text")  
docs = loader.load()  
print(stuff_chain.run(docs))

Map-Reduce 方法

映射-归约方法涉及分别对每个文档进行摘要(映射步骤),然后将这些摘要组合成最终摘要(归约步骤)。这种方法更可扩展,并且可以处理更大量的文本。map_reduce技术旨在摘要超出语言模型令牌限制的大型文档。它涉及将文档分成块,为每个块生成摘要,然后将这些摘要组合起来创建最终摘要。这种方法对处理大型文件高效,并且显著减少了处理时间。

优点:

  • 通过将大型文档分成可管理的块来有效处理。
  • 通过分别处理块来减少处理时间。

缺点:

  • 需要额外的步骤来组合单独的摘要,这可能会增加过程的复杂性。

以下是如何实现映射-归约方法的示例:

from langchain.chains import MapReduceDocumentsChain, ReduceDocumentsChain  
from langchain_text_splitters import CharacterTextSplitter # 映射  
map_template = """The following is a set of documents  
{docs}  
Based on this list of docs, please identify the main themes   
Helpful Answer:"""  
map_prompt = PromptTemplate.from_template(map_template)  
map_chain = LLMChain(llm=llm, prompt=map_prompt)  
# 归约  
reduce_template = """The following is set of summaries:  
{docs}  
Take these and distill it into a final, consolidated summary of the main themes.   
Helpful Answer:"""  
reduce_prompt = PromptTemplate.from_template(reduce_template)  
reduce_chain = LLMChain(llm=llm, prompt=reduce_prompt)  
# 通过映射链组合文档,然后组合结果  
map_reduce_chain = MapReduceDocumentsChain(  
    llm_chain=map_chain,  
    reduce_documents_chain=reduce_documents_chain,  
    document_variable_name="docs",  
    return_intermediate_steps=False,  
)  
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=1000, chunk_overlap=0)  
split_docs = text_splitter.split_documents(docs)  
print(map_reduce_chain.run(split_docs))

Refine 方法

Refine方法通过循环遍历输入文档来迭代更新其答案。对于每个文档,它将所有非文档输入、当前文档和最新的中间答案传递给LLM链以获得新答案。这种方法适用于根据新上下文细化摘要。

refine技术是map_reduce技术的简单替代方案。它涉及为第一个块生成摘要,将其与第二个块组合,生成另一个摘要,并继续这个过程,直到最终摘要完成。这种方法适用于大型文档,但与map_reduce相比,需要的复杂性较小。

优点:

  • map_reduce技术更简单。
  • 对于大型文档,以较小的复杂性实现了类似的结果。

缺点:

  • 与其它技术相比,功能有限。

以下是如何实现Refine方法的示例:

from langchain.chains.summarize import load_summarize_chain
prompt = """
                  Please provide a summary of the following text.
                  TEXT: {text}
                  SUMMARY:
                  """

question_prompt = PromptTemplate(
    template=question_prompt_template, input_variables=["text"]
)

refine_prompt_template = """
              Write a concise summary of the following text delimited by triple backquotes.
              Return your response in bullet points which covers the key points of the text.
              ```{text}```
              BULLET POINT SUMMARY:
              """

refine_template = PromptTemplate(
    template=refine_prompt_template, input_variables=["text"]

# Load refine chain
chain = load_summarize_chain(
    llm=llm,
    chain_type="refine",
    question_prompt=question_prompt,
    refine_prompt=refine_prompt,
    return_intermediate_steps=True,
    input_key="input_documents",
    output_key="output_text",
)
result = chain({"input_documents": split_docs}, return_only_outputs=True)

选择合适的技术

摘要技术的选择取决于当前任务的具体要求。对于大型文档,建议使用map_reducerefine技术,因为它们能够有效地进行分块摘要。stuff链特别适合于太大而无法一次性处理的文档,为管理庞大的文件提供了实用的解决方案。

每种方法都有其优势,适用于不同场景。Stuff方法简单但可能不适用于处理大量文本。Map-Reduce方法更可扩展,可以处理更大的文档,但需要更多的设置。Refine方法适用于基于新上下文迭代细化摘要,使其成为动态摘要任务的良好选择。

标签:Summarization,prompt,chain,摘要,reduce,Langchain,文档,template
From: https://www.cnblogs.com/IcyFeather/p/18372390

相关文章

  • 吴恩达力荐,100%好评-LangChain大型语言模型(LLM)应用开发
       LangChain是一个开源框架,旨在帮助人工智能开发者将大语言模型(如GPT-4)与外部计算和数据源结合起来。这个框架提供了Python和JavaScript包,使开发者能够轻松地将自己的数据与大语言模型连接起来,从而实现更复杂的人工智能应用。   免费获取:吴恩达力荐,100%好评-Lang......
  • 使用RAG-Chroma和LangChain构建强大的问答系统
    标题:使用RAG-Chroma和LangChain构建强大的问答系统内容:使用RAG-Chroma和LangChain构建强大的问答系统引言在人工智能和自然语言处理领域,检索增强生成(Retrieval-AugmentedGeneration,RAG)技术正在迅速崛起。本文将介绍如何使用RAG-Chroma模板和LangChain框架构建......
  • Langchain pandas agent - Azure OpenAI account
    Langchainpandasagent结合AzureOpenAI账户使用时,主要涉及到通过AzureOpenAI提供的自然语言处理能力,来操作pandasDataFrame或进行相关的数据处理任务。以下是关于这一结合使用的详细解析:一、Langchainpandasagent概述在LangChain中,Agent是一个核心概念,它代表了......
  • 在亚马逊云科技上部署开源大模型并利用RAG和LangChain开发生成式AI应用
    项目简介:小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWSAI最佳实践,并应用到自己的日常工作里。本次介绍的是如何在亚马逊云科技上利用SageMaker机器学习服务部署开源大模型,使用La......
  • 基于LangChain手工测试用例转接口自动化测试生成工具
    接口自动化测试用例是一个老生常谈的问题,在未引入人工智能之前,也有非常多的生成方案,比如如下所示,通过har生成接口自动化测试用例:但是以上的生成方式依然是有一些弊端,比如har本身虽然能表述一定的接口信息和业务信息,但是毕竟无法用来表述全部的应用场景与用例场景。而大部分的......
  • 【课程总结】day24(下):大模型部署调用(vLLM+LangChain)
    前言在上一章【课程总结】day24(上):大模型三阶段训练方法(LLaMaFactory)内容中主要了解一个大模型的训练过程,无论是第三方的大模型还是自研的大模型,都需要部署到服务端,提供对应API接口供上层应用使用。所以,本章将主要了解vLLm+langchain的基本使用方法。大模型应用框架......
  • 使用 langchain 框架,构建一个简单的 LLM 应用程序
    介绍使用langchain框架,构建一个简单的LLM应用程序本文中出现的每段代码都是可以完整执行的注意大语言模型和各类框架迭代飞快,再看本文时,部分代码可能已经过时了本文所用到的python包版本dashscope1.20.3langchain0.2.12langchain-community0.2.11......
  • LangChain 安全特性全解析与实践指南
    LangChain安全特性全解析与实践指南引言在人工智能的浪潮中,LangChain以其卓越的能力,成为开发大型语言模型(LLM)应用程序的佼佼者。然而,随着技术的发展,安全问题逐渐浮出水面。本文将深入探讨LangChain的安全特性,并提供详细的代码示例和最佳实践,以确保开发者能够在保障安全......
  • 【AI大模型】LangChain框架:示例选择器与输出解析器携手,编织NLP高效精准之网
    文章目录前言一、示例选择器1.介绍及应用2.自定义示例选择器案例:AI点评姓名3.基于长度的示例选择器案例:对输入内容取反4.基于最大边际相关性(MMR)的示例选择器案例:得到输入的反义词5.基于n-gram重叠的示例选择器6.综合案例二、输出解析器1.介绍2.列表解析器3.日期......
  • 初识LangChain的快速入门指南
    LangChain概述LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。LangChain简化了LLM应用程序生命周期的各个阶段:开发阶段:使用Lan......