基于ChatGPT的视频智能摘要实战

随着在 YouTube 上提交的大量新视频,很容易感到挑战并努力跟上我想看的一切。 我可以与我每天将视频添加到“稍后观看”列表中的经历联系起来,只是为了让列表变得越来越长,实际上并没有稍后再看。 现在,像 ChatGPT 或 LLaMA 这样的大型语言模型为这个长期问题提供了一个潜在的解决方案。

在这里插入图片描述

推荐:用NSDT设计器 快速搭建可编程3D场景。

通过将数小时的视频内容转换为几行准确的摘要文本,视频摘要器可以快速为我们提供视频的要点,这样我们就不必花费大量时间来完整观看它。 在我创建这个网络应用程序之后,我最常使用的场景是参考它的摘要来决定某个视频是否值得观看,尤其是那些辅导、脱口秀或演示视频。

你可以通过多种方式使用强大的语言模型来完成此视频摘要。

  • 一种选择是使用或设计 ChatGPT 插件,它可以将令人难以置信的 AI 连接到实时 YouTube 网站。 但是,只有少数商业开发人员可以访问 ChatGPT 插件,因此这对包括我在内的所有人来说可能不是最可行的途径。
  • 另一种选择是下载视频的抄本(字幕)并将其附加到提示中,然后要求语言模型通过发送提示来总结抄本文本。 然而,这种方法有一个很大的缺点——你不能总结一个包含超过 4096 个标记的视频,这对于一个普通的谈话节目来说通常是 7 分钟左右。
  • 一个更有前途的选择是使用上下文学习技术对转录本进行向量化,并使用向量向语言模型提示“摘要”查询。 这种方法可以生成准确的答案,指示转录文本的摘要,并且不限制视频长度。

如果你有兴趣开发自己的上下文学习应用程序,我之前关于构建聊天机器人以学习和聊天文档的文章提供了一个很好的起点。 通过一些细微的修改,我们可以应用相同的方法来创建我们自己的视频摘要器。 在本文中,我将逐步指导你完成开发过程,以便你了解并复制自己的视频摘要器。

1、功能框图

在这个Video Summarizer应用程序中,我们以llama-index为基础,开发了一个Streamlit web应用程序,为用户提供视频URL的输入以及屏幕截图、文字记录和摘要内容的显示。 使用 llamaIndex 工具包,我们不必担心 OpenAI 中的 API 调用,因为对嵌入使用的复杂性或提示大小限制的担忧很容易被其内部数据结构和 LLM 任务管理所覆盖。
在这里插入图片描述

你有没有想过为什么我在让 LLM 生成摘要时设计了几个查询而不是一个用于转录文本处理的查询? 答案在于情境学习过程。 当文档被送入 LLM 时,它会根据其大小分成块或节点。 然后将这些块转换为嵌入并存储为向量。

当提示用户查询时,模型将搜索向量存储以找到最相关的块并根据这些特定块生成答案。 例如,如果你在大型文档(如 20 分钟的视频转录本)上查询“文章摘要”,模型可能只会生成最后 5 分钟的摘要,因为最后一块与上下文最相关 的“总结”。

为了说明这个概念,请看下面的图表:
在这里插入图片描述

通过设计多个查询,我们可以促使 LLM 生成更全面的摘要,涵盖整个文档。 我将在本文后面更深入地组织多个查询。

从第2章到第5章,我将重点介绍本项目中使用到的所有模块的基础知识和典型用法介绍。 如果你愿意在没有这些技术背景的情况下立即开始编写整个 Video Summarizer 应用程序,建议你转到第 6 章。

2、Youtube 视频转录文本

总结 YouTube 视频的第一步是下载转录文本。 有一个名为 youtube-transcript-api 的开源 Python 库可以完美满足我们的要求。

使用如下命令安装模块后,

