用ChatGPT总结和推断

1. 总结

代码语言:javascript
复制
import openai
import os

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file

openai.api_key = os.getenv('OPENAI_API_KEY')

def get_completion(prompt, model="gpt-3.5-turbo"): # Andrew mentioned that the prompt/ completion paradigm is preferable for this class
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0.1,
# this is the degree of randomness of the model's output
)
return response.choices[0].message["content"]

商品评价例子

代码语言:javascript
复制
prod_review = """
我为女儿的生日买了这个熊猫毛绒玩具,她非常喜欢,
无论到哪里都带着它。它很柔软,非常可爱,脸上有着友好的表情。
不过,相对于价格来说,它有点小了。
我认为可能还有其他相同价格但更大的选择。
它比预期的提前了一天送到,
所以我在把它交给女儿之前还玩了一会儿。
"""

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

请用三个反引号包围,不超过30个中文字符概括该评论。

摘要: {prod_review}
"""

response = get_completion(prompt)
print(response)

输出:熊猫毛绒玩具可爱柔软,有点小。

  • 改变总结的关注点为 快递运输
代码语言:javascript
复制
prompt = f"""
您的任务是从电子商务网站上的产品评论中生成一个简短的摘要。

请用三个反引号包围,不超过30个中文字符概括该评论。
评论聚焦于产品运输和配送方面

摘要:{prod_review}
"""

response = get_completion(prompt)
print(response)

输出: 摘要:熊猫毛绒玩具可爱柔软,但有点小,运输提前一天送到。

  • 改变总结的关注点为 产品价格
代码语言:javascript
复制
prompt = f"""
您的任务是从电子商务网站上的产品评论中生成一个简短的摘要。

请用三个反引号包围,不超过30个中文字符概括该评论。
评论聚焦于价格方面

摘要:{prod_review}
"""

response = get_completion(prompt)
print(response)

输出:价格高,大小有点小

  • 总结包含所有的方面,我们可以尝试 抽取 关注的方面
代码语言:javascript
复制
prompt = f"""
您的任务是从电子商务网站上的产品评论中提取相关信息,
以向运输部门提供反馈。

请从三个反引号包围的评论中提取与运输和交付有关的信息。
限制在30个中文字内。

摘要: {prod_review}
"""

response = get_completion(prompt)
print(response)

输出:该产品交付速度快,提前一天送到。

多个评论

代码语言:javascript
复制
review_1 = prod_review

review for a standing lamp

review_2 = """
需要一盏漂亮的卧室台灯,这款台灯除了价格不太高外,
还有额外的储物空间。快速送达,两天就到了。
在运输过程中,灯的开关绳断了,
但公司很高兴地寄来了一个新的,几天后就到了。
很容易组装。但是我缺了一个零件,所以我联系了他们的支持部门,
他们很快就给我寄来了缺失的零件!
对我来说,这是一家非常关心客户和产品的优秀公司。
"""

review for an electric toothbrush

review_3 = """
我的牙科保健师推荐使用电动牙刷,这就是我购买它的原因。
到目前为止,电池寿命似乎非常出色。
初始充电后,我将充电器插头插入插座,让电池充分充电,
第一周都这样做。之后我便拔掉了充电器,过去三周每天使用两次,
电量一直维持在同一个充电电量。
但牙刷头太小了。我见过比这个更大的婴儿牙刷。
我希望牙刷头更大,有不同长度的毛刷,
以便更好地清洁牙齿之间的空隙,因为这个牙刷无法做到。
总的来说,如果你能在50美元左右购买这个牙刷,
那么它是一个不错的选择。
制造商的牙刷头替换品相当昂贵,
但你可以购买价格更为合理的通用替换刷头。
这个牙刷让我感觉每天都去了牙医诊所,我的牙齿感觉非常干净。
"""

review for a blender

review_4 = """
所以,他们仍然有季节性的17件套
11月份的售价约为49美元
半价,但出于某种原因(称之为哄抬价格)
大约在12月的第二周,价格都上涨了
最高可达70美元至89美元不等
系统11件套系统的价格上涨了约10美元或
因此,价格也与之前29美元的售价不同
所以它看起来不错,但如果你看看底座
刀片锁定位置看起来不太好
就像几年前的版本一样,但我
计划对它非常温和(例如,我喜欢
非常坚硬的物品,如豆类、冰块、大米等
先用搅拌机搅拌,然后把它们按份量粉碎
我要加入搅拌机,然后换成搅打
切出更细的面粉,并使用横切刀片
制作冰沙时先用平刀片
如果我需要更细/更少浆的话)。制作时的特殊提示
冰沙,切细并冷冻水果
蔬菜(如果用菠菜稍微炖一下,会软化
菠菜然后冷冻,直到可以使用,如果制作的话
冰糕,使用中小型食品加工机)
你计划以这种方式使用,你可以避免添加
如果在做奶昔的时候有很多冰的话
大约一年后,发动机发出了奇怪的声音
我打电话给客服,但保修期已过
已经了,所以我不得不再买一个。仅供参考:总体
这些类型的产品质量都很差,所以
他们有点指望品牌知名度和
消费者忠诚度以维持销售额。大约收到了两天。
"""

reviews = [review_1, review_2, review_3, review_4]

for i in range(len(reviews)):
prompt = f"""
您的任务是生成来自电子商务网站产品的评论的简短摘要
不超过30个字
摘要: {reviews[i]}
"""

response = get_completion(prompt)
print(i, response, &#34;\n&#34;)</code></pre></div></div><p>输出:</p><blockquote><p> 0 摘要:可爱柔软的熊猫玩具,女儿非常喜欢,但有点小。提前一天送到,很满意。

1 摘要: 漂亮的台灯,带储物空间,快速送达,优质客服。

2 摘要: 电动牙刷电池寿命出色,使用方便,但牙刷头太小,需要改进。价格合理,让牙齿感觉非常干净。

3 摘要: 季节性套装价格上涨,底座刀片锁定位置不太好,制作冰沙需注意冷冻水果蔬菜,产品质量较差。

2. 推断

推断情感倾向、主题

代码语言:javascript
复制
lamp_review = """
我的卧室需要一盏漂亮的灯,而且这盏有额外的储物空间,
而且价格不太高。很快就搞定了。
我们的灯在运输过程中断了线,公司很高兴地送来了一个新的。
几天之内也来了。这很容易组合起来。
我有一个缺失的部分,所以我联系了他们的售后支持,
他们很快就给了我缺失的部分!
在我看来,Lumina是一家关心客户和产品的伟大公司!!
"""

prompt = f"""
下面的产品评论是什么样的观点?

