Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
摘要:在小學階段的教學中,一定要重視激發學生的興趣。因為對于小學生而言,如果對一件事情產生了強烈的興趣,那么他們會更主動地去做。
本文所探討的是小學語文教學分析在其中激發學生興趣的方法。提出可以通過借助圖片,視頻營造特定的情境來激發學生興趣,也可以在課堂上重視互動討論,營造良好的氛圍,讓學生對所學知識產生濃烈興趣。
還可以在課堂教學時進行知識拓展,用一些新知識,有趣的知識來吸引學生的眼球,引導他們對這一部分內容產生強烈的學習興趣。
關鍵詞:小學語文;興趣教學
引言:
興趣的形成可以從兩個方面來考慮,一方面,如果這一件事情本身比較有趣,那么會吸引學生。
另一方面,如果學生從做這一件事中獲得了成就感,那么他們也會對這一件事情感興趣。
因此,在小學語文教學中要激發學生的學習興趣,就可以從這兩方面入手。一是靈活呈現語文知識,二是讓學生從語文知識的學習中有更多的獲得感。
一、借助圖片、視頻營造情境,激發學生興趣
新課改要求教師在教學的過程中,能夠充分利用現代教育手段。因此,在小學語文教學中可以將多媒體技術充分應用其中。
比如在給學生呈現語文知識時,可以借助圖片、視頻這種形式來完成。這樣也可以給學生營造良好的情境,學生在特定的情境中思考問題,接受知識會更加積極。
而且圖片以及視頻對學生的感官沖擊力度是非常大的,會讓他們將注意力集中在這些內容上,便于教師做引導。
比如在小學語文教學中,古詩詞這一類內容是非常重要的,但是對于小學生而言,有一些比較抽象的古詩詞意象化表達他們是很難理解的。
通過圖片或者視頻就可以把這些抽象化的知識進行轉變,學生則可以看到更直觀的古詩詞知識[1]。
比如《望廬山瀑布》,如果直接按照教材上的內容給學生講解,他們可能很難體會到這種優美的景色。而如果可以在課下提前搜集相關圖片,課堂上給學生展示和廬山瀑布相關的資料,學生會對這一部分知識有更強烈的學習興趣。
而且通過圖片以及視頻,學生更容易感受廬山瀑布的美。在具體的情境中學生會有身臨其境的感受。之后再來分析這一首古詩的內容,學生就會非常積極地配合,也有較強烈的學習欲望。
再如,《鄉下人家》這一篇課文,在教學之前可以給學生播放一首歌《鄉間小路》,讓學生在悠揚悅耳的音樂中先放松下來。之后再提問:同學們覺得這首歌好聽嗎?
大家從里面聽出了哪些鄉間的景色?此時學生會非常積極地回答:彎彎曲曲的小路,還有扛著鋤頭的農民。
大家你一言我一語,學生的興趣已經被點燃,此時再順勢引入對這篇課文講解中就會更容易。
二、課堂互動討論,營造良好氛圍
要讓學生對所要學習的語文知識產生強烈興趣,還要在課堂上多開展互動,進而營造良好的氛圍。
而且在這種氛圍下,學生的思維會變得更加松弛,在思考問題時也會更加靈活。這樣一來,學生會更容易從課文中分析出更多的內容,進而有更多的獲得感,這樣一來,他們就會真正體會到語文學習中的樂趣。
而且在新課改的要求下,課堂應該是學生的主場,在學習課文時,學生需要自己不斷思考,而不是等著教師說答案,因此,多開展互動,這是一項必然舉措。
在互動的過程中學生需要不斷地去思考,這樣一來課堂氛圍也會變得更融洽。這種氛圍中開展教學,學生會更積極地配合教師。
比如在《燕子》這篇課文的教學中,教師可以多和學生開展互動。比如可以提出:作者是如何描寫燕子的?他對燕子情感如何?燕子有什么特點呢?從文中的哪些地方可以看出來?
像這樣給學生提一些具體的問題,供他們在課堂上討論,讓學生在語文課堂上有更多的參與感。而且他們通過探討,最終可以對這篇課文有更深刻的認知,獲得新知識[2]。
在分析完課文之后,還可以提出一個發散性的問題,這種問題一般沒有固定答案,學生可以暢所欲言。
如:你覺得課文中哪些句子描寫得非常優美,你是如何理解的?相較于在教師的帶領下對課文進行分析,這種自主探究的辦法無疑會更容易激發學生的興趣。
三、課堂知識拓展,有效吸引學生
對于小學生而言,他們對于一些新鮮的內容會非常有學習性質。因此在小學語文教學中需要做好知識拓展。
如果只是講解教材上的內容,學生可能會覺得枯燥,沒有意思,但如果拓展一些課外的知識,學生則會覺得語文知識是非常奇妙的。
比如在講解古詩詞內容時,就可以將同一個作者不同時期的作品放在一起進行對比,進而讓學生明確人的創作是和時代背景以及自己的境遇緊密相關的,進而會對這一部分語文知識有更全面的認識。
再如,講解閱讀篇目時,也可以多做拓展,除了從作者這一元素入手,做拓展,還可以對于不同文章做對比,如《草船借箭》和《猴王出世》,這兩篇課文都是節選自名著,因此可以在對比分析中更深刻的去理解。
比如這兩篇課文有什么相同點,這樣的拓展能讓課堂內容變得更豐富,還會鍛煉學生的思維能力,這能激發學生的深層次興趣,激發學生的求知欲,讓他們在課下也能更自主地學習語文知識。
四、結束語
總而言之,小學語文教學至關重要,在教學時,要激發學生的學習興趣,需要先明確,小學生的學習特點,語文學科知識又有哪些特點,進而選擇合適的方法。
小學生年齡小,容易被一些有趣的事物吸引,因此可以營造情境;而語文學科知識點繁多,因此可以讓學生自己來探究,教給學生學習方法,提升他們的學習能力,讓學生感受到語文學習的樂趣。
參考文獻
[1] 王麗梅. 小學語文教學中如何激發學生學習語文的興趣[J]. 孩子天地, 2019, 000(036):P.113-113,117.
[2] 李娜. 分析小學語文教學中如何激發學生的興趣[J]. 新教育時代電子雜志(教師版), 2020, 000(002):39.
eautiful Soup 包:
Beautiful Soup: Python 的第三方插件用來提取 xml 和 HTML 中的數據。官網地址 https://www.crummy.com/software/BeautifulSoup/
1、安裝 Beautiful Soup
打開 cmd(命令提示符),進入到 Python(Python2.7版本)安裝目錄中的 scripts 下,輸入 dir 查看是否有 pip.exe, 如果用就可以使用 Python 自帶的 pip 命令進行安裝,輸入以下命令進行安裝即可:
pip install beautifulsoup4
2、測試是否安裝成功
編寫一個 Python 文件,輸入:
import bs4
print bs4
運行該文件,如果能夠正常輸出則安裝成功。
五、使用 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>
"""
# 創建一個BeautifulSoup解析對象
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("正則表達式匹配")
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 上提交的大量新視頻,很容易感到挑戰并努力跟上我想看的一切。 我可以與我每天將視頻添加到“稍后觀看”列表中的經歷聯系起來,只是為了讓列表變得越來越長,實際上并沒有稍后再看。 現在,像 ChatGPT 或 LLaMA 這樣的大型語言模型為這個長期問題提供了一個潛在的解決方案。
推薦:用 NSDT設計器 快速搭建可編程3D場景。
通過將數小時的視頻內容轉換為幾行準確的摘要文本,視頻摘要器可以快速為我們提供視頻的要點,這樣我們就不必花費大量時間來完整觀看它。 在我創建這個網絡應用程序之后,我最常使用的場景是參考它的摘要來決定某個視頻是否值得觀看,尤其是那些輔導、脫口秀或演示視頻。
你可以通過多種方式使用強大的語言模型來完成此視頻摘要。
如果你有興趣開發自己的上下文學習應用程序,我之前關于構建聊天機器人以學習和聊天文檔的文章提供了一個很好的起點。 通過一些細微的修改,我們可以應用相同的方法來創建我們自己的視頻摘要器。 在本文中,我將逐步指導你完成開發過程,以便你了解并復制自己的視頻摘要器。
在這個Video Summarizer應用程序中,我們以llama-index為基礎,開發了一個Streamlit web應用程序,為用戶提供視頻URL的輸入以及屏幕截圖、文字記錄和摘要內容的顯示。 使用 llamaIndex 工具包,我們不必擔心 OpenAI 中的 API 調用,因為對嵌入使用的復雜性或提示大小限制的擔憂很容易被其內部數據結構和 LLM 任務管理所覆蓋。
你有沒有想過為什么我在讓 LLM 生成摘要時設計了幾個查詢而不是一個用于轉錄文本處理的查詢? 答案在于情境學習過程。 當文檔被送入 LLM 時,它會根據其大小分成塊或節點。 然后將這些塊轉換為嵌入并存儲為向量。
當提示用戶查詢時,模型將搜索向量存儲以找到最相關的塊并根據這些特定塊生成答案。 例如,如果你在大型文檔(如 20 分鐘的視頻轉錄本)上查詢“文章摘要”,模型可能只會生成最后 5 分鐘的摘要,因為最后一塊與上下文最相關 的“總結”。
為了說明這個概念,請看下面的圖表:
通過設計多個查詢,我們可以促使 LLM 生成更全面的摘要,涵蓋整個文檔。 我將在本文后面更深入地組織多個查詢。
從第2章到第5章,我將重點介紹本項目中使用到的所有模塊的基礎知識和典型用法介紹。 如果你愿意在沒有這些技術背景的情況下立即開始編寫整個 Video Summarizer 應用程序,建議你轉到第 6 章。
總結 YouTube 視頻的第一步是下載轉錄文本。 有一個名為 youtube-transcript-api 的開源 Python 庫可以完美滿足我們的要求。
使用如下命令安裝模塊后,
!pip install youtube-transcript-api
可以使用以下代碼輕松下載 JSON 格式的轉錄文本:
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() 方法中,唯一應該強制提供的參數是 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},
...
]
LlamaIndex 的設計目的是兼容各種 LLM,默認使用 OpenAI 的 GPT 模型進行嵌入和生成操作。 因此,當我們決定實施基于 OpenAI GPT 模型的視頻摘要器時,我們應該向程序提供我們的 OpenAI API 密鑰。
插入我們的密鑰唯一需要做的就是通過環境變量提供它:
import os
os.environ["OPENAI_API_KEY"] = '{your_api_key}'
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)
與我文章中之前的項目一樣,我們將繼續使用方便的 Streamlit 工具集來構建 Video Summarizer 應用程序。
Streamlit 是一個開源的 Python 庫,有助于創建交互式 Web 應用程序。 它的主要目的是供數據科學家和機器學習工程師用來與他人分享他們的工作。 借助 Streamlit,開發人員可以使用最少的代碼創建應用程序,并且可以使用單個命令輕松地將它們部署到 Web。
它提供了多種可用于創建交互式應用程序的小部件。 這些小部件包括按鈕、文本框、滑塊和圖表。 可以從其官方文檔中找到所有小部件的用法。
Web 應用程序的典型 Streamlit 代碼可以像下面這樣簡單:
!pip install streamlit
import streamlit as st
st.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
要實現總結 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 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”,創建一個 ./data/ 文件夾,然后運行命令:
!python -m streamlit run demo.py
Video Summarizer 現已準備就緒,能夠簡單而有效地執行其任務。
注意——請從一段短視頻開始測試,因為長視頻會花費你大量的 OpenAI API 使用費。 在繼續之前,還請檢查視頻是否啟用文本轉錄。
原文鏈接:http://www.bimant.com/blog/llm-based-video-summary-dev/
*請認真填寫需求信息,我們會在24小時內與您取得聯系。