Mleon的头像

推断

推断
5
推断
引入
引入
提取情感
提取情感
提取更多
提取更多
一次多个
一次多个
推断主题
推断主题
出处
出处
推断
推断
传统做法
传统做法
新式做法
新式做法
准备工作
准备工作
情感提取
情感提取
简化回答
简化回答
提取情感列表
提取情感列表
提取情感需求
提取情感需求
识别愤怒
识别愤怒
监督学习不易
监督学习不易
多多尝试
多多尝试
信息提取
信息提取
提取物品和名称
提取物品和名称
信息提取需求
信息提取需求
格式化答复
格式化答复
提取多种信息
提取多种信息
同时提取多种
同时提取多种
请多尝试
请多尝试
很酷的应用
很酷的应用
推断五个主题
推断五个主题
索引主题需求
索引主题需求
提取新闻主题
提取新闻主题
零样本学习算法
零样本学习算法
新闻警报
新闻警报
不够健状
不够健状
推断总结
推断总结
转换预告
转换预告

推断

2023-06-06
252 人已看
Mleon的头像
Mleon
粉丝:103
主题:6
描述:6
例子:10
其他:12
字数:9408
Mleon的头像
Mleon
粉丝:103

推断

出处 出处

https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/5/inferring

引入

概述 推断

下面的视频是关于推断。我喜欢思考这些任务,其中模型需要作为输入的文本,并进行某种分析。所以这可能是提取标签,提取名字,理解文本的情感,那种东西。

对比 传统做法

所以如果你想提取一种情感,文本的正面或消极,在传统的机器学习工作流程中,你必须收集标签数据集,训练模型,找出如何在云中部署模型,并作出推理。这可以很好地工作,但是要完成这个过程需要大量的工作。

而且,对于每个任务,比如情感分析 提取名称 等其他的事情,你必须训练和部署一个单独的模型。

对比 新式做法 传统做法

其中一个非常有趣的事情是大语言模型是,对于许多这样的任务,你只要写一个提示,它就会立刻产生结果。这在应用开发方面提供了巨大的速度。

你也可以使用一个模型,一个API来做许多不同的任务,而不是需要找出如何训练和部署许多不同的模型。

提取情感

准备 准备工作

因此,让我们跳进代码,看看你如何利用这个。这是我们的常用的启动代码。我将运行它。

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"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # this is the degree of randomness of the model's output
    )
    return response.choices[0].message["content"]

我要使用的大多数示例是一盏台灯的评论。需要一盏漂亮的台灯放在卧室里,这个还有额外的存储空间等等。

lamp_review = """
Needed a nice lamp for my bedroom, and this one had \
additional storage and not too high of a price point. \
Got it fast.  The string to our lamp broke during the \
transit and the company happily sent over a new one. \
Came within a few days as well. It was easy to put \
together.  I had a missing part, so I contacted their \
support and they very quickly got me the missing piece! \
Lumina seems to me to be a great company that cares \
about their customers and products!!
"""
情感提取

让我写一个提示来分类这个评论的情感。如果我想让系统告诉我这个评论的情感,我只需写下以下产品评论的情感是什么。使用通常的分隔符和评论文本等,然后运行它。

这表明产品评价的情绪是积极的,这似乎相当正确这个灯不是完美的,但这个客户似乎很高兴。看来是一个关心顾客和产品的公司。我认为积极的情绪似乎是正确的答案。

prompt = f"""
What is the sentiment of the following product review, 
which is delimited with triple backticks?

Review text: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
简化回答

现在这个打印出整个句子,产品评价的评价是积极的。如果你想给一个更简洁的回答,使后期处理更容易,我可以采取这个提示并添加另一个指令。

给你一个单词的答案,不管是积极还是消极。因此它只是像这样打印出积极的,这使得文本片更容易接受输出并处理它用它做一些事情。

prompt = f"""
What is the sentiment of the following product review, 
which is delimited with triple backticks?

Give your answer as a single word, either "positive" \
or "negative".

Review text: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
提取情感列表

让我们看看另一个提示。再次使用台灯评论。在这里,我指出了下列评论作者所表达的情绪列表。在这个列表中不能包含超过五个项目。

prompt = f"""
Identify a list of emotions that the writer of the \
following review is expressing. Include no more than \
five items in the list. Format your answer as a list of \
lower-case words separated by commas.

Review text: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
提取情感需求

因此,大型语言模型非常擅长从一段文本中提取特定的内容。在这种情况下,我们正在表达情绪。这对于了解顾客对某一特定产品的看法有帮助。对于许多客户支持组织来说,了解特定用户是否非常不满意非常重要。所以你可能会遇到类似的分类问题。

识别愤怒

以下评论的作者是否表达了愤怒?因为如果有人真的很生气,那么可能值得特别关注客户评论,与客户支持或客户成功联系,了解情况并为客户解决问题。在这种情况下,客户并不生气。

prompt = f"""
Is the writer of the following review expressing anger?\
The review is delimited with triple backticks. \
Give your answer as either yes or no.