文本: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)

输出:这个评论是积极的,对Lumina公司的产品和售后服务都有好评。

代码语言:javascript
复制
prompt = f"""
下面的产品评论是什么样的观点?
用 正面 或者 负面 回答

文本: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)

输出:正面

代码语言:javascript
复制
prompt = f"""
I确定以下评论的作者所表达的情绪列表。
列表中包含的项目不超过五项。
将你的答案格式化为用逗号分隔的小写单词列表。

文本: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)

输出:高兴, 满意, 赞扬, 感激, 轻松

代码语言:javascript
复制
prompt = f"""
以下评论的作者是否表达了愤怒?

回答是或否。

文本: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)

输出:

代码语言:javascript
复制
prompt = f"""
从评审文本中识别以下项目:
-评论者购买的物品
-制造物品的公司

使用将回答格式化为JSON对象
“Item”和“Brand”作为key
如果信息不存在,请使用“未知”作为值

你的回答需要尽可能简短。

文本: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)

输出:

代码语言:javascript
复制
{
"Item": "灯",
"Brand": "Lumina"
}
代码语言:javascript
复制
prompt = f"""
从评审文本中识别以下项目:
-情感正向还是负向
-评论表现出来很生气吗?true 或者 flase
-评论者购买的物品
-制造物品的公司

使用将回答格式化为JSON对象
"Sentiment", "Anger",“Item”和“Brand”作为key
如果信息不存在,请使用“未知”作为值

你的回答需要尽可能简短。
"Anger" 的值是布尔类型

文本: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)

输出:

代码语言:javascript
复制
{
"Sentiment": "正向",
"Anger": false,
"Item": "灯",
"Brand": "Lumina"
}

总结主题

代码语言:javascript
复制
story = """
在政府最近进行的一项调查中,
公共部门员工被要求对他们的水平进行评分
对他们工作的部门感到满意。
结果显示,美国国家航空航天局是最受欢迎的
部门的满意度为95%。

美国国家航空航天局的一名员工John Smith对这一发现发表了评论,
他表示:“美国国家航空航天局脱颖而出,我并不感到惊讶。
这是一个与了不起的人一起工作的好地方
难以置信的机会。我很自豪能成为
这样一个创新的组织。"

这一结果也受到了美国国家航空航天局管理团队的欢迎,
导演汤姆·约翰逊表示:“我们很高兴
听说我们的员工对他们在美国国家航空航天局的工作感到满意。
我们有一支才华横溢、敬业的团队,他们不知疲倦地工作
为了实现我们的目标,看到他们
努力工作是有回报的。”

调查还显示
社会保障管理部门的满意度最低
评级,只有45%的员工表示他们
对他们的工作感到满意。政府已承诺
解决员工在调查中提出的问题,以及
努力提高所有部门的工作满意度。
"""

prompt = f"""
确定以下文本中正在讨论的五个主题
把每一项都写不超过10个字。
将您的回复格式化为用逗号分隔的项目列表。

文本: '''{story}'''
"""
response = get_completion(prompt)
print(response)

输出:调查主题, 部门满意度, 美国国家航空航天局, 社会保障管理部门, 政府承诺

代码语言:javascript
复制
topic_list = response.split(sep=',')

prompt = f"""
确定以下主题列表中的每个项目是否为以下文本中的主题,
以列表形式给出你的答案,0 或者 1,0不是,1是

主题list: {", ".join(topic_list)}

文本: '''{story}'''
"""
response = get_completion(prompt)
print(response)

输出:

代码语言:javascript
复制
调查主题: 1
部门满意度: 1
美国国家航空航天局: 1
社会保障管理部门: 1
政府承诺: 1
代码语言:javascript
复制
topic_dict = {i.split(': ')[0]: int(i.split(': ')[1]) for i in response.split(sep='\n')}
if topic_dict['美国国家航空航天局'] == 1:
print("提醒:美国国家航空航天局的新故事!")

输出 : #提醒:美国国家航空航天局的新故事!