!pip install youtube-transcript-api
可以使用以下代码轻松下载 JSON 格式的转录文本:from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import JSONFormattersrt = YouTubeTranscriptApi.get_transcript("{video_id}", languages=['en'])
formatter = JSONFormatter()
json_formatted = formatter.format_transcript(srt)
print(json_formatted)

在 .get_transcript() 方法中,唯一应该强制提供的参数是 11 位视频 ID,你可以在 v= 之后的每个 YouTube 视频的 URL 中找到它,例如:

https://www.youtube.com/watch? v=hJP5GqnTrNo

当视频提供英语以外的其他语言时,可以将它们添加到参数语言中,该参数语言作为包含不同语言的列表。

该库还提供“Formatter”方法来生成具有定义格式的转录数据。 在这种情况下,我们只需要 JSON 格式即可进行进一步的步骤。

通过运行上面的代码,你会看到像这样的一个像样的转录文本:

[
{"text": "So anyone who's been paying attention\nfor the last few months", "start": 4.543, "duration": 3.878}, 
{"text": "has been seeing headlines like this,", "start": 8.463, "duration": 2.086},
{"text": "especially in education.", "start": 10.59, "duration": 2.086},
{"text": "The thesis has been:", "start": 12.717, "duration": 1.919},
...
]

3、OpenAI API 密钥

LlamaIndex 的设计目的是兼容各种 LLM,默认使用 OpenAI 的 GPT 模型进行嵌入和生成操作。 因此,当我们决定实施基于 OpenAI GPT 模型的视频摘要器时,我们应该向程序提供我们的 OpenAI API 密钥。

插入我们的密钥唯一需要做的就是通过环境变量提供它:

import os
os.environ["OPENAI_API_KEY"] = '{your_api_key}'

4、LlamaIndex

LlamaIndex 是一个 Python 库,充当用户私有数据和大型语言模型 (LLM) 之间的接口。 它有几个对开发人员有用的功能,包括连接到各种数据源、处理提示限制、创建语言数据索引、将提示插入数据、将文本拆分为更小的块以及提供查询索引的接口的能力 . 借助 LlamaIndex,开发人员无需实施数据转换即可将现有数据用于 LLM,管理 LLM 与数据的交互方式,并提高 LLM 的性能。

可以在此处查看完整的LlamaIndex文档。

以下是使用 LlamaIndex 的一般步骤:

安装包:

!pip install llama-index

Step1 — 加载文档文件

from llama_index import SimpleDirectoryReader
SimpleDirectoryReader = download_loader("SimpleDirectoryReader")
loader = SimpleDirectoryReader('./data', recursive=True, exclude_hidden=True)
documents = loader.load_data()

SimpleDirectoryReader 是 LlamaIndex 工具集中的文件加载器之一。 它支持在用户提供的文件夹下加载多个文件,在本例中,它是子文件夹“./data/”。 这个神奇的加载器功能可以支持解析各种文件类型,如.pdf、.jpg、.png、.docx等,让您不必自己将文件转换为文本。 在我们的应用程序中,我们只加载一个文本文件 (.json) 来包含视频转录数据。

Step2 — 构建索引

from llama_index import LLMPredictor, GPTSimpleVectorIndex, PromptHelper, ServiceContext
from langchain import ChatOpenAI# define LLM
llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo", max_tokens=500))service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context
)

在调用此方法时,LlamaIndex 应与你定义的 LLM 交互以构建索引,在本演示的情况下,LlamaIndex 使用 gpt-3.5 聊天模型通过 OpenAI API 调用嵌入方法。

Step3 — 查询索引

通过建立索引,查询非常简单,无需上下文数据,直接输入即可。

response = index.query("Summerize the video transcript")
print(response)

5、Web开发

与我文章中之前的项目一样,我们将继续使用方便的 Streamlit 工具集来构建 Video Summarizer 应用程序。
在这里插入图片描述

