一、前言

你是否经常需要阅读大量的文档,比如报告、论文、合同等,但是又没有足够的时间和精力去仔细阅读每一个细节?你是否希望有一个工具,可以帮助你快速地提取文档的核心内容,让你一目了然地了解文档的主要信息和观点?如果你有这样的需求,那么你一定要试试LangChain!

今天我们将探索三种不同的总结技术,每种技术都使用 LangChain 独特的chain类型实现:这篇文章将指导您完成使用 LangChain 总结文档列表的过程,分解每种技术所涉及的步骤。stuff, map_reduce, and refine

无论您是经验丰富的开发人员还是刚刚开始了解自然语言处理,对于有兴趣使用 LangChain 探索文档摘要世界的人来说,这篇文章都是完美的起点。接下来我们一起看看 LangChain 如何帮助我们创建一个有效的文档摘要器!

二、文档摘要

文档摘要,就是对文档的内容进行简化和概括,提取出文档的主旨、主题、观点、结论等关键信息,形成一个简短的文字描述。文档摘要可以帮助我们快速地获取和理解文档的核心内容,避免阅读冗长或无关的信息。

文档摘要有不同的类型和风格,根据不同的目的和需求,我们可以选择不同的方式来生成文档摘要。比如:

  • 描述性摘要:描述性摘要是对文档内容进行客观和中立的概括,不包含任何评价或批判。描述性摘要通常用于科学、技术、学术等领域,以便于读者快速了解文档的主题和范围。

  • 评价性摘要:评价性摘要是对文档内容进行主观和有立场的概括,包含对文档的优点、缺点、质量、价值等方面的评价或批判。评价性摘要通常用于商业、媒体、评论等领域,以便于读者快速了解文档的观点和态度。

  • 批判性摘要:批判性摘要是对文档内容进行深入和全面的概括,包含对文档的背景、目的、方法、结果、结论等方面的分析和评估。批判性摘要通常用于研究、学习、写作等领域,以便于读者快速了解文档的贡献和意义。

三、LangChain

LangChain是一个开源的框架,它可以让AI开发人员把像GPT-4这样的大型语言模型(LLM)和外部数据结合起来。它提供了Python或JavaScript(TypeScript)的包。利用LangChain,你可以轻松地构建一个能够生成文档摘要的聊天机器人,让它为你节省时间和精力。

LangChain 提供了几个主要模块支持,如模型、提示、索引等,这些模块可以以多种方式用于不同的用例,如摘要、利用率、评估等。

四、Langchain Chain

语言模型一直在彻底改变自然语言处理,使计算机能够理解甚至生成类似人类的语言。虽然使用单一语言模型 (LLM) 可能足以满足更简单的应用程序,但当它们组合成一个链时,这些模型的强大功能才能真正闪耀。但是,我们如何才能无缝有效地将这些模型链接在一起呢?这就是LangChain的用武之地。

LangChain为链接LLM提供了标准接口,允许用户轻松组合多个模型以实现更复杂的任务。无论是按顺序使用多个LLM,还是将它们与其他专家系统集成,LangChain都简化了构建和利用这些链的过程。

通过链,我们可以将各种构建块组合在一起,形成一个强大的行动链。想象一下 - 一个链,可以接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化的响应无缝传递给语言模型。但它并不止于此。我们甚至可以通过组合多个链或将链与其他组件集成来创建更复杂的链。可能性是无穷无尽的,有了链条,我们就有了释放应用全部潜力的钥匙。

五、LangChain作为汇总工具的优势

在使用自然语言处理 (NLP) 汇总大型或多个文档时,数据量之大可能会让人不知所措,这可能会导致处理时间变慢,甚至出现内存问题。这意味着我们可能需要高性能的计算机资源来处理大量数据。但是使用 LangChain,我们可以将大型文档分解为较小的块,并根据我们使用的链类型同时或串行处理它们,而无需处理最大的token问题。

另一个挑战可能是组合来自多个文档的信息以创建摘要,因为这些文档可能使用不同的术语、具有冲突的信息或涵盖主题的不同方面。这可以使用LangChain来解决,因为它在当前文档中存储了有关其先前文档的一些信息,从而创建了一个文档链,可用于在摘要期间证明上下文的重要性,并在摘要内容中保持句子的正确顺序。