Review text: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
对比 监督学习不易

请注意,使用监督学习,如果我想要构建所有这些分类器,我不可能用监督学习在你在这个视频中看到的几分钟内完成。

建议 多多尝试

我鼓励你停止这个视频并尝试改变这些提示。也许询问客户是否表达了高兴,或者询问是否有任何缺失的部分看看你是否能得到一个提示来对这个lab的评论作出不同的推断。

提取更多

信息提取

让我展示一些你可以用这个系统做的更多事情。具体地说,从客户评价中提取更丰富的信息。

信息提取是NLP的一部分,自然语言处理中的一部分,涉及从文本中提取你想要了解的某些内容。

提取物品和名称

因此,在这个提示中,我要求它识别以下项目购买的物品和制造该物品的公司名称。

prompt = f"""
Identify the following items from the review text: 
- Item purchased by reviewer
- Company that made the item

The review is delimited with triple backticks. \
Format your response as a JSON object with \
"Item" and "Brand" as the keys. 
If the information isn't present, use "unknown" \
as the value.
Make your response as short as possible.
  
Review text: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
信息提取需求

再次强调,如果你试图总结来自在线购物电子商务网站的许多评论,也许对你的大量评论集合有用以确定哪些是物品,谁制造了这些物品,确定积极和消极的情感,跟踪关于积极或消极情感的趋势。用于特定产品或特定制造商。

格式化答复

在这个例子中,我将要求它格式化你的答复作为JSON对象,以项目和品牌为keys。

因此,如果我这样做,它会说项目是灯,品牌是luminar,你可以轻松地将其加载到Python字典中,然后对此输出进行其他处理。

一次多个

提取多种信息

在我们所讨论的例子中,你已经看到如何写一个提示识别情感,弄清楚某人是否生气,然后还提取商品和品牌。

一种提取所有这些信息的方法,是使用三到四个提示符并调用getCompletion函数,你知道,三、四次,把这些不同的视角逐一提出来。

但事实证明,你可以写一个单个提示同时提取所有这些信息。

同时提取多种

让我们找出五项,提取情感,评论者是否表达愤怒,购买项目,公司动画。然后,我还要告诉它将愤怒值格式化为布尔值。

让我运行一下。这将产生一个JSON,其中情绪是积极的,愤怒,而且false周围没有引号,因为它只是输出为布尔值。提取的项目是带有额外存储空间的灯,而不是灯。看起来还不错。但是这样,你可以从一段文本中提取多个字段只需一个提示即可。

prompt = f"""
Identify the following items from the review text: 
- Sentiment (positive or negative)
- Is the reviewer expressing anger? (true or false)
- Item purchased by reviewer
- Company that made the item

The review is delimited with triple backticks. \
Format your response as a JSON object with \
"Sentiment", "Anger", "Item" and "Brand" as the keys.
If the information isn't present, use "unknown" \
as the value.
Make your response as short as possible.
Format the Anger value as a boolean.

Review text: '''{lamp_review}'''
"""
response = get_completion(prompt)
print(response)
建议 请多尝试

像往常一样,请随意暂停视频并尝试自己尝试不同的变化。或者甚至尝试输入完全不同的评论。看看你是否能准确地提取这些东西。

推断主题

过渡 很酷的应用

现在,我看到了大型语言模型的一个很酷的应用,就是推断主题。给定一段长文本,这段文本是关于什么的?主题是什么?

推断五个主题

这是一篇虚构的报纸文章,讲述政府工作人员对他们所工作的机构的感受。所以最近由政府进行的调查等等,美国国家航空航天局(NASA)审查的结果是一项非常受欢迎的部门有很高的满意度。我是NASA的粉丝。我喜欢他们所做的工作。但这是一篇虚构的文章。

story = """
In a recent survey conducted by the government, 
public sector employees were asked to rate their level 
of satisfaction with the department they work at. 
The results revealed that NASA was the most popular 
department with a satisfaction rating of 95%.

One NASA employee, John Smith, commented on the findings, 
stating, "I'm not surprised that NASA came out on top. 
It's a great place to work with amazing people and 
incredible opportunities. I'm proud to be a part of 
such an innovative organization."

