摘要:在小学阶段的教学中,一定要重视激发学生的兴趣。因为对于小学生而言,如果对一件事情产生了强烈的兴趣,那么他们会更主动地去做。
本文所探讨的是小学语文教学分析在其中激发学生兴趣的方法。提出可以通过借助图片,视频营造特定的情境来激发学生兴趣,也可以在课堂上重视互动讨论,营造良好的氛围,让学生对所学知识产生浓烈兴趣。
还可以在课堂教学时进行知识拓展,用一些新知识,有趣的知识来吸引学生的眼球,引导他们对这一部分内容产生强烈的学习兴趣。
关键词:小学语文;兴趣教学
引言:
兴趣的形成可以从两个方面来考虑,一方面,如果这一件事情本身比较有趣,那么会吸引学生。
另一方面,如果学生从做这一件事中获得了成就感,那么他们也会对这一件事情感兴趣。
因此,在小学语文教学中要激发学生的学习兴趣,就可以从这两方面入手。一是灵活呈现语文知识,二是让学生从语文知识的学习中有更多的获得感。
一、借助图片、视频营造情境,激发学生兴趣
新课改要求教师在教学的过程中,能够充分利用现代教育手段。因此,在小学语文教学中可以将多媒体技术充分应用其中。
比如在给学生呈现语文知识时,可以借助图片、视频这种形式来完成。这样也可以给学生营造良好的情境,学生在特定的情境中思考问题,接受知识会更加积极。
而且图片以及视频对学生的感官冲击力度是非常大的,会让他们将注意力集中在这些内容上,便于教师做引导。
比如在小学语文教学中,古诗词这一类内容是非常重要的,但是对于小学生而言,有一些比较抽象的古诗词意象化表达他们是很难理解的。
通过图片或者视频就可以把这些抽象化的知识进行转变,学生则可以看到更直观的古诗词知识[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小时内与您取得联系。