LangChain作为一个摘要工具,它有以下几个优势:

  • 它可以处理任何类型和长度的文档,无论是PDF、Word还是网页。

  • 它可以根据不同的问题来生成不同风格和角度的摘要,无论是描述性、评价性还是批判性。

  • 它可以利用LLM的强大能力来生成流畅、准确和有逻辑的摘要,无论是中文还是英文。

  • 它可以让你自由地定制你想要的摘要长度和细节,无论是一句话还是一段话。

  • 它可以让你与摘要互动,提出问题或反馈,让摘要更符合你的需求和期望。

六、LangChain如何生成文档摘要?

LangChain生成文档摘要的原理很简单,就是让LLM在回答问题时参考整个数据库

具体来说,LangChain会把你想要摘要的文档作为一个数据库,并且根据你输入的问题来生成一个摘要。比如,如果你输入“这篇文章主要讲了什么?”,LangChain就会根据文章内容来生成一个简短的摘要。如果你输入“这篇文章有哪些优点和缺点?”,LangChain就会根据文章内容来生成一个评价性的摘要。

为了让你更清楚地了解LangChain如何生成文档摘要,我们来看一个具体的例子。假设我们想要对一篇介绍LangChain的文章进行摘要,我们可以用LangChain来生成不同类型和风格的摘要。以下是我们用LangChain生成的一些摘要,以及我们输入的问题:

  • 描述性摘要:这篇文章介绍了LangChain的概念、原理、优势、使用方法和应用场景,以及它的开源地址。问题:这篇文章主要讲了什么?

  • 评价性摘要:这篇文章是一篇很好的LangChain的入门教程,它用简单明了的语言和图文并茂的方式,向读者展示了LangChain的强大功能和无限可能性。问题:这篇文章有哪些优点?

  • 批判性摘要:这篇文章是一篇关于LangChain的介绍性文章,它从不同的角度和层面,对LangChain进行了详细和全面的说明和展示。然而,这篇文章也有一些不足之处,比如它没有提供足够的数据和证据来支持LangChain的优势和效果,也没有对LangChain可能面临的挑战和问题进行讨论和分析。问题:这篇文章有哪些缺点?

可以看到,LangChain可以根据不同的问题,生成不同类型和风格的摘要,而且摘要都很流畅、准确和有逻辑。

七、文档摘要器应用开发

4.1、初始化OpenAi Key

import os

os.environ["OPENAI_API_KEY"] = "Your openai key"

4.2、摘要链设置

from langchain import OpenAI, PromptTemplate, LLMChain
from langchain.text_splitter import CharacterTextSplitter
from langchain.chains.mapreduce import MapReduceChain
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0)

4.3、上传文档并将其拆分为块

text_splitter = CharacterTextSplitter()

with open("./state_of_the_union.txt") as f:
    state_of_the_union = f.read()
docs = text_splitter.split_text(state_of_the_union)[:4]

我们上传文档后,然后用CharacterTextSplitter()方法把文档分割成小块,然后把输出的列表存储在texts变量里。

分割文档很重要,因为把大文档作为一个单元处理会很耗费计算资源和时间。

4.4、使用'map_reduce' 链进行摘要总结

在文档处理方面,将大型文档分成更小、更易管理的块至关重要。但是,如何将这些块组合成全面的摘要或答案呢?这就是LangChain的MapReduceDocumentsChain发挥作用的地方。

这个强大的工具使用每个数据块上的初始提示来生成仅基于文档该部分的摘要或答案。MapReduceDocumentsChain通过运行不同的提示来组合所有初始输出,为整个文档创建全面而连贯的摘要或答案。而且,通过在 LangChain 中的实现,这种方法可以轻松处理最大和最复杂的文档。

from langchain.chains.summarize import load_summarize_chain
import textwrap

chain = load_summarize_chain(llm, 
                             chain_type="map_reduce",
                             verbose = True)

output_summary = chain.run(docs)
wrapped_text = textwrap.fill(output_summary, width=100)
print(wrapped_text)

我们正在创建一个load_summarizer_chain对象,其中我们传递三个参数。 model - 大型语言模型,该模型将查询用户输入 chain_type - 用于详细总结文档的 langchain 链的类型

verbose - 这是一个布尔参数,如果设置为 True,它将向我们显示处理用户请求和生成输出之间的所有中间步骤

4.4.1、汇总输出
TCS has a purpose-driven approach to business and values that have enabled it to cope with
industry-wide supply side challenges. It has invested in its people, providing hospitalization
support and a massive pan-India vaccination drive, resulting in a strong employer brand. The
workforce has grown to over half a million and is highly diverse, with employees logging 60.3
million learning hours and acquiring 3.5 million digital competencies. TCS has also made progress in
improving gender diversity in the senior management ranks and has been working with communities to
provide health, STEM education, skills development, and digital divides. It has also made a
financial contribution to international humanitarian organizations and reduced its absolute carbon
footprint by 66% over base year 2016.