The results were also welcomed by NASA's management team, 
with Director Tom Johnson stating, "We are thrilled to 
hear that our employees are satisfied with their work at NASA. 
We have a talented and dedicated team who work tirelessly 
to achieve our goals, and it's fantastic to see that their 
hard work is paying off."

The survey also revealed that the 
Social Security Administration had the lowest satisfaction 
rating, with only 45% of employees indicating they were 
satisfied with their job. The government has pledged to 
address the concerns raised by employees in the survey and 
work towards improving job satisfaction across all departments.
"""

因此,针对这样的文章,我们可以用以下提示来询问它,确定以下文本中正在讨论的五个主题。让我们将每个项目缩短为一个或两个单词,对于我的回答,用逗号分隔的列表。

因此,如果我们运行它,你知道,我们会得到这篇文章,它是关于政府调查的,关于工作满意度的,关于NASA等等。总的来说,我认为这是一个很好的主题列表的提取。

prompt = f"""
Determine five topics that are being discussed in the \
following text, which is delimited by triple backticks.

Make each item one or two words long. 

Format your response as a list of items separated by commas.

Text sample: '''{story}'''
"""
response = get_completion(prompt)
print(response)

当然,你也可以分开它,这样你就能得到一个Python列表包含这篇文章涉及的五个主题。

response.split(sep=',')
索引主题需求

如果你有一系列文章并提取主题,你还可以使用大型语言模型帮助你索引不同的主题。

提取新闻主题

所以让我使用一个稍微不同的主题列表。假设我们是一个新闻网站或其他什么,这些是我们追踪的主题。NASA,地方政府,工程,员工满意度联邦政府。假设你想知道,在一个新闻文章中,这些话题在那个新闻文章中包括哪些。

topic_list = [
    "nasa", "local government", "engineering", 
    "employee satisfaction", "federal government"
]

这里有一个提示,我可以用。我要说,确定下列主题中的每个项目是否是下文的主题。将你的答案作为每个主题的0或1的列表给出。

prompt = f"""
Determine whether each item in the following list of \
topics is a topic in the text below, which
is delimited with triple backticks.

Give your answer as list with 0 or 1 for each topic.\

List of topics: {", ".join(topic_list)}

Text sample: '''{story}'''
"""
response = get_completion(prompt)
print(response)

好的,很好。所以这是之前的那个故事文本所以这个东西是一个故事。这是关于NASA的。这不是关于地方政府,也不是关于工程。这是关于员工满意度,也是关于联邦政府的。

零样本学习算法

因此,在机器学习中,这有时被称为零样本学习算法,因为我们没有给它任何标记的训练数据。所以这就是零样本。只要一个提示,它就能确定这篇新闻文章涵盖了哪些主题。

新闻警报

因此,如果你想生成新闻警报,说,这样处理新闻,你知道的,我非常喜欢NASA所做的很多工作。所以,如果你想建立一个能够处理这个的系统,你知道,把这些信息放入一个字典中,每当NASA新闻出现时,打印警报,新的NASA新闻,他们可以使用这个非常快速地获取任何文章,弄清楚它是关于什么话题的。如果话题包括NASA,让它打印出警报,新的NASA故事。

topic_dict = {i.split(': ')[0]: int(i.split(': ')[1]) for i in response.split(sep='\n')}
if topic_dict['nasa'] == 1:
    print("ALERT: New NASA story!")
补充 不够健状

哦,只有一件事。我在这里使用这个话题字典。这个提示并不是很健壮。如果我想要一个生产系统,我可能会将答案输出为JSON格式,而不是作为列表,因为大型语言模型的输出可能有点不一致。所以这实际上是一段相当脆弱的代码。

但如果你想,在观看完这个视频后,自由地去尝试尝试修改这个提示,看能不能使其输出JSON而不是像这样的列表,然后再用更强有力的方法来判断某一特定条目是否是一个关于NASA的故事。

总结 推断总结

这就是推断的全部内容。而且仅仅几分钟之内,你就可以构建多个系统来推断文本这之前,也需要花费数天甚至数周的时间,即使是有经验的机器学习开发者。

因此,我觉得这非常令人兴奋,无论是对于有经验的机器学习开发者还是对于新手来说,现在你都可以使用提示来快速构建并开始进行推断,对于像这样相当复杂的自然语言处理任务,你可以快速地进行推断。

预告 转换预告

在接下来的视频中,我们将继续讨论使用大型语言模型可以做的令人兴奋的事情,并且我们将继续探讨转换。如何将一段文本转换为另一段文本,比如将其翻译成另一种语言?让我们继续看下一个视频。

讨论
随记