如何构建 ChatGPT 驱动的 AI 工具来快速学习技术知识
使用 OpenAI API 免费额度时无需费用;或少于 0.10 美元
注册 / 登录 亚马逊云科技账户
Amazon SageMaker Studio Lab 账户
Python 基础知识
您上一次观看 YouTube 视频学习新知识是什么时候?一项近期调查显示,大多数受访者每周观看视频 2 到 4 次,在 2019 年谷歌的一项研究中,86% 的美国观众表示他们使用 YouTube 学习新事物。
这不足为奇:YouTube 包含几乎任何主题的教学内容,不仅有数学和编程等学术科目,也有动手项目、教程和专业认证准备。
但作为一种学习工具,YouTube 并不完美。有些视频有太多打断视频观看的广告和赞助,有些视频因非必要信息而减慢速度,而另一些视频则需要观众经常暂停才能按照步骤操作。
想象一下,如果您能得到一个简明的视频摘要来确定视频是否值得一看,从视频中提取分步指导来方便您跟从其步骤,最后再生成一个测验来检验您的理解。那不是很棒吗?
我们在本教程中正是要构建这样一个工具!
我将逐步引导您了解如何使用 Amazon SageMaker Studio Lab 配置免费的 ML 开发环境,将其与 Hugging Face 的开源 ML 模型集成,以及使用 OpenAI 的 ChatGPT API。
您可以选择不同的 ML 模型或调整 ChatGPT 提示,从而将这些步骤应用到其他使用场景。
学习内容
- 如何搭建免费的 ML 开发环境
- 如何利用预训练的开源 ML 模型
- 如何使用 ChatGPT API
解决方案概述
本教程由 4 个部分组成:
- 第 1 部分 - 搭建环境:SageMaker Studio Lab 和 OpenAI API 密钥
- 第 2 部分 - 获取 YouTube 视频文字转写
- 第 3 部分 - 使用 ML 模型总结和翻译转写内容
- 第 4 部分 - 使用 ChatGPT API 提取步骤并创建测验
在第 1 部分中,我们将配置 2 个必要工具:访问 SageMaker Studio Lab 开发环境,创建用于与 ChatGPT 交互的 OpenAI API 密钥。SageMaker Studio Lab 的特别之处在于它是完全免费的,并且独立于亚马逊云科技账户。如果您不熟悉机器学习,这项免费服务是入门的绝佳方式!
在第 2 部分中,我们将创建一个机器学习项目,该项目使您能直接从浏览器编写代码,而无需搭建本地环境。您还将学习如何在 CPU 或 GPU 云实例上运行代码。我们将创建一个 SageMaker Notebook,安装软件库,然后开始试验。
在第 3 部分中,您将学习如何使用 Hugging Face Hub 中的开源模型进行推理。我们将利用预训练的序列到序列模型来总结 YouTube 视频转写并将其翻译成不同的语言。
在第 4 部分中,我们将试验 ChatGPT API。我们将讨论提示语工程,然后利用 ChatGPT API 从 YouTube 视频生成分步指南。此外,我们将创建一个测验来测试您对视频内容的理解。
注意:在本教程中,我们将使用免费资源。您唯一可能需要承担的费用是使用 ChatGPT API 的费用,如果您已经用完了所有免费额度,则需要花费几美分。当您注册 OpenAI 帐户时,您将在前 3 个月内获得 5 美元的额度。这足以运行数百个 API 请求。
让我们开始吧!
第 1 部分 - 搭建环境:SageMaker Studio Lab 和 OpenAI API 密钥
要开始使用,请转到 Studio Lab 引导页面,然后点击 Request free account。在表格中填写所需信息,然后提交您的请求。您将收到一封用于验证邮件地址的电子邮件。按照电子邮件中的说明进行操作。
请注意,您在帐户申请获得批准后,才能注册 Studio Lab 帐户。审核过程通常最多需要 5 个工作日。帐户申请获得批准后,您将收到一封电子邮件,其中包含指向 Studio Lab 帐户注册页面的链接。在您的请求获得批准后,此链接将在 7 天内保持有效状态。
要在您的应用程序中集成和使用 Open AI 模型,您需要注册一个 OpenAI 帐户。完成注册过程后,您需要创建一个 API 密钥。此 API 密钥是必不可少的,因为它使您能够从第三方服务向 OpenAI 发送请求。
导航到 OpenAI API 密钥页面,点击Create new secret key(创建新密钥)。命名密钥,复制密钥并保存。此后,您将无法查看该密钥!
请注意,OpenAI 目前为新用户提供 5 美元的额度,您可以免费开始试用其 API。此额度可在您注册帐户后的前 3 个月内使用。在最初的 3 个月期限之后,定价将转换为按需付费模式。若您要获取有关费率和定价结构的详细信息,建议您访问 OpenAI 定价页面。
您可以访问 Usage Limits(用量限制)页面来设置使用限制并随时查看当前用量情况。
在本教程中,我们将使用 GPT-3.5 Turbo 模型。如下表所示,此模型的 API 调用价格仅为不到 1 美分。使用 5 美元的免费额度,您将能够免费进行数百次实验!
模型 | 输入 | 输出 |
4K 上下文 | 每 1000 个 token $0.0015 | 每 1000 个 token $0.002 |
16K 上下文 | 每 1000 个 token $0.003 | 每 1000 个 token $0.004 |
第 2 部分 - 获取 YouTube 视频文字转写
获得 Studio Lab 的访问权限后,请登录 Amazon SageMaker Studio Lab。
在 My Project(我的项目)下,您可以基于云计算实例选择计算类型并启动项目运行时。Studio Lab 允许您选择专为计算密集型算法而设计的 CPU(中央处理器),或推荐用于深度学习任务(尤其是 transformer 和计算机视觉)的 GPU(图形处理单元)。
请选择 GPU 实例,因为它能大大减少执行时间。点击 Start runtime(开始运行时)。然后点击 Open project(打开项目)。当您启动运行时的时候,您可能需要完成一个 CAPTCHA 验证码。如果您在任何时候需要暂停一下,请点击 Stop runtime(停止运行时),因为 GPU 使用时间限制为每天 4 小时。您的项目将被保存。
一个项目中有文件和文件夹,其中包括 Jupyter Notebook。下方的图片展示的是 Studio Lab Launcher。点击 Notebook 下的 default:Python。这样即可新建 Notebook。
我们来命名这个 Notebook,然后保存它。在 Studio Lab 菜单中,点击 File(文件),Save File As(另存为),然后选择文件夹,并确定文件名。例如 learn-with-ai.ipynb。
首先我们将使用 pip 安装本教程所需的所有软件包。复制下方所示的代码,然后按下 Shift + Enter,或点击顶部的 Play 按钮来执行它。
#installing libraries
!pip install python-dotenv
!pip install openai
!pip install youtube_dl
!pip install youtube_transcript_api
!pip install torchaudio
!pip install sentencepiece
!pip install sacremoses
!pip install transformers
接下来我们导入所有必要的依赖。复制并运行以下代码:
#importing dependencies
import re
from youtube_transcript_api import YouTubeTranscriptApi
import torch
import torchaudio
import openai
import textwrap
from transformers import pipeline
我们完成了搭建环境的所有步骤!
现在我们可以着手解决解决方案概述中的第二个任务,也就是获取 YouTube 视频的文字转写。这里我们选用的是这条有关亚马逊云科技区域和可用区的讲解视频。您可以选择其他的视频,只需替换 youtube_url 变量中的链接。复制 URL 中 “&” 符号之前的部分,即可得到 YouTube 视频的链接,如下图所示。
注意:建议您在入门阶段使用 30 分钟以内的视频。这样,您能够更快地完成本教程,因为对较长的视频执行命令将花费更多时间。
复制并运行以下代码:
# Specify the YouTube video URL
youtube_url = "https://www.youtube.com/watch?v=b9rs8yzpGYk"
# Extract the video ID from the URL using regular expressions
match = re.search(r"v=([A-Za-z0-9_-]+)", youtube_url)
if match:
video_id = match.group(1)
else:
raise ValueError("Invalid YouTube URL")
# Get the transcript from YouTube
transcript = YouTubeTranscriptApi.get_transcript(video_id)
# Concatenate the transcript into a single string
transcript_text = ""
for segment in transcript:
transcript_text += segment["text"] + " "
print(transcript_text)
此代码检查 URL 链接是否有效,然后使用 YouTube API 的 YouTubeTranscriptApi.get_transcript(video_id) 方法来获取 YouTube 视频的文字转写。此方法提供与视频相关联的、准确的、官方的字幕。
第 3 部分 - 使用 ML 模型总结和翻译转写内容
现在,我们有了 YouTube 视频的完整转写内容,就可以继续利用开源模型执行自然语言处理任务,例如摘要、翻译等。这些模型将帮助我们从转写中提取有价值的见解。
我们将使用 Hugging Face 的 Transformers 库。Hugging Face 是一家专注于自然语言处理 (NLP) 的领先平台,并提供最先进的模型、工具和库,用于构建和部署 NLP 应用程序。Transformers 提供 API 和工具,方便您下载预训练模型。通过使用预训练模型,您可以显著降低计算成本和碳足迹,并且可以节省从头开始训练模型所需的宝贵时间和资源。
假设英语不是您的第一语言,您想将 YouTube 视频转写翻译成西班牙语。为了实现这一点,我们可以利用专门为翻译设计的预训练机器学习模型。翻译是将文本序列从一种语言转换为另一种语言。这项任务可以表述为序列到序列问题。利用预训练的序列到序列翻译模型,我们可以高效地将 YouTube 视频转写从英语翻译成西班牙语。
Hugging Face 提供 2,500 多种翻译模型供您选择。这些模型涵盖各种语言。您可以通过更新以下代码中的 model_checkpoint 变量来尝试不同的预训练翻译模型。
复制并运行以下代码。可能需要几分钟才能完成,这取决于转写文本的长度。
from transformers import pipeline
# Replace this with your own checkpoint
model_checkpoint = "Helsinki-NLP/opus-mt-en-es"
translator = pipeline("translation", model=model_checkpoint)
# Define the maximum sequence length
max_length = 512
# Split the input text into smaller segments
segments = [transcript_text[i:i+max_length] for i in range(0, len(transcript_text), max_length)]
# Translate each segment and concatenate the results
translated_text = ""
for segment in segments:
result = translator(segment)
translated_text += result[0]['translation_text']
print(translated_text)
接下来,我们将继续使用文本摘要预训练模型对视频进行总结。在这种情况下,我将使用原始的英文转写文本。但是,如果您选择继续使用已翻译的转写文本,则可以将 transcript_text 变量替换为包含已翻译文本的 translated_text 变量。我们可以将摘要模型应用于转写文本,生成视频内容的简明摘要。
复制并运行以下代码。请等待摘要生成。
from transformers import pipeline, AutoTokenizer
# Instantiate the tokenizer and the summarization pipeline
tokenizer = AutoTokenizer.from_pretrained('stevhliu/my_awesome_billsum_model')
summarizer = pipeline("summarization", model='stevhliu/my_awesome_billsum_model', tokenizer=tokenizer)
# Define chunk size in number of words
chunk_size = 200 # you may need to adjust this value depending on the average length of your words
# Split the text into chunks
words = transcript_text.split()
chunks = [' '.join(words[i:i+chunk_size]) for i in range(0, len(words), chunk_size)]
# Summarize each chunk
summaries = []
for chunk in chunks:
# Summarize the chunk
summary = summarizer(chunk, max_length=100, min_length=30, do_sample=False)
# Extract the summary text
summary_text = summary[0]['summary_text']
# Add the summary to our list of summaries
summaries.append(summary_text)
# Join the summaries back together into a single summary
final_summary = ' '.join(summaries)
print(final_summary)
这样一来,我们就获得了视频内容的简明摘要,其中不包括赞助、广告或其他无关信息。这使我们能够快速掌握视频中的关键点和主要思想,而不会被不必要的细节拖慢速度。恭喜您完成了这一步!
我们现在即可进入最后一步,即第 4 步,我们将重新生成摘要以比较 OpenAI 与开源模型的结果,根据摘要转写文本创建分步教程,并创建测验来检查我们的理解和获得的知识。
第 4 部分 - 使用 ChatGPT API 提取步骤并创建测验
若要开始试验 ChatGPT,您需要在第 1 部分中创建的 API 密钥,并用它替换代码中 openai.api_key 变量的引号内的值。
我们将使用 ChatGPT 模型获取视频摘要,并将其与我们在上一步中使用开源模型获得的摘要进行比较。
注意:建议您使用 OpenAI Playground 进一步探索和试验 OpenAI API 模型。OpenAI Playground 是一个基于 Web 的用户友好型工具,可以让您测试提示和熟悉 API 的功能。它提供了一个交互式环境,您可以在其中微调提示语并观察模型的响应。
def split_text_into_chunks(text, max_chunk_size):
return textwrap.wrap(text, max_chunk_size)
openai.api_key = "provide your key here"
max_chunk_size = 4000
transcript_chunks = split_text_into_chunks(transcript_text, max_chunk_size)
summaries = ""
for chunk in transcript_chunks:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": f"{chunk}\n\nCreate short concise summary"}
],
max_tokens=250,
temperature=0.5
)
summaries += response['choices'][0]['message']['content'].strip() + " "
print("Summary:")
print(summaries)
您认为哪个总结更好?
我认为 ChatGPT 创建的摘要见解更加深刻。
接下来,我们可以修改提示,指示 ChatGPT 从视频记录中提取必要的步骤。我们可以这样生成一个分步指南,为我们提供明确的说明。这将有助于我们在与视频内容互动时采用结构化的、指导方法。
system 参数表示提供给模型以指导其行为的指令或上下文。它设定了 AI 助手的整体行为、基调或角色。例如:“你是一位提供分步指导的技术讲师”。这有助于为 AI 模型设定期望,指导它应该如何响应。
user 表示来自用户的输入。您可以在此处向 AI 模型提供特定请求、问题或说明。例如,您可以使用这样一条 user 提示:“Generate steps to follow from the transcript tex”(从转写文本生成要遵循的步骤)
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=[
{"role": "system", "content": "You are a technical instructor."},
{"role": "user", "content": transcript_text},
{"role": "user", "content": "Generate steps to follow from text."},
]
)
# The assistant's reply
guide= response['choices'][0]['message']['content']
print("Steps:")
print(guide)
在我们的试验结束之际,让我们根据视频中讲到的内容生成一个测验。测验将评估我们对内容的理解。
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=[
{"role": "system", "content": "You are a helpful assistant that generates questions."},
{"role": "user", "content": transcript_text},
{"role": "user", "content": "Generate 10 quiz questions based on the text with multiple choices."},
]
)
# The assistant's reply
quiz_questions = response['choices'][0]['message']['content']
print("Quiz Questions:")
print(quiz_questions)
您将看到一个知识测验,其中包含 10 个测试问题。如果您正在准备考试,这将非常有用。您可以修改提示,要求模型解释正确答案,例如:“根据文本生成 10 个用于测验的选择题,并解释答案为什么正确”。
总结
做得很好!您已成功完成本教程,并使用 Jupyter Notebook 学习了如何入门 ML 项目、集成 Hugging Face 库中的开源模型以及利用 ChatGPT API 开发您自己的创新 AI/ML 解决方案。
在您今后的 AI 之旅上,我建议您探索 Hugging Face 库,其中包含超过 250,000 个模型。您可以将它们应用于各种不同的使用场景。例如,您可以尝试使用文本到图像生成,为每个测验问题创建配图,也可以借助文本到语音转换模型,用转写摘要合成音频文件。
只有想不到,没有做不到!
感谢您阅读本教程,我希望它能为您踏上 AI/ML 之旅提供一些实用技能。
关于作者
Viktoria 是一名资深开发者布道师,热衷于帮助开发者使用新技术进行构建和创新。她也是一名内容创作者,经常在 LinkedIn 上分享内容。Viktoria 被评为顶级云博主 (Top Cloud Influencers) 之一和 LinkedIn 全球十大女性内容创作者之一。