4.4.2优点

可以扩展到比StuffDocumentsChain更大的文档(和更多的文档)。对单个文档的LLM调用是独立的,因此可以并行化。

4.4.3缺点

需要比StuffDocumentsChain更多的LLM调用。在最终组合调用期间丢失一些信息。

4.5、使用'stuff' 链进行摘要总结

填充是最简单的方法,就是把所有相关的数据都塞进提示语作为上下文传递给语言模型。这在LangChain中的具体实现为StuffDocumentsChain。

这种方法的主要缺点是它只适用于较小的数据。一旦你处理的数据很多,这种方法就不再可行。下一种方法就是为了解决这个问题而设计的。

4.5.1、创建自定义提示语模板
prompt_template = """请用简洁的要点来总结以下内容: {text}

简洁的要点总结:"""
BULLET_POINT_PROMPT = PromptTemplate(template=prompt_template, input_variables=[“text”])

4.5.2、生成汇总输出
chain = load_summarize_chain(llm, 
                             chain_type="stuff", 
                             prompt=BULLET_POINT_PROMPT)

output_summary = chain.run(docs)

wrapped_text = textwrap.fill(output_summary, 
                             width=100,
                             break_long_words=False,
                             replace_whitespace=False)
print(wrapped_text)

4.5.3、汇总输出
- Purpose-driven approach to business and values have shaped TCS' culture and work environment
-
Investing in people and giving them opportunities to realize their potential
- Decentralized
decision-making, empowering leaders on the front lines, and providing support
- Treating the
organization as an extended family and standing by each member in their hour of need
- Strong
employer brand validated by third-party assessments and accolades
- Workforce crossed the half-
million mark in the first half of the year
- Highly diverse workforce with over 153 nationalities
represented
- Women in the workforce exceeding 200,000
- Gender diversity in senior management ranks
improved
- Organic talent development focus area
- Lowest attrition in the industry
- Community and
planet programs reaching 1.7 million beneficiaries
- Net zero carbon footprint by 2030

4.5.4、优点

只需要对LLM进行一次调用。在生成文本时,LLM可以一次性访问所有的数据。

4.5.5、缺点

大多数LLM都有一个上下文长度的限制,对于大型文档(或多个文档)来说,这种方法不会奏效,因为它会导致一个超过上下文长度的提示语。

4.6、使用'refine' 链进行摘要总结

这种方法涉及到对第一块数据进行一个初始的提示语,生成一些输出。对于剩余的文档,把这些输出和下一个文档一起传入,让LLM根据新的文档来改进输出。

chain = load_summarize_chain(llm, chain_type="refine")

output_summary = chain.run(docs)
wrapped_text = textwrap.fill(output_summary, width=100)
print(wrapped_text)

4.6.1、汇总输出
TCS has a purpose-driven approach to business and values that have shaped its culture and work
environment. It invests in its people and provides them with opportunities to reach their full
potential. During the pandemic, TCS provided hospitalization support and a massive pan-India
vaccination drive. This has resulted in a strong employer brand and helped the company cope with
industry-wide supply side challenges. The workforce has grown to over half a million people, with
153 nationalities represented and over 200,000 women. TCS has also been involved in community and
planet initiatives, helping over 1.7 million beneficiaries and making a financial contribution of 1
million Euros to international humanitarian organizations. The company has also made progress in
becoming net zero by 2030.

4.6.2、优点

可以提取更相关的上下文,可能比MapReduceDocumentsChain损失更小。

4.6.3、缺点

需要比StuffDocumentsChain更多的LLM调用。这些调用也不是独立的,意味着它们不能像MapReduceDocumentsChain那样并行。还可能存在一些对文档排序的潜在依赖关系。

八、总结

LangChain可以应用在任何需要阅读和理解文档的场景,比如:

  • 学习:你可以用LangChain来帮助你快速阅读和复习课本、论文、报告等学习资料,提高学习效率和质量。

  • 工作:你可以用LangChain来帮助你快速浏览和分析合同、报告、邮件等工作文件,提高工作效率和质量。

  • 生活:你可以用LangChain来帮助你快速获取和消化新闻、文章、书籍等生活信息,提高生活品质和乐趣。

总之,LangChain通过集成其自定义方法和代理,使创建最先进的AI应用程序变得非常容易。我们通过利用LangChain链和OpenAI嵌入的强大功能来创建摘要器。我们还了解了与传统过程相比,LangChain如何提供更好的方法来摘要大型文档。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