Streamlit 是一个开源的 Python 库,有助于创建交互式 Web 应用程序。 它的主要目的是供数据科学家和机器学习工程师用来与他人分享他们的工作。 借助 Streamlit,开发人员可以使用最少的代码创建应用程序,并且可以使用单个命令轻松地将它们部署到 Web。

它提供了多种可用于创建交互式应用程序的小部件。 这些小部件包括按钮、文本框、滑块和图表。 可以从其官方文档中找到所有小部件的用法。

Web 应用程序的典型 Streamlit 代码可以像下面这样简单:

!pip install streamlit
import streamlit as stst.write("""
# My First App
Hello *world!*
""")

然后只需键入以下命令即可在线运行该网站:

!python -m streamlit run demo.py

如果运行成功,会打印出用户可以访问的URL:

You can now view your Streamlit app in your browser.
Network URL: http://xxx.xxx.xxx.xxx:8501
External URL: http://xxx.xxx.xxx.xxx:8501

6、完整的 Video Summarizer 应用程序

要实现总结 YouTube 视频的整个工作流程,用户体验非常简单。

第 1 步 — 用户输入 YouTube 视频的 URL。
在这里插入图片描述

在这一步中,我们通过 Streamlit st.text_input() 方法创建一个 text_input 小部件,以接收用户输入的视频 URL。

第 2 步 — 应用程序下载视频的屏幕截图和文字记录文件,并将它们显示在侧边栏中。
在这里插入图片描述

在这一步中,在成功从 URL 解析视频 ID 后,我们使用 html2image 库创建一个侧边栏区域来显示屏幕截图(另存为 ./youtube.png)并显示转录文本(另存为 ./data/transcript。 json )通过使用 LlamaIndex 的 SimpleDirectoryReader() 方法。 我们还从 Streamlit 小部件中实现了一个进度条,以指示剩余时间,因为当视频需要很长时间时,摘要过程会花费更多时间。

第 3 步 — 应用程序生成整个视频的摘要,每 5 分钟的视频有一个详细描述
在这里插入图片描述

在此步骤中,如前所述,我们不希望语言模型通过仅搜索摘要作业的相关块来遗漏整个视频中的重要信息。 为避免这种情况,我们创建了一个循环,每 5 分钟查询一次摘要视频部分。 这确保带有向量的提示的标记不超过 4096 个标记的最大限制,防止拆分成块。 需要注意的是,5 分钟间隔只是一个粗略的估计。 我们创建一个 st.expander() 小部件来包含 5 分钟部分的摘要,并创建一个 st.success() 小部件来通过查询显示最终摘要以总结部分摘要。

我用来总结 5 分钟窗口的提示是:

Summarize this article from ”{start_text}\” to ”{end_text}, limited in 100 words, start with ”This section of video”

start_text 和 end_text 是文本字段中引用转录 JSON 中起始字段的内容

请找到完整的演示代码供你参考:

