一架梯子,一头程序猿,仰望星空!
面向开发者的 Prompt Engineering(吴恩达) > 内容正文

文本概括 Summarizing Prompt设计


1.引言

当今世界上有太多的文本信息,几乎没有人能够拥有足够的时间去阅读所有我们想了解的东西。好消息是,目前LLM在文本概括任务上展现了强大的水准,也已经有不少团队将这项功能插入了自己的软件应用中。

本章节将介绍如何使用编程的方式,调用API接口来实现“文本概括”功能。

首先,我们需要OpenAI包,加载API密钥,定义getCompletion函数。

import openai
import os
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
openai.api_key = OPENAI_API_KEY

def get_completion(prompt, model="gpt-3.5-turbo"): 
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # 值越低则输出文本随机性越低
    )
    return response.choices[0].message["content"]

2.文本概括Prompt实验

这里我们举了个商品评论的例子。对于电商平台来说,网站上往往存在着海量的商品评论,这些评论反映了所有客户的想法。如果我们拥有一个工具去概括这些海量、冗长的评论,便能够快速地浏览更多评论,洞悉客户的偏好,从而指导平台与商家提供更优质的服务。

prod_review_zh = """
这个熊猫公仔是我给女儿的生日礼物,她很喜欢,去哪都带着。
公仔很软,超级可爱,面部表情也很和善。但是相比于价钱来说,
它有点小,我感觉在别的地方用同样的价钱能买到更大的。
快递比预期提前了一天到货,所以在送给女儿之前,我自己玩了会。
"""

2.1.限制输出文本长度

尝试限制文本长度为最多30词,对文本进行总结。

prompt = f"""
你的任务是从电子商务网站上生成一个产品评论的简短摘要。

请对三个双引号之间的评论文本进行概括,最多30个词汇。

评论: \"\"\"{prod_review_zh}\"\"\"
"""

response = get_completion(prompt)
print(response)

返回

可爱软熊猫公仔,女儿喜欢,面部表情和善,但价钱有点小贵,快递提前一天到货。

2.2.调整总结内容的角度和侧重点

有时,针对不同的业务,我们对文本的侧重会有所不同。例如对于商品评论文本,物流会更关心运输时效,商家更加关心价格与商品质量,平台更关心整体服务体验。

我们可以通过增加Prompt提示,来体现对于某个特定角度的侧重。

侧重于运输(物流)

prompt = f"""
你的任务是从电子商务网站上生成一个产品评论的简短摘要。

请对三个双引号之间的评论文本进行概括,最多30个词汇,并且聚焦在产品运输上。

评论: \"\"\"{prod_review_zh}\"\"\"
"""

response = get_completion(prompt)
print(response)

返回

快递提前到货,熊猫公仔软可爱,但有点小,价钱不太划算。

可以看到,输出结果以“快递提前一天到货”开头,体现了对于快递效率的侧重。

侧重于价格与质量

prompt = f"""
你的任务是从电子商务网站上生成一个产品评论的简短摘要。

请对三个双引号之间的评论文本进行概括,最多30个词汇,并且聚焦在产品价格和质量上。

评论: \"\"\"{prod_review_zh}\"\"\"
"""

response = get_completion(prompt)
print(response)

返回

可爱软熊猫公仔,面部表情友好,但价钱有点高,尺寸较小。快递提前一天到货。

可以看到,输出结果以“质量好、价格小贵、尺寸小”开头,体现了对于产品价格与质量的侧重。

2.3.关键信息提取

在2.2节中,虽然我们通过添加关键角度侧重的Prompt,使得文本摘要更侧重于某一特定方面,但是可以发现,结果中也会保留一些其他信息,如价格与质量角度的概括中仍保留了“快递提前到货”的信息。有时这些信息是有帮助的,但如果我们只想要提取某一角度的信息,并过滤掉其他所有信息,则可以要求LLM进行“文本提取(Extract)”而非“文本概括(Summarize)”。

prompt = f"""
你的任务是从电子商务网站上的产品评论中提取相关信息。

请从以下三个双引号之间的评论文本中提取产品运输相关的信息,最多30个词汇。

评论: \"\"\"{prod_review_zh}\"\"\"
"""

response = get_completion(prompt)
print(response)

返回

快递比预期提前了一天到货。

关联主题