ChatGPT 发布后,随着聊天机器人、大型语言模型 (LLM) 和副驾驶员等人工智能技术的大肆宣传,更多用例很快出现。
我说的不是最常见的,例如写作助手、图像生成器或根据数据进行训练的聊天机器人。我说的是更小众的用例,比如逼真的会说话的化身、视频编辑器或语音合成。
在本文中,我们将探讨其中一个用例 - 一个可与播客或YouTube视频一起使用的转录器应用程序。如果您曾经想使用 GPT-3 API 或观看实际的 OpenAI Whisper 演示,那么这将非常有价值。
在本教程的第 1 部分中,我们将介绍设置并开始应用程序开发所需的一切。
然后在第 2 部分中,我们将把工作代码上传到云端并让用户界面正常工作,以便其他人可以看到结果并与应用程序交互。
现在,系好安全带,因为我们将亲自使用一些 Python 代码来构建它。
为了构建这个,我们将完成 3 个步骤。
在第一个中,我们将看到为未来的旅程做好准备所需的一切。
在第二个中,我们将在本地构建一个原型,并找出哪些工具可以在此过程中为我们提供帮助。
在最后一项中,我们将把我们构建的所有内容上传到云端,以便其他人也可以尝试。
听起来不错?
好吧,那我们就开始吧!
首先,我们将遵循的过程的粗略概述是提取我们想要转录的信息,然后将其提供给
从那里,我们将获取输出并对其进行一些后处理,然后将其显示在前端应用程序中以供其他人查看并能够与其交互。
如果我们手动执行此过程,则需要执行几个额外步骤。幸运的是,OpenAI 已经可用
在这里你必须决定走哪条路。
首先选择您的路径,然后我们将继续。
接下来,我们需要 OpenAI 的 API 密钥来访问 GPT-3.5 Turbo 模型(这基本上是为 ChatGPT 提供支持的模型)。
如果您不知道如何获取,请按照以下步骤操作:
一旦你拿到了那把钥匙,我们就去解决下一个难题,耳语。
您可以通过运行以下命令在计算机上下载并安装最新版本的 Whisper:
pip install -U openai-whisper
或者,您可以使用以下命令从 Git 安装最新的提交及其依赖项:
pip install git+https://github.com/openai/whisper.git
这使您可以更好地控制要安装的版本(如果您从 Colab 笔记本中尝试执行此操作,则这是您想要运行的命令。)
注意:如果您想从命令行运行 Whisper,则需要安装“ffmpeg”。
安装 Whisper 后,我们现在需要的是我们想要转录的实际文件。我们可以向它提供多种类型的媒体文件,例如“mp3”、“mp4”、“mpeg”、“wav”等等。
这里唯一的限制是文件的大小,10 分钟的视频比 20 分钟的播客花费更多的时间。
现在,这是下一个岔路口。
您必须选择是否要转录视频或音频。
为了简单起见,在本示例中,我们将使用播客中的音频文件。
在这里,您可能想到的问题是“我从哪里下载播客剧集? ”。
据我所知有两种方法。
第一个是使用 ListenNotes 这样的网站,选择您喜欢的任何播客,然后转到各个剧集。
值得注意的是,您必须创建一个帐户才能访问各个剧集及其相应的音频文件。
从那里,您必须单击带有 3 个点的按钮来打开“更多”选项卡,然后您将看到下载音频的选项。
看起来是这样的:
第二个选项是使用 Podchaser。您将遵循类似的过程来查找播客、浏览剧集列表并选择特定的播客。
进入单个剧集的页面后,您将在右侧看到一列,其中有播放按钮和下面的其他选项。
如果向下滚动,您将看到有关播客的信息、在社交媒体上共享的选项以及一小部分包含下载音频文件的选项。
看起来是这样的:
选择您喜欢的选项并下载几个长度不同的剧集,以便您可以测试转录过程的工作原理。
我的建议是您选择短于 30 分钟的剧集。
这样做的原因是,如果您选择更长的时间,Whisper 可能需要很长时间来处理它,并且您可能会遇到超时问题(特别是如果您使用的是 Colab 环境)。
20-30 分钟的一集可能需要 4 到 8 分钟才能完成转录。
这里的主要瓶颈是在我们得到可用于进一步工作的结果之前转录过程的持续时间。
现在我们已经满足了所有要求并且设置已完成。
现在是我们继续旅程的下一部分的时候了。
我们正在进入更深层次的编程领域。
我们将通过Python使用 Whisper,因为这样更方便。而且我们不需要为转录做任何特殊的事情,只需将音频文件传递给模型并等待转录即可。
那么让我们逐行完成该过程。
import whisper model = whisper.load_model("base")
在这里,我们加载 Whisper 模型的“基础”版本。 OpenAI 发布了多个版本(或“大小”),它们在参数数量、消耗的资源以及执行转录所需的时间方面有所不同。
这是一个方便参考的图表。
如果您愿意,您可以继续尝试所有尺寸(双关语)。
请记住,如果您使用更大的模型,则需要更多资源来运行它(例如 GPU)。
因此,如果您在 Colab 中运行此命令,则可以改用此命令。
model = whisper.load_model('medium', device='cuda')
您传入要运行该程序的设备的参数。
选择模型的大小后,您可以传入要转录的音频文件,如下所示:
result = model.transcribe(“path-to-where-the-file-is”)
然后您可以打印内容以验证转录是否有效。 (但您可能只想查看前 1000 个字符左右,而不是打印出整个内容。)
podcast_transcript = result['text'] podcast_transcript[:1000]
如果效果良好,您现在可以将转录过程的结果保存到变量中。我们将用于后期处理的一个。
这很容易。但是,假设我们希望有一种方法来了解播客中讨论的内容,而不是我们在剧集描述中找到的内容。
我们可以创建一个函数来获取整个记录并为我们提供“执行摘要”。我们还可以与那些没有时间浏览整个事情的忙碌的人分享这个总结,看看是否值得花时间。
让我们继续这样做吧。
你猜我们将用什么来进行总结?
提示:我们已经有一个 API 密钥。
是的,你明白了。
我们将使用“get-3.5-turbo”模型通过向其提供播客的文字记录来创建此摘要。
我们可以直接调用 API,但使用 OpenAI 包(它被恰当地命名为“openai”😆)要方便得多。
我们还需要 OpenAI 的标记生成器库来了解我们将发送到模型的标记数量。
我们可以通过运行来安装这两个...
pip install openai pip install tiktoken
现在,我们需要在调用 GPT-3 之前将 API 密钥保存在某处。
您可以将其保存为环境变量,然后像这样在代码中使用它。
openai.api_key = os.environ["OPENAI"]
或者,如果您使用的是 Colab 环境,则可以执行类似的操作。
import openai from getpass import getpass openai.api_key = getpass("Enter your key here: ")
然后,当您运行该命令时,它将显示一个输入单元格,您可以在其中粘贴密钥。
现在,您可以通过列出这段代码当前可用的模型来确认该密钥是否有效。
models = openai.Model.list() for model in models['data]: print(model['root'])
当我们的密钥正常工作后,我们可以继续调用 GPT-3 API。
但我们必须首先考虑一些重要的事情。这与我之前提到的“代币”有关。
由于我们的想法是将播客成绩单传递给人工智能模型并返回其摘要,因此我们需要知道它能够接受多少“令牌”。
AI 不计算单词或字符,而是使用标记。这就是“上下文窗口”概念存在的原因。
如果我们超过上下文窗口的长度,我们的转录本可能会被截断,我们将从不完整的数据中获得摘要。 (选择不太长的播客剧集的另一个原因。)
幸运的是,GPT-3 模型有 2 个版本。传统的一个和另一个具有扩展的上下文窗口。
如果您查看 OpenAI 文档,您可以看到它们之间的区别。
这就是“tiktoken”库的用途。它将帮助我们了解转录本中有多少个标记,这样我们就知道要使用什么模型来进行摘要。
我们可以使用以下代码进行计算。
import tiktoken enc = tiktoken.encoding_for_model(“gpt-3.5-turbo”) print(“Number of tokens in the input ”, len(enc.encode(podcast_transcript)))
如果结果中的令牌数量大于 4,097,那么我们将不得不使用模型的“16k”版本。
了解这一点后,我们最终可以使用适合情况的正确模型来调用 API。
首先,我们将发送到模型的提示保存在变量中。您可以尝试使用自己的提示符,但这里有一个示例:
prompt = """ You are an expert marketer responsible for the growth of several popular podcasts. You are now tasked with summarizing an episode in a way that is concise and covers the main points of the episode for others to understand. The transcript of the episode is provided below. """ request = prompt + podcast_transcript
现在,让我们使用以下代码调用 API。
chatOutput = openai.ChatCompletion.create(model="gpt-3.5-turbo-16k", messages=[{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": request} ] )
然后让我们检查 API 的响应。
chatOutput.choices[0].messages.content
你有它!基于我们使用 Whisper 生成的文字记录的播客剧集摘要。
您可以使用相同的过程来提取剧集的主要亮点。有点像让潜在的听众了解对话的一种方式。
执行此操作的方法非常相似。唯一改变的部分是模型将收到的提示。您可以要求它以列表格式提取最重要的点,而不是要求摘要。结果取决于您对提示的创造力。
现在我们知道这是可行的,我们可以将所有代码放入一个函数中以在本地运行它。
那么,让我们继续创建该函数。
def transcribe_podcast(file_path): print("Starting podcast transcription") # Load the Whisper model import os import Whisper print("Loading the Whisper model") model = whisper.load_model("medium") print(model.device) # Do the transcription print("Starting the transcription") result = model.transcribe(file_path) # Return the transcribed text print("Transcription completed, returning results...") return result
您可以调用该函数,向其发送音频文件的路径并获得转录作为回报。
以下是如何执行此操作的示例。
output = transcribe_podcast('path_to_audio_file')
然后再看一下文字记录的内容。
output[text][:1000]
好吧,到目前为止一切顺利。
现在这可以在本地运行,最好将其上传到云端,这样您就可以向其他人展示它,并用您的 l33t h4xx0r 编码技能给朋友和家人留下深刻印象。 😆
但事实并非如此,将其部署到在线服务以便其他人可以尝试是一个不错的选择。
我们将在第 2 部分中做到这一点。创建一个可以接受请求的云函数,并完成一个快速前端以可视化该函数的结果(例如播客剧集的摘要和亮点)。
我们暂时就这样吧。
到目前为止,您已经在本地运行了该应用程序,您可以使用不同长度的剧集对其进行测试,并查看 Whisper 进行转录所需的平均时间长度。
感谢您阅读本文。
我希望在第二部分中再次见到您。
不要忘记在 Hackernoon 上订阅我,这样您就不会错过接下来的文章。