!python -m pip install openai streamlit llama-index langchain youtube-transcript-api html2image
import os
os.environ["OPENAI_API_KEY"] = '{your_api_key}'import streamlit as st
from llama_index import download_loader
from llama_index import GPTSimpleVectorIndex
from llama_index import LLMPredictor, GPTSimpleVectorIndex, PromptHelper, ServiceContext
from langchain import OpenAI
from langchain.chat_models import ChatOpenAIfrom youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import JSONFormatter
import json
import datetime
from html2image import Html2Imagedoc_path = './data/'
transcript_file = './data/transcript.json'
index_file = 'index.json'
youtube_img = 'youtube.png'
youtube_link = ''if 'video_id' not in st.session_state:st.session_state.video_id = ''def send_click():st.session_state.video_id = youtube_link.split("v=")[1][:11]index = None
st.title("Yeyu's Video Summarizer")sidebar_placeholder = st.sidebar.container()
youtube_link = st.text_input("Youtube link:")
st.button("Summarize!", on_click=send_click)if st.session_state.video_id != '':progress_bar = st.progress(5, text=f"Summarizing...")srt = YouTubeTranscriptApi.get_transcript(st.session_state.video_id, languages=['en'])formatter = JSONFormatter()json_formatted = formatter.format_transcript(srt)with open(transcript_file, 'w') as f: f.write(json_formatted)hti = Html2Image()hti.screenshot(url=f"https://www.youtube.com/watch?v={st.session_state.video_id}", save_as=youtube_img)SimpleDirectoryReader = download_loader("SimpleDirectoryReader")loader = SimpleDirectoryReader(doc_path, recursive=True, exclude_hidden=True)documents = loader.load_data()sidebar_placeholder.header('Current Processing Video')sidebar_placeholder.image(youtube_img)sidebar_placeholder.write(documents[0].get_text()[:10000]+'...')# define LLMllm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo", max_tokens=500))service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)index.save_to_disk(index_file)section_texts = ''section_start_s = 0with open(transcript_file, 'r') as f:transcript = json.load(f)    start_text = transcript[0]["text"]progress_steps = int(transcript[-1]["start"]/300+2)progress_period = int(100/progress_steps)progress_timeleft = str(datetime.timedelta(seconds=20*progress_steps))percent_complete = 5progress_bar.progress(percent_complete, text=f"Summarizing...{progress_timeleft} left")section_response = ''for d in transcript:if d["start"] <= (section_start_s + 300) and transcript.index(d) != len(transcript) - 1:section_texts += ' ' + d["text"]else:end_text = d["text"]prompt = f"summarize this article from \"{start_text}\" to \"{end_text}\", limited in 100 words, start with \"This section of video\""#print(prompt)response = index.query(prompt)start_time = str(datetime.timedelta(seconds=section_start_s))end_time = str(datetime.timedelta(seconds=int(d['start']))section_start_s += 300start_text = d["text"]section_texts = ''section_response += f"**{start_time} - {end_time}:**\n\r{response}\n\r"      percent_complete += progress_periodprogress_steps -= 1progress_timeleft = str(datetime.timedelta(seconds=20*progress_steps))progress_bar.progress(percent_complete, text=f"Summarizing...{progress_timeleft} left")prompt = "Summarize this article of a video, start with \"This Video\", the article is: " + section_response#print(prompt)response = index.query(prompt)progress_bar.progress(100, text="Completed!")st.subheader("Summary:")st.success(response, icon= "🤖")with st.expander("Section Details: "):st.write(section_response)st.session_state.video_id = ''st.stop()

将代码保存到 Python 文件“demo.py”,创建一个 ./data/ 文件夹,然后运行命令:

!python -m streamlit run demo.py

Video Summarizer 现已准备就绪,能够简单而有效地执行其任务。

注意——请从一段短视频开始测试,因为长视频会花费你大量的 OpenAI API 使用费。 在继续之前,还请检查视频是否启用文本转录。


原文链接:基于LLM的视频摘要开发 — BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2874.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ChatGPT打造短视频爆款开头, ChatGPT联网啦, 可以直接播放周杰伦的音乐

牙叔教程 简单易懂 第一步 采集爆款开头 采集短视频开头文案的教程之前已经写过了, 不会的看这个 某音如何自动化采集爆款开头-黄金5秒 对录制音频的建议 时间间隔在5秒左右 网易见外输出格式: srt字幕 备注 srt字幕输出后, 网易见外支持在线编辑字幕 提取出的文案开头…

如何让ChatGPT你写一个短视频脚本

很多网红博主以及各个领域的短视频博主都在使用的“AI编写视频脚本”&#xff0c;效率直接提升20倍↑↑↑&#xff01;很多自媒体平台对于ChatGPT的介绍很少&#xff0c;但是他们都在悄悄利用这个强大的AI来帮助处理工作。关于“如何利用ChatGPT编写视频脚本”这件事&#xff0…

如何使用ChatGPT帮助生成YouTube视频摘要?这个插件做到了!

