前言
大家好,这里是知了,这里是我们《盘点OpenAI的最全知识点》 系列的第二篇内容。
不知道大家平时有没有对chatgpt以及其他聊天机器人的运作方式感到疑惑?它到底如何发展到这么智能的呢? 今天我们就来讲讲GPT如何通过自然语言生成能力实现 AI客服 、情感分析 和图片识别这三个实例。
一、使用前的准备工作
Colaboratory
在开始之前,我们要注册登录 colab.research.google.com/ 这个网站,我们今天讲的所有操作都是在这个平台上进行的。
Colab是一个由Google提供的免费GPU的Jupyter云服务平台。在个人电脑没有足够计算资源的情况下,可以登录这个平台进行一些较小规模的计算。

API Key
另外我们还需要一个chatgpt的api-key,这个是应用程序编程接口的密钥,是我们访问网站的必要条件之一,它通常用于防止未经授权的访问。
要获得GPT的API,我们可以按照以下步骤进行操作:
- 注册ChatGPT账号
- 创建API密钥:在OpenAI控制台中,找到"API Keys"选项卡,点击"Create New Key",输入密钥名称和描述,选择密钥类型(个人或组织),确认设置后点击"Create Key"按钮。
- 安装OpenAI提供的API客户端库。在OpenAI官方文档中可以找到相关的安装指南和示例代码。
- 调用API进行文本生成
二、AI客服
准备工作完成之后,我们就可以在 colab 上写我们的代码啦~
首先,我们看看如何基于 openai 的大模型来强化ai客服。 我们知道,GPT可以模拟人类客服员的答复方式,为人们提供类似人类的对话服务。在客服领域,GPT可以帮助企业自动回答用户的问题,提高客户服务的效率和质量。
我们添加一个COMPLETION模型中的 text-davinci-003 达芬奇模型,这个模型可以生成比其前身text-davinci-002更自然、更准确且更长的文本。它还可以用于各种领域,如自然语言处理、机器翻译、聊天机器人、语音识别等。
然后我们给后台提供一个prompt
参数,其中可以写我们对这个客服的需求。
python
import openai
# api_key 这里我们添加自己的api_key
openai.api_key = ""
# 常量 文本生成的模型
COMPLETION_MODEL = "text-davinci-003"
# 系统后台生成了一条记录,再调用我们这个 AIGC 来生成客服
prompt = """请你使用朋友的语气回复到客户,并称他为亲,他的订单已经发货在路上了,预计在3天之内会送达,订单号2021AEDG,我们很抱歉因为天气的原因物流时间比原来长,感谢他选购我们的商品。"""
下一步,我们定义了一个函数get_response
,这个函数接收一个prompt
(即文本提示)和一个可选的temperature
参数(控制生成文本的随机性)。然后,这个函数通过调用OpenAI库的Completion模块的create
方法来生成回复。
python
# 封装了 openai 回复的功能
def get_response(prompt, temperature=1.0):
completions = openai.Completion.create(
engine=COMPLETION_MODEL,
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=temperature
)
# JSON choices text
print(completions)
message = completions.choices[0].text
return message
这里我们输出一下
python
print(get_response(prompt))
此时,输出结果为:
python
亲,您的订单号2021AEDG已经发货在路上了,我们会尽最大努力确保按时为您配送,预计3个工作日之内到达,很抱歉由于天气的原因使物流受到影响,让您等得有些久了。感谢您对我们产品的支持。
如果我们对这个客服说的话不满意,我们再生成一次。
python
亲爱的客户,
您好!感谢您购买我们的商品,您的订单2021AEDG已发出,目前正在路上,预计在3天之内会送达,但因为天气的原因,物流时间比原来长了一些。请您耐心等待,祝您愉快!
抱歉给您带来不便,感谢您的耐心等待,客官放心,我们一定会尽力满足您的需求!
三、情感分析
接下来我们学习如何使用transformers
库对我们的语句进行情感分析。transformers
我们之前的文章就有涉及到它的优点以及使用,有需要大家也可以去看看。
该命令安装了transformers
库,用于在自然语言处理中使用预训练模型。
python
!pip install transformers #来自抱抱脸
这一行从transformers
库导入了pipeline
模块。pipeline
模块使您能够轻松使用预训练模型执行各种自然语言处理任务。
python
from transformers import pipeline # pipeline 派发模块
这一行创建了一个情感分析的pipeline,使用了一个预训练的情感分析模型。默认使用的模型可能是一个通用情感分析模型。
python
classifer = pipeline('sentiment-analysis') # 情感分析
到这里我们就可以对语句进行情感分析了。现在我们分析英文文本"i love you"的情感,并打印结果
python
result = classifer('i love you')
result
结果输出为:[{'label': 'POSITIVE', 'score': 0.9998656511306763}]
在这里score
表示模型对某个文本情感的置信度或概率分数
模型预测为:积极情感
python
result = classifer('thank you')
result
输出:[{'label': 'POSITIVE', 'score': 0.9998352527618408}]
python
result = classifer('shut up')
result
输出:[{'label': 'NEGATIVE', 'score': 0.9992936849594116}]
我们再操作两次,能看出我们的结果置信度还是比较高的。
python
result = classifer('遥遥领先')
result
输出:[{'label': 'NEGATIVE', 'score': 0.8616330027580261}]
但是当我们输入'遥遥领先'这个语句时,我们就可以发现问题了,为什么遥遥领先这样一个正面词汇会反映为负面呢?
这个时候我们聪明的小伙伴一定反应过来了,因为遥遥领先是中文啊,我们导入的数据库是以英文为底层基础的。
这个要怎么解决呢?我们只要导入一个中文模型不就解决了嘛
python
# 中文模型 大众点评的数据训练出来的
classifer = pipeline('sentiment-analysis',
model="uer/roberta-base-finetuned-dianping-chinese")
python
result = classifer('遥遥领先')
result
这次的结果就对啦:[{'label': 'positive (stars 4 and 5)', 'score': 0.941333532333374}]
四、图片分析
这里我们仍然使用transformers模型。
python
!pip install transformers
查看 Transformers Pipelines 支持的任务,SUPPORTED_TASKS
是一个包含了transformers
库中支持的不同任务的字典。每个任务都对应一个键值对。
python
from transformers.pipelines import SUPPORTED_TASKS
SUPPORTED_TASKS
我们打印一下它支持的任务
python
print(SUPPORTED_TASKS.items())
这一段代码遍历了支持任务的字典,打印出每个任务的键。
python
for k, v in SUPPORTED_TASKS.items():
print(k)
这一段代码使用了 transformers.pipelines
模块,同时使用了 requests
库下载图像并使用 PIL
库打开图像。这里通过 requests.get
获取图像数据,Image.open
打开图像。
总体而言,这个代码片段展示了如何使用transformers
库中的pipelines模块来执行自然语言处理任务,以及如何使用其他库进行图像处理。
python
from transformers.pipelines import pipeline
import requests #python的http 请求库
from PIL import Image # PIL python 图片的专业库
url = "https://unsplash.com/photos/oj0zeY2Ltk4/download?ixid=MnwxMjA3fDB8MXxzZWFyY2h8MTR8fHBpY25pY3xlbnwwfHx8fDE2Nzc0OTE1NDk&force=true&w=640"
# requests.get python 同步语言
img = Image.open(requests.get(url, stream=True).raw)
img
于是我们到这里就能够看见我们的图片了。
但是我们只是将图片抓取出来,还没来得及对图片做任何操作。
接下来我们的操作才是重点。
该段代码我们使用了预训练的图像物体检测模型,检测图像中的帽子 ,太阳镜 ,书本,并返回预测结果,包括每个检测到的对象的边界框、标签和置信度分数
python
predictions = detector(
img,
# 候选对象
candidate_labels=["hat","sunglasses","book"]
)
predictions
这一部分使用了PIL库的ImageDraw
模块,根据模型的预测结果在图像上绘制边界框和标签,并将置信度分数显示在图像上。
python
from PIL import ImageDraw
draw = ImageDraw.Draw(img)
for prediction in predictions:
box = prediction["box"]
label = prediction["label"]
score = prediction["score"]
xmin, ymin, xmax, ymax = box.values() # 解构
draw.rectangle((xmin, ymin, xmax, ymax), outline="red", width=1)
draw.text((xmin, ymin), f"{label}: {round(score, 2)}", fill="red")
img
那我们想要的结果就出来了,图中将我们想要扫描到的结果帽子 ,太阳镜 ,书本 全部以方形圈出,并且按照我们想要的效果将位置也标明了。
总体而言,这段代码使用了transformers
库的pipelines模块进行图像物体检测,然后使用PIL库在图像上绘制了检测结果。
结语
那么今天的分享就结束啦,点赞收藏不迷路,咱们下期再见ヾ( ̄▽ ̄)ByeBye~