摘要:在小學(xué)階段的教學(xué)中,一定要重視激發(fā)學(xué)生的興趣。因?yàn)閷?duì)于小學(xué)生而言,如果對(duì)一件事情產(chǎn)生了強(qiáng)烈的興趣,那么他們會(huì)更主動(dòng)地去做。
本文所探討的是小學(xué)語(yǔ)文教學(xué)分析在其中激發(fā)學(xué)生興趣的方法。提出可以通過(guò)借助圖片,視頻營(yíng)造特定的情境來(lái)激發(fā)學(xué)生興趣,也可以在課堂上重視互動(dòng)討論,營(yíng)造良好的氛圍,讓學(xué)生對(duì)所學(xué)知識(shí)產(chǎn)生濃烈興趣。
還可以在課堂教學(xué)時(shí)進(jìn)行知識(shí)拓展,用一些新知識(shí),有趣的知識(shí)來(lái)吸引學(xué)生的眼球,引導(dǎo)他們對(duì)這一部分內(nèi)容產(chǎn)生強(qiáng)烈的學(xué)習(xí)興趣。
關(guān)鍵詞:小學(xué)語(yǔ)文;興趣教學(xué)
引言:
興趣的形成可以從兩個(gè)方面來(lái)考慮,一方面,如果這一件事情本身比較有趣,那么會(huì)吸引學(xué)生。
另一方面,如果學(xué)生從做這一件事中獲得了成就感,那么他們也會(huì)對(duì)這一件事情感興趣。
因此,在小學(xué)語(yǔ)文教學(xué)中要激發(fā)學(xué)生的學(xué)習(xí)興趣,就可以從這兩方面入手。一是靈活呈現(xiàn)語(yǔ)文知識(shí),二是讓學(xué)生從語(yǔ)文知識(shí)的學(xué)習(xí)中有更多的獲得感。
一、借助圖片、視頻營(yíng)造情境,激發(fā)學(xué)生興趣
新課改要求教師在教學(xué)的過(guò)程中,能夠充分利用現(xiàn)代教育手段。因此,在小學(xué)語(yǔ)文教學(xué)中可以將多媒體技術(shù)充分應(yīng)用其中。
比如在給學(xué)生呈現(xiàn)語(yǔ)文知識(shí)時(shí),可以借助圖片、視頻這種形式來(lái)完成。這樣也可以給學(xué)生營(yíng)造良好的情境,學(xué)生在特定的情境中思考問(wèn)題,接受知識(shí)會(huì)更加積極。
而且圖片以及視頻對(duì)學(xué)生的感官?zèng)_擊力度是非常大的,會(huì)讓他們將注意力集中在這些內(nèi)容上,便于教師做引導(dǎo)。
比如在小學(xué)語(yǔ)文教學(xué)中,古詩(shī)詞這一類內(nèi)容是非常重要的,但是對(duì)于小學(xué)生而言,有一些比較抽象的古詩(shī)詞意象化表達(dá)他們是很難理解的。
通過(guò)圖片或者視頻就可以把這些抽象化的知識(shí)進(jìn)行轉(zhuǎn)變,學(xué)生則可以看到更直觀的古詩(shī)詞知識(shí)[1]。
比如《望廬山瀑布》,如果直接按照教材上的內(nèi)容給學(xué)生講解,他們可能很難體會(huì)到這種優(yōu)美的景色。而如果可以在課下提前搜集相關(guān)圖片,課堂上給學(xué)生展示和廬山瀑布相關(guān)的資料,學(xué)生會(huì)對(duì)這一部分知識(shí)有更強(qiáng)烈的學(xué)習(xí)興趣。
而且通過(guò)圖片以及視頻,學(xué)生更容易感受廬山瀑布的美。在具體的情境中學(xué)生會(huì)有身臨其境的感受。之后再來(lái)分析這一首古詩(shī)的內(nèi)容,學(xué)生就會(huì)非常積極地配合,也有較強(qiáng)烈的學(xué)習(xí)欲望。
再如,《鄉(xiāng)下人家》這一篇課文,在教學(xué)之前可以給學(xué)生播放一首歌《鄉(xiāng)間小路》,讓學(xué)生在悠揚(yáng)悅耳的音樂(lè)中先放松下來(lái)。之后再提問(wèn):同學(xué)們覺(jué)得這首歌好聽(tīng)嗎?
大家從里面聽(tīng)出了哪些鄉(xiāng)間的景色?此時(shí)學(xué)生會(huì)非常積極地回答:彎彎曲曲的小路,還有扛著鋤頭的農(nóng)民。
大家你一言我一語(yǔ),學(xué)生的興趣已經(jīng)被點(diǎn)燃,此時(shí)再順勢(shì)引入對(duì)這篇課文講解中就會(huì)更容易。
二、課堂互動(dòng)討論,營(yíng)造良好氛圍
要讓學(xué)生對(duì)所要學(xué)習(xí)的語(yǔ)文知識(shí)產(chǎn)生強(qiáng)烈興趣,還要在課堂上多開(kāi)展互動(dòng),進(jìn)而營(yíng)造良好的氛圍。
而且在這種氛圍下,學(xué)生的思維會(huì)變得更加松弛,在思考問(wèn)題時(shí)也會(huì)更加靈活。這樣一來(lái),學(xué)生會(huì)更容易從課文中分析出更多的內(nèi)容,進(jìn)而有更多的獲得感,這樣一來(lái),他們就會(huì)真正體會(huì)到語(yǔ)文學(xué)習(xí)中的樂(lè)趣。
而且在新課改的要求下,課堂應(yīng)該是學(xué)生的主場(chǎng),在學(xué)習(xí)課文時(shí),學(xué)生需要自己不斷思考,而不是等著教師說(shuō)答案,因此,多開(kāi)展互動(dòng),這是一項(xiàng)必然舉措。
在互動(dòng)的過(guò)程中學(xué)生需要不斷地去思考,這樣一來(lái)課堂氛圍也會(huì)變得更融洽。這種氛圍中開(kāi)展教學(xué),學(xué)生會(huì)更積極地配合教師。
比如在《燕子》這篇課文的教學(xué)中,教師可以多和學(xué)生開(kāi)展互動(dòng)。比如可以提出:作者是如何描寫(xiě)燕子的?他對(duì)燕子情感如何?燕子有什么特點(diǎn)呢?從文中的哪些地方可以看出來(lái)?
像這樣給學(xué)生提一些具體的問(wèn)題,供他們?cè)谡n堂上討論,讓學(xué)生在語(yǔ)文課堂上有更多的參與感。而且他們通過(guò)探討,最終可以對(duì)這篇課文有更深刻的認(rèn)知,獲得新知識(shí)[2]。
在分析完課文之后,還可以提出一個(gè)發(fā)散性的問(wèn)題,這種問(wèn)題一般沒(méi)有固定答案,學(xué)生可以暢所欲言。
如:你覺(jué)得課文中哪些句子描寫(xiě)得非常優(yōu)美,你是如何理解的?相較于在教師的帶領(lǐng)下對(duì)課文進(jìn)行分析,這種自主探究的辦法無(wú)疑會(huì)更容易激發(fā)學(xué)生的興趣。
三、課堂知識(shí)拓展,有效吸引學(xué)生
對(duì)于小學(xué)生而言,他們對(duì)于一些新鮮的內(nèi)容會(huì)非常有學(xué)習(xí)性質(zhì)。因此在小學(xué)語(yǔ)文教學(xué)中需要做好知識(shí)拓展。
如果只是講解教材上的內(nèi)容,學(xué)生可能會(huì)覺(jué)得枯燥,沒(méi)有意思,但如果拓展一些課外的知識(shí),學(xué)生則會(huì)覺(jué)得語(yǔ)文知識(shí)是非常奇妙的。
比如在講解古詩(shī)詞內(nèi)容時(shí),就可以將同一個(gè)作者不同時(shí)期的作品放在一起進(jìn)行對(duì)比,進(jìn)而讓學(xué)生明確人的創(chuàng)作是和時(shí)代背景以及自己的境遇緊密相關(guān)的,進(jìn)而會(huì)對(duì)這一部分語(yǔ)文知識(shí)有更全面的認(rèn)識(shí)。
再如,講解閱讀篇目時(shí),也可以多做拓展,除了從作者這一元素入手,做拓展,還可以對(duì)于不同文章做對(duì)比,如《草船借箭》和《猴王出世》,這兩篇課文都是節(jié)選自名著,因此可以在對(duì)比分析中更深刻的去理解。
比如這兩篇課文有什么相同點(diǎn),這樣的拓展能讓課堂內(nèi)容變得更豐富,還會(huì)鍛煉學(xué)生的思維能力,這能激發(fā)學(xué)生的深層次興趣,激發(fā)學(xué)生的求知欲,讓他們?cè)谡n下也能更自主地學(xué)習(xí)語(yǔ)文知識(shí)。
四、結(jié)束語(yǔ)
總而言之,小學(xué)語(yǔ)文教學(xué)至關(guān)重要,在教學(xué)時(shí),要激發(fā)學(xué)生的學(xué)習(xí)興趣,需要先明確,小學(xué)生的學(xué)習(xí)特點(diǎn),語(yǔ)文學(xué)科知識(shí)又有哪些特點(diǎn),進(jìn)而選擇合適的方法。
小學(xué)生年齡小,容易被一些有趣的事物吸引,因此可以營(yíng)造情境;而語(yǔ)文學(xué)科知識(shí)點(diǎn)繁多,因此可以讓學(xué)生自己來(lái)探究,教給學(xué)生學(xué)習(xí)方法,提升他們的學(xué)習(xí)能力,讓學(xué)生感受到語(yǔ)文學(xué)習(xí)的樂(lè)趣。
參考文獻(xiàn)
[1] 王麗梅. 小學(xué)語(yǔ)文教學(xué)中如何激發(fā)學(xué)生學(xué)習(xí)語(yǔ)文的興趣[J]. 孩子天地, 2019, 000(036):P.113-113,117.
[2] 李娜. 分析小學(xué)語(yǔ)文教學(xué)中如何激發(fā)學(xué)生的興趣[J]. 新教育時(shí)代電子雜志(教師版), 2020, 000(002):39.
eautiful Soup 包:
Beautiful Soup: Python 的第三方插件用來(lái)提取 xml 和 HTML 中的數(shù)據(jù)。官網(wǎng)地址 https://www.crummy.com/software/BeautifulSoup/
1、安裝 Beautiful Soup
打開(kāi) cmd(命令提示符),進(jìn)入到 Python(Python2.7版本)安裝目錄中的 scripts 下,輸入 dir 查看是否有 pip.exe, 如果用就可以使用 Python 自帶的 pip 命令進(jìn)行安裝,輸入以下命令進(jìn)行安裝即可:
pip install beautifulsoup4
2、測(cè)試是否安裝成功
編寫(xiě)一個(gè) Python 文件,輸入:
import bs4
print bs4
運(yùn)行該文件,如果能夠正常輸出則安裝成功。
五、使用 Beautiful Soup 解析 html 文件
# -*- coding: UTF-8 -*-
import bs4
import re
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
# 創(chuàng)建一個(gè)BeautifulSoup解析對(duì)象
soup = BeautifulSoup(html_doc, "html.parser", from_encoding="utf-8")
# 獲取所有的鏈接
links = soup.find_all('a')
print("所有的鏈接")
for link in links:
print(link.name, link['href'], link.get_text())
print("獲取特定的URL地址")
link_node = soup.find('a', href="http://example.com/elsie")
print(link_node.name, link_node['href'], link_node['class'], link_node.get_text())
print("正則表達(dá)式匹配")
link_node = soup.find('a', href=re.compile(r"ti"))
print(link_node.name, link_node['href'], link_node['class'], link_node.get_text())
print("獲取P段落的文字")
p_node = soup.find('p', class_='story')
print(p_node.name, p_node['class'], p_node.get_text())
===========
輸出:
著在 YouTube 上提交的大量新視頻,很容易感到挑戰(zhàn)并努力跟上我想看的一切。 我可以與我每天將視頻添加到“稍后觀看”列表中的經(jīng)歷聯(lián)系起來(lái),只是為了讓列表變得越來(lái)越長(zhǎng),實(shí)際上并沒(méi)有稍后再看。 現(xiàn)在,像 ChatGPT 或 LLaMA 這樣的大型語(yǔ)言模型為這個(gè)長(zhǎng)期問(wèn)題提供了一個(gè)潛在的解決方案。
推薦:用 NSDT設(shè)計(jì)器 快速搭建可編程3D場(chǎng)景。
通過(guò)將數(shù)小時(shí)的視頻內(nèi)容轉(zhuǎn)換為幾行準(zhǔn)確的摘要文本,視頻摘要器可以快速為我們提供視頻的要點(diǎn),這樣我們就不必花費(fèi)大量時(shí)間來(lái)完整觀看它。 在我創(chuàng)建這個(gè)網(wǎng)絡(luò)應(yīng)用程序之后,我最常使用的場(chǎng)景是參考它的摘要來(lái)決定某個(gè)視頻是否值得觀看,尤其是那些輔導(dǎo)、脫口秀或演示視頻。
你可以通過(guò)多種方式使用強(qiáng)大的語(yǔ)言模型來(lái)完成此視頻摘要。
如果你有興趣開(kāi)發(fā)自己的上下文學(xué)習(xí)應(yīng)用程序,我之前關(guān)于構(gòu)建聊天機(jī)器人以學(xué)習(xí)和聊天文檔的文章提供了一個(gè)很好的起點(diǎn)。 通過(guò)一些細(xì)微的修改,我們可以應(yīng)用相同的方法來(lái)創(chuàng)建我們自己的視頻摘要器。 在本文中,我將逐步指導(dǎo)你完成開(kāi)發(fā)過(guò)程,以便你了解并復(fù)制自己的視頻摘要器。
在這個(gè)Video Summarizer應(yīng)用程序中,我們以llama-index為基礎(chǔ),開(kāi)發(fā)了一個(gè)Streamlit web應(yīng)用程序,為用戶提供視頻URL的輸入以及屏幕截圖、文字記錄和摘要內(nèi)容的顯示。 使用 llamaIndex 工具包,我們不必?fù)?dān)心 OpenAI 中的 API 調(diào)用,因?yàn)閷?duì)嵌入使用的復(fù)雜性或提示大小限制的擔(dān)憂很容易被其內(nèi)部數(shù)據(jù)結(jié)構(gòu)和 LLM 任務(wù)管理所覆蓋。
你有沒(méi)有想過(guò)為什么我在讓 LLM 生成摘要時(shí)設(shè)計(jì)了幾個(gè)查詢而不是一個(gè)用于轉(zhuǎn)錄文本處理的查詢? 答案在于情境學(xué)習(xí)過(guò)程。 當(dāng)文檔被送入 LLM 時(shí),它會(huì)根據(jù)其大小分成塊或節(jié)點(diǎn)。 然后將這些塊轉(zhuǎn)換為嵌入并存儲(chǔ)為向量。
當(dāng)提示用戶查詢時(shí),模型將搜索向量存儲(chǔ)以找到最相關(guān)的塊并根據(jù)這些特定塊生成答案。 例如,如果你在大型文檔(如 20 分鐘的視頻轉(zhuǎn)錄本)上查詢“文章摘要”,模型可能只會(huì)生成最后 5 分鐘的摘要,因?yàn)樽詈笠粔K與上下文最相關(guān) 的“總結(jié)”。
為了說(shuō)明這個(gè)概念,請(qǐng)看下面的圖表:
通過(guò)設(shè)計(jì)多個(gè)查詢,我們可以促使 LLM 生成更全面的摘要,涵蓋整個(gè)文檔。 我將在本文后面更深入地組織多個(gè)查詢。
從第2章到第5章,我將重點(diǎn)介紹本項(xiàng)目中使用到的所有模塊的基礎(chǔ)知識(shí)和典型用法介紹。 如果你愿意在沒(méi)有這些技術(shù)背景的情況下立即開(kāi)始編寫(xiě)整個(gè) Video Summarizer 應(yīng)用程序,建議你轉(zhuǎn)到第 6 章。
總結(jié) YouTube 視頻的第一步是下載轉(zhuǎn)錄文本。 有一個(gè)名為 youtube-transcript-api 的開(kāi)源 Python 庫(kù)可以完美滿足我們的要求。
使用如下命令安裝模塊后,
!pip install youtube-transcript-api
可以使用以下代碼輕松下載 JSON 格式的轉(zhuǎn)錄文本:
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import JSONFormatter
srt = YouTubeTranscriptApi.get_transcript("{video_id}", languages=['en'])
formatter = JSONFormatter()
json_formatted = formatter.format_transcript(srt)
print(json_formatted)
在 .get_transcript() 方法中,唯一應(yīng)該強(qiáng)制提供的參數(shù)是 11 位視頻 ID,你可以在 v= 之后的每個(gè) YouTube 視頻的 URL 中找到它,例如:
https://www.youtube.com/watch? v=hJP5GqnTrNo
當(dāng)視頻提供英語(yǔ)以外的其他語(yǔ)言時(shí),可以將它們添加到參數(shù)語(yǔ)言中,該參數(shù)語(yǔ)言作為包含不同語(yǔ)言的列表。
該庫(kù)還提供“Formatter”方法來(lái)生成具有定義格式的轉(zhuǎn)錄數(shù)據(jù)。 在這種情況下,我們只需要 JSON 格式即可進(jìn)行進(jìn)一步的步驟。
通過(guò)運(yùn)行上面的代碼,你會(huì)看到像這樣的一個(gè)像樣的轉(zhuǎn)錄文本:
[
{"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},
...
]
LlamaIndex 的設(shè)計(jì)目的是兼容各種 LLM,默認(rèn)使用 OpenAI 的 GPT 模型進(jìn)行嵌入和生成操作。 因此,當(dāng)我們決定實(shí)施基于 OpenAI GPT 模型的視頻摘要器時(shí),我們應(yīng)該向程序提供我們的 OpenAI API 密鑰。
插入我們的密鑰唯一需要做的就是通過(guò)環(huán)境變量提供它:
import os
os.environ["OPENAI_API_KEY"] = '{your_api_key}'
LlamaIndex 是一個(gè) Python 庫(kù),充當(dāng)用戶私有數(shù)據(jù)和大型語(yǔ)言模型 (LLM) 之間的接口。 它有幾個(gè)對(duì)開(kāi)發(fā)人員有用的功能,包括連接到各種數(shù)據(jù)源、處理提示限制、創(chuàng)建語(yǔ)言數(shù)據(jù)索引、將提示插入數(shù)據(jù)、將文本拆分為更小的塊以及提供查詢索引的接口的能力 . 借助 LlamaIndex,開(kāi)發(fā)人員無(wú)需實(shí)施數(shù)據(jù)轉(zhuǎn)換即可將現(xiàn)有數(shù)據(jù)用于 LLM,管理 LLM 與數(shù)據(jù)的交互方式,并提高 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 工具集中的文件加載器之一。 它支持在用戶提供的文件夾下加載多個(gè)文件,在本例中,它是子文件夾“./data/”。 這個(gè)神奇的加載器功能可以支持解析各種文件類型,如.pdf、.jpg、.png、.docx等,讓您不必自己將文件轉(zhuǎn)換為文本。 在我們的應(yīng)用程序中,我們只加載一個(gè)文本文件 (.json) 來(lái)包含視頻轉(zhuǎn)錄數(shù)據(jù)。
Step2 — 構(gòu)建索引
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
)
在調(diào)用此方法時(shí),LlamaIndex 應(yīng)與你定義的 LLM 交互以構(gòu)建索引,在本演示的情況下,LlamaIndex 使用 gpt-3.5 聊天模型通過(guò) OpenAI API 調(diào)用嵌入方法。
Step3 — 查詢索引
通過(guò)建立索引,查詢非常簡(jiǎn)單,無(wú)需上下文數(shù)據(jù),直接輸入即可。
response = index.query("Summerize the video transcript")
print(response)
與我文章中之前的項(xiàng)目一樣,我們將繼續(xù)使用方便的 Streamlit 工具集來(lái)構(gòu)建 Video Summarizer 應(yīng)用程序。
Streamlit 是一個(gè)開(kāi)源的 Python 庫(kù),有助于創(chuàng)建交互式 Web 應(yīng)用程序。 它的主要目的是供數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師用來(lái)與他人分享他們的工作。 借助 Streamlit,開(kāi)發(fā)人員可以使用最少的代碼創(chuàng)建應(yīng)用程序,并且可以使用單個(gè)命令輕松地將它們部署到 Web。
它提供了多種可用于創(chuàng)建交互式應(yīng)用程序的小部件。 這些小部件包括按鈕、文本框、滑塊和圖表。 可以從其官方文檔中找到所有小部件的用法。
Web 應(yīng)用程序的典型 Streamlit 代碼可以像下面這樣簡(jiǎn)單:
!pip install streamlit
import streamlit as st
st.write("""
# My First App
Hello *world!*
""")
然后只需鍵入以下命令即可在線運(yùn)行該網(wǎng)站:
!python -m streamlit run demo.py
如果運(yùn)行成功,會(huì)打印出用戶可以訪問(wèn)的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
要實(shí)現(xiàn)總結(jié) YouTube 視頻的整個(gè)工作流程,用戶體驗(yàn)非常簡(jiǎn)單。
第 1 步 — 用戶輸入 YouTube 視頻的 URL。
在這一步中,我們通過(guò) Streamlit st.text_input() 方法創(chuàng)建一個(gè) text_input 小部件,以接收用戶輸入的視頻 URL。
第 2 步 — 應(yīng)用程序下載視頻的屏幕截圖和文字記錄文件,并將它們顯示在側(cè)邊欄中。
在這一步中,在成功從 URL 解析視頻 ID 后,我們使用 html2image 庫(kù)創(chuàng)建一個(gè)側(cè)邊欄區(qū)域來(lái)顯示屏幕截圖(另存為 ./youtube.png)并顯示轉(zhuǎn)錄文本(另存為 ./data/transcript。 json )通過(guò)使用 LlamaIndex 的 SimpleDirectoryReader() 方法。 我們還從 Streamlit 小部件中實(shí)現(xiàn)了一個(gè)進(jìn)度條,以指示剩余時(shí)間,因?yàn)楫?dāng)視頻需要很長(zhǎng)時(shí)間時(shí),摘要過(guò)程會(huì)花費(fèi)更多時(shí)間。
第 3 步 — 應(yīng)用程序生成整個(gè)視頻的摘要,每 5 分鐘的視頻有一個(gè)詳細(xì)描述
在此步驟中,如前所述,我們不希望語(yǔ)言模型通過(guò)僅搜索摘要作業(yè)的相關(guān)塊來(lái)遺漏整個(gè)視頻中的重要信息。 為避免這種情況,我們創(chuàng)建了一個(gè)循環(huán),每 5 分鐘查詢一次摘要視頻部分。 這確保帶有向量的提示的標(biāo)記不超過(guò) 4096 個(gè)標(biāo)記的最大限制,防止拆分成塊。 需要注意的是,5 分鐘間隔只是一個(gè)粗略的估計(jì)。 我們創(chuàng)建一個(gè) st.expander() 小部件來(lái)包含 5 分鐘部分的摘要,并創(chuàng)建一個(gè) st.success() 小部件來(lái)通過(guò)查詢顯示最終摘要以總結(jié)部分摘要。
我用來(lái)總結(jié) 5 分鐘窗口的提示是:
Summarize this article from ”{start_text}\” to ”{end_text}\, limited in 100 words, start with ”This section of video”
start_text 和 end_text 是文本字段中引用轉(zhuǎn)錄 JSON 中起始字段的內(nèi)容
請(qǐng)找到完整的演示代碼供你參考:
!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 ChatOpenAI
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import JSONFormatter
import json
import datetime
from html2image import Html2Image
doc_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 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
)
index.save_to_disk(index_file)
section_texts = ''
section_start_s = 0
with 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 = 5
progress_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 += 300
start_text = d["text"]
section_texts = ''
section_response += f"**{start_time} - {end_time}:**\n\r{response}\n\r"
percent_complete += progress_period
progress_steps -= 1
progress_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”,創(chuàng)建一個(gè) ./data/ 文件夾,然后運(yùn)行命令:
!python -m streamlit run demo.py
Video Summarizer 現(xiàn)已準(zhǔn)備就緒,能夠簡(jiǎn)單而有效地執(zhí)行其任務(wù)。
注意——請(qǐng)從一段短視頻開(kāi)始測(cè)試,因?yàn)殚L(zhǎng)視頻會(huì)花費(fèi)你大量的 OpenAI API 使用費(fèi)。 在繼續(xù)之前,還請(qǐng)檢查視頻是否啟用文本轉(zhuǎn)錄。
原文鏈接:http://www.bimant.com/blog/llm-based-video-summary-dev/
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。