最新在YouTube上看一些教程视频&#xff0c;有的视频时间较长&#xff0c;必须要花费很长时间去看&#xff0c;很浪费时间&#xff0c;同时也是很让人烦恼&#xff0c;但是我发现了一款特别好用的Chrome插件&#xff1a; YouTube视频摘要生成器-一键复制ChatGPT(中文版) 真是一…

保姆级教程,一分钟学会利用ChatGPT制作短视频

1. 概述 ChatGPT的名字相信大家并不陌生&#xff0c;不熟悉的朋友可以查看我以前的文章了解一下。今天我们来谈谈一个更通俗易懂的教程。这个教程将教你如何使用ChatGPT快速制作短视频&#xff0c;操作简单&#xff0c;容易上手。 在各大平台上&#xff0c;你可能看过很多使用…

【ChatGPT实践篇】给小孩制作一个数字人恐龙科普短视频

以下文章来源于飞书 1 科普文本生成 起初我也是试了不少prompts去让chatgpt自由发挥&#xff0c;生成恐龙科普文章&#xff0c;但科普内容要么过于复杂&#xff0c;要么过于宽泛&#xff0c;无法到达自己想要的效果。 既然如此&#xff0c;我决定定制化科普内容&#xff0c;…

【使用心得】2023版本ChatGPT做短视频编导

使用Chat GPT后&#xff0c;我发现它除了提供生活、学习等实用的信息外&#xff0c;还具备成为一位专业短视频编导的素养。在对剧情和拍摄技巧有诸多需求时&#xff0c;它给予我充分支持和建议&#xff0c;并以自身智能的特点让我快速了解每一个步骤。 Chat GPT可以提供广泛的短…

ChatGPT基本玩法

ChatGPT是一种基于大规模预训练的语言模型&#xff0c;可以用于各种自然语言处理任务。其基本玩法是使用预训练的模型来生成文本&#xff0c;可以用于对话生成、文本摘要、机器翻译等应用。下面我们来看一些具体的案例&#xff1a; 对话生成 ChatGPT可以用于对话生成任务&…

跟ChatGPT玩狼人杀,人类一败涂地

“如何用ChatGPT玩狼人杀&#xff1f;” UP主LUMO_Xu 突发奇想。为了解答这一问题&#xff0c;他做了一场大型实验。 自从ChatGPT问世以来&#xff0c;对于ChatGPT离谱的能力&#xff0c;网友们早已见怪不怪。 在B站&#xff0c;关于ChatGPT各种神奇用法的视频&#xff0c;更是…

将ChatGPT玩溜,玩赚自媒体

文 / 韩彬&#xff08;微信公众号&#xff1a;量子论&#xff09; 昨天用ChatGPT回答的关于“养猫”的话题&#xff0c;25个阅读&#xff0c;有1个喜欢&#xff0c;说明质量略好&#xff0c;但还要继续改进。 昨晚在研究OpenAI的最新模型GPT-3.5 Turbo的API&#xff0c;准备通过…

与ChatGPT玩文字冒险游戏[寻五宝石]

注&#xff1a;文中的图片来自另一个AI生成图片的程序。 我&#xff1a; 请重新开始一个文字冒险游戏。由你来描述游戏场景&#xff08;盗墓情节&#xff09;&#xff0c;由我来决定采取的动作。请详细描述场景中所有的物品、生物。 如果场景中的人物在对话或者跟主角对话&…

ChatGPT 玩「脱」了,写了份毁灭人类计划书,还遭到了 Stack Overflow 的封杀.........

【CSDN 编者按】OpenAI 的新通用聊天机器人原型 ChatGPT 可谓是风靡一时&#xff0c;但却突遭 StackOverflow 封禁。 整理 | 刘春霖 责编 | 张红月 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 在上周发布的《挑战 Google 搜索&#xff1f;OpenAI 发布最…

