如何将 YouTube 视频中的音频内容转换为文本,以及如何基于这些文本构建一个聊天:问答应用程序?
2023-06-21
本文介绍了如何使用 `yt_dlp`、`pydub` 和 OpenAI Whisper API 将 YouTube 视频的音频转换为文本,并利用这些文本构建一个基于 OpenAI 模型的聊天问答应用程序。
我们将使用 OpenAIWhisperParser,该解析器将使用 OpenAI Whisper API 将音频转录为文本。
注意:你需要提供一个 OPENAI_API_KEY。
我们首先使用 yt_dlp
和 pydub
来从 YouTube URL 下载并切分音频文件。
然后我们使用 YoutubeAudioLoader 和 OpenAIWhisperParser 将音频文件转录为文本。
以 Andrej Karpathy 的 YouTube 课程的第一讲为例:
# 两个 Karpathy 的讲座视频 urls = ["https://youtu.be/kCc8FmEb1nY", "https://youtu.be/VMj-3S1tku0"] # 保存音频文件的目录 save_dir = "~/Downloads/YouTube" # 将视频转录为文本 loader = GenericLoader(YoutubeAudioLoader(urls, save_dir), OpenAIWhisperParser()) docs = loader.load()
然后,我们将得到的文档(音频转录)合并成一个文本字符串,将其切分成小块,用 OpenAIEmbeddings 构建一个索引,然后使用这个索引和 ChatOpenAI 模型构建一个问答链。
# 将文档合并 combined_docs = [doc.page_content for doc in docs] text = " ".join(combined_docs) # 切分文本 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=150) splits = text_splitter.split_text(text) # 构建索引 embeddings = OpenAIEmbeddings() vectordb = FAISS.from_texts(splits, embeddings) # 构建一个 QA 链 qa_chain = RetrievalQA.from_chain_type( llm=ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0), chain_type="stuff", retriever=vectordb.as_retriever(), )
现在你可以通过 QA 链提问问题了:
query = "我们为什么需要在每一步的反向传播之前将梯度归零?" qa_chain.run(query) # 返回: "我们需要在每一步的反向传播之前将梯度归零,因为反向传播会在每个参数的 grad 属性中积累梯度。如果我们不在每次反向传播之前将 grad 归零,梯度就会积累并增加,导致更新不正确和收敛速度变慢。通过在每次反向传播之前将 grad 归零,我们可以确保梯度被正确计算,优化过程能够按预期进行。"
以上就是从 YouTube 视频到文本,再到聊天/问答应用的整个过程。