ChatGPT玩法大全火了,一键复制就能get同款效果:脱口秀张口就来,还能扮演哈利波特...

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 Pine 发自 凹非寺量子位 | 公众号 QbitAI 正值风头的“网红”ChatGPT在过去一周算是被网友们玩坏了&#xff01; 各种有的没的玩法都被网友们发掘出来了…… 比如说就有网…

巴比特 | 元宇宙每日必读:微软元宇宙「大撤退」,VR/AR多个团队原地解散,罪魁祸首是ChatGPT?...

摘要&#xff1a;据新智元报道&#xff0c;在2023年开年微软的万人大裁员中&#xff0c;其元宇宙社交AltSpaceVR和HoloLens头显团队都遭到了重创&#xff0c;多个团队原地解散。微软CEO纳德拉将裁员的原因&#xff0c;归结为「全球经济动荡、后疫情时代人们习惯的变化&#xff…

微软发布多模态版ChatGPT!取名“宇宙一代”

文&#xff5c;CoCo酱 Ludwig Wittgenstein曾说过&#xff1a;“我语言的局限&#xff0c;即是我世界的局限”。 大型语言模型&#xff08;LLM&#xff09;已成功地作为各种自然语言任务的通用接口&#xff0c;只要我们能够将输入和输出转换为文本&#xff0c;就可以将基于LLM的…

元宇宙的初认识以及未来

欢迎关注元宇宙的各位朋友 &#xff08;1&#xff09;自我介绍 本人作为不知名的三维重建小白&#xff0c;一直在想&#xff0c;三维重建除了配合车企进行无人驾驶SLAM方面的落地工程&#xff0c;还能有什么更加具有创造力的方向呢&#xff1f;AIGC和ChatGPT给我了一丝的灵感…

元宇宙与AI能否相辅相成,打造一个全新的世界观

前言 这段时间随着OpenAI 推出了ChatGPT及GPT-4架构&#xff0c;一时间各大区域几乎都被AI给刷屏了。上次被这样广泛流传的应该当属 元宇宙 了&#xff0c;元宇宙 最初被提及还是在1990年的科幻小说《雪崩》里被提出来。但是最近一段时间关于 元宇宙 的信息似乎变少了很多&…

人工智能前沿——「全域全知全能」人类新宇宙ChatGPT

&#x1f680;&#x1f680;&#x1f680;OpenAI聊天机器人ChatGPT——「全域全知全能」人类全宇宙大爆炸&#xff01;&#xff01;&#x1f525;&#x1f525;&#x1f525; 一、什么是ChatGPT?&#x1f340;&#x1f340; ChatGPT是生成型预训练变换模型&#xff08;Chat G…

还在用chatGPT聊天?《元宇宙2086》已开始用AIGC做漫画连载了!

ChatGPT 是由 OpenAI开发的一个人工智能聊天机器人程序&#xff0c;于 2022 年 11 月推出。该程序使用基于 GPT-3.5架构的大型语言模型并通过强化学习进行训练。 ChatGPT 目前仍以文字方式互动&#xff0c;而除了可以透过人类自然对话方式进行交互&#xff0c;还可以用于相对复…

ChatGPT与元宇宙营销场景结合是一种非常有效的解决方案

在当今的商业环境中&#xff0c;营销是至关重要的。然而&#xff0c;营销不仅仅是一个广告语或一个宣传活动&#xff0c;它需要更深入的思考和策略。 这是ChatGpt可以发挥其作用的地方。ChatGpt是一种强大的语言处理工具&#xff0c;它可以帮助您在元宇宙营销场景中实现语言处理…

ChatGPT引发全球狂潮,它会是下一个元宇宙吗

ChatGPT作为全新的人工智能&#xff08;AI&#xff09;语言模型&#xff0c;诞生于2022年11月30日&#xff0c;在上线两个月之后&#xff0c;ChatGPT便获得1亿月活用户。现在&#xff0c;其引发的狂潮席卷科技产业&#xff0c;围绕ChatGPT的技术军备竞赛正热火朝天&#xff0c;…