☰
AI课堂分析四层架构与CEED九维度实践
2026/10/28 19:16:21 网站建设 项目流程

简介:《基于人工智能的课堂分析架构:一种智能的课堂教学研究》是一篇面向教育研究者、学校管理者与一线教师的学术PDF,聚焦大规模课堂分析难以落地、技术应用易指标单一化等问题。作者杨晓哲结合华东师范大学团队对近万节课多模态数据的处理经验,提出由数据层、认知层、标准层、应用层构成的课堂分析架构,并阐释CEED高品质课堂智能分析标准中的课堂效率、课堂公平、课堂民主三个维度。资源包共1个PDF文件,约652KB,篇幅紧凑,便于集中阅读与引用。已有155人学习。读者可从中了解课堂分析从听评课、课堂观察到智能分析的演进脉络,把握言语、行为、心理、生理、脑与学业等多模态数据的组织方式,并获取面向教师反思、常态化教研与人机融合教学研究的具体框架与标准参考。

1. 一节 40 分钟的课,为什么会被切成 800 个编码

一位教研员手里有两个班、同一节课的两份课堂录像,想比出哪一版更好,最后能拿出来的证据往往只有几页听课笔记和一句“感觉第二遍顺一些”。这不是态度问题,是方法问题:传统听评课依赖人眼人耳,一节课按每 3 秒一次判定,40 分钟就是 800 个编码单位,靠人工标注根本走不出个案。

基于人工智能的课堂分析架构要解决的正是这件事——把课堂这个“黑箱”拆成可采集、可识别、可判定的多模态数据链。它的核心不是某个模型,而是一套四层架构(数据层、认知层、标准层、应用层)加一套三层次九维度的高品质课堂分析标准 CEED(课堂效率、课堂公平、课堂民主)。适合三类人:要给全校课堂做证据化诊断的学校信息化负责人、做课堂话语与行为分析的教研员、以及想把教育场景 AI 真正落地而不是做个“表情专注度”玩具的开发者。

2. 四层架构拆开看:每一层到底要落什么料

这套架构的工程价值,在于它把“采什么、识别什么、按什么判、判完给谁用”四件事绑成了一条链。链条上任何一环松掉,后面全是废数据。常见翻车方式是先买摄像头再想指标,最后只能做单维统计。正确的顺序是反过来的:标准层定观察点,观察点倒推认知层要出什么标签,标签再倒推数据层要采什么信号。

2.1 数据层:六类多模态数据的采集口径

原文把课堂数据分成六大类,这个分类不是学术装饰,它直接决定了后续目录结构和模块入参。落地时我一般按这个分类建一级目录,每类下面按课次建二级目录,文件名强制带时间码。

数据类别采集手段采样要点落地风险
言语数据360°指向性拾音、矩阵麦克风、教师可穿戴麦、桌面录音笔教师通道与学生通道物理分离串音导致声纹区分师生失效
行为数据前后两路摄像头,有条件加第三路跟拍小组至少“从后往前”+“从前往后”双机位单机位拍不到后排学生行为
心理数据问卷量表,辅以语音语调、用词类型、面部表情推论只做趋势参考,不做个体定性表情推断误差被当成结论
生理数据皮肤电、眼动、压感、心电被试难以长期伪装,真实性较高穿戴设备干扰正常上课
脑数据简易脑电设备多人同步采集仍处早期,样本量小容易被过度解读
学业数据阶段测试、作业作品、智能终端过程性数据与课次时间对齐成绩口径不统一无法横比

双机位是底线,不是可选项。只有正面机位,教师板书时的学生反应全丢;只有后面机位,教师表情与手势全丢。第三路跟拍要固定同一小组,否则两节课的对比就失去可比性。

采集完成后按下面的结构落盘,后续所有模块只认这套路径,换设备也不改代码:

# 每节课一个根目录,一级子目录对应六类数据,禁止平铺 lesson_2024_math_001/ ├── 00_meta/ # 课次元信息:学科、课题、班级、轮次、总时长 ├── 01_speech/ # 言语:教师通道、学生通道、混音,wav 48k/16bit ├── 02_video/ # 行为:front.mp4 / back.mp4 / group.mp4 ├── 03_survey/ # 心理:量表原始作答 csv ├── 04_physio/ # 生理:皮肤电、眼动,csv 带本地时间戳 ├── 05_eeg/ # 脑电:原始 bin + 事件标记 └── 06_academic/ # 学业:前后测、作业、终端行为日志

目录规范解决的是“对齐”问题而不是整洁问题。所有设备在开机时统一校时一次,课首用一次拍手或电子提示音作为同步事件,后期靠这个事件把各路数据的时间轴拉到同一条基线上。这一步没做,后面 ST 图跟视频对不上的时候,排查成本极高。

2.2 认知层:话语分类、行为识别、对话分析三个模块怎么接

认知层的本质是把原始信号翻译成带语义的标签序列。原文列了三块:话语分类、行为分析、对话分析。它们的输入输出口径必须提前冻结,否则不同厂商的模型接进来就是一堆无法对齐的标签。

模块输入输出标签标注依赖
话语分类双通道音频话语人(师/生)、语音段起止声纹样本各 30 秒以上
行为分析视频帧序列举手、站立、低头、点头、抬头、写作、阅读定向标定的课堂数据集
对话分析转写文本 + 话语人提问类型(封闭/推理/开放)、应答类型、反馈类型人工按 IRE 规则标注训练集

话语分类的第一层不是语义,是“这句话谁说的”。靠音色与声纹把教师通道和学生通道分开,再在混音里做人声分离。这一步的输出直接决定 ST 占比和课堂时段分布能不能算。我见过最典型的错误是把混音直接丢给通用语音识别,结果小组讨论段的话语人随机跳变,ST 图看起来像心电图。

行为识别要特别注意“定向标定”。通用姿态模型在教室场景下会把低头写字判成低头走神,所以必须用自己教室、自己机位、自己学生规模的数据做一轮微调,哪怕只标两三百帧。标定时优先标边界样本:趴桌、侧身、举手到一半。

对话分析是最需要人的一环。机器不认识“这个问题好不好”,所以流程是:研究者先按规则标一批语句形成训练集,机器学习后再人工抽检修正。原文的做法是把提问拆成三级、回答拆三级、反馈拆三级,用同一套编码规则约束人工与机器,保证两边算出来的分布可比。

2.3 标准层与应用层:CEED 不是评分表,是取数说明书

四层里标准层是核心,它对下约束数据层和认知层采什么、识别什么,对上决定应用层输出什么报告。原文的说法是标准层对数据层、认知层起结构性导向,对应用层起实践指向。翻译成工程语言:没有标准层,认知层就会自发退化成“哪个指标好算就算哪个”,最后交出来的报告只能写“本节课学生平均抬头率 62%”,对教学改进毫无用处。

应用层原文列了五类去向:教师教学反馈、教师教研、教育评估与诊断、教育研究、教育政策。这五类对报告粒度的要求完全不同。教师反馈要的是带时间码的具体片段和建议;教研要的是同一教师两轮课的对比;区域评估要的是可聚合的课堂质量指数;教育研究要的是原始标签序列的可得性;政策层面要的是常模。

所以同一套分析结果,至少要出三种视图:单课诊断视图、教师纵向对比视图、区域聚合视图。很多项目死在只做了第一种,教研员拿到手发现没法比,报告就躺在邮箱里。

3. CEED 三层次九维度:把“好课”拆成能观测的观察点

标准层最容易写成口号。CEED 的可操作之处在于它给了九个维度、每个维度一个观察点,观察点再往下挂具体信号。原文的基本判断很硬:一堂课的效果不看老师讲得多精彩、多全面、多生动,而看学生有没有发生学习、有多少学生参与、目标有没有达成、以什么方式展开。

3.1 九个维度的观察点定义

层次维度观察点可关联信号判定难点
效率有学学习是建构的学生话语时长、个人任务时长、作品产出沉默思考与走神难区分
效率有效教学是聚焦的内容词词频集中度、目标复现次数关键词重复≠目标达成
效率有趣学习是愉悦的语调起伏、笑声、应答响应时延愉悦不等于投入
公平分配机会是均等的被提问学生座位分布、参与人数座位识别需标定
公平程序程序是正义的任务布置顺序、等待时长规则是否公示无法从信号看出
公平互动对话是平等的IRE 中 E3 占比、话语轮次高 E3 也可能是低效发散
民主安全氛围是安全的主动提问次数、不同观点表达需要语义判断
民主自主学习是自控的自主时间占比、自我修正行为自主与放任边界模糊
民主合作活动是协作的小组活动时长、组内话语轮次组内分工质量难量化

这张表的用法不是逐格打分,而是先选三到四个学校真正关心的维度做深。九个维度全上,第一轮必然全是噪声。

3.2 从信号到维度得分:别拍权重,先做纵向

维度得分最常见的错误是跨学科横向排名。数学课的“互动”得分和语文课的“互动”得分放一起比,出来的结论没有意义。可行做法是同一教师、同一课题、不同班级或不同轮次之间做纵向对比,这也是原文课例采用的方式:一位数学教师用“整式的乘法”在两个班各上一次,第二次课调整了教学设计,两节课互为参照。

信号到分数的映射建议按“主指标 + 辅助指标 + 人工复核”三层走:

维度主指标辅助指标复核方式
有学学生行为占比、个人任务时长学生话语轮次抽 3 段录像回看
有效内容词集中度、目标句复现提问类型分布对照教学设计
分配被提问学生覆盖人数座位热区分布核对名单
互动E3 反馈占比、话语轮次开放式提问占比抽 10 条对话人工判
合作小组活动时长组内轮次方差看第三路跟拍

权重不要在第一版就固定。先用等权跑三到五节课,看哪几个指标抖动大,抖动大的降权或改为定性描述。抖动本身就是信息,它说明这个维度在当前采集条件下不可靠。

3.3 一份可抄的报告字段结构

报告字段一旦冻结,前端、教研员、研究者三方才能对上话。下面这套结构在我们这里跑过几轮,字段不多但够用:

{ "lesson_id": "L2024-MATH-001", "meta": {"subject": "数学", "topic": "整式的乘法", "round": 1, "duration_sec": 2607, "cameras": ["front", "back"]}, "timeline": { "teach_sec": 1819, "interact_sec": 392, "task_sec": 305, "group_sec": 0 }, "st": {"teacher_ratio": 0.70, "student_ratio": 0.30}, "type": {"rt": 0.70, "ch": 0.26, "label": "讲授型"}, "talk": {"questions": 153, "speech_rate": 212.63, "participants": 11, "turns": 43}, "ire": {"I1": 63, "I2": 90, "I3": 0, "R1": 5, "R2": 56, "R3": 0, "E1": 11, "E2": 10, "E3": 24}, "ceed": {"有学": 0.62, "有效": 0.71, "分配": 0.55, "互动": 0.48}, "evidence": [{"t": "00:12:30", "dim": "互动", "clip": "教师连续三次追问同一学生"}] }

evidence字段是整份报告里最容易被砍掉、又最不该砍的。教研场景下教师不信分数,只信片段。每条证据带时间码,点开就能回到录像,报告才有说服力。字段单位统一用秒,展示层再转成“分:秒”,避免前后端各算一遍。

4. 复现一次双课例对比:五个指标怎么算

原文的两节课例给出了足够细的数值,可以当作回归测试用例:第一次课总时长 43 分 27 秒,教师讲授 30 分 19 秒、师生互动 6 分 32 秒、个人任务 5 分 5 秒;第二次课总时长 41 分 55 秒,讲授 24 分 19 秒、互动 5 分 2 秒、个人任务 5 分 7 秒、小组活动 6 分 8 秒。下面按指标逐个落地。

4.1 词频:先清洗,再把口头语单列

词频统计看着最简单,翻车最多。直接对转写文本做分词统计,排第一的往往是“这个”“是不是”。原文的处理方式是口头语单独观察:第一次课“平方”53 次居首,“一下”作为口头语 43 次紧随其后,“等于”和“是不是”各 42 次;第二次课“平方”54 次、“公式”41 次、“乘法”33 次、“是不是”降到 27 次。这组数字的解读重点不在“平方”多了一次,而在内容词更聚焦、口头语占比下降。

# pip install jieba import re, jieba from collections import Counter FILLER = {"一下", "是不是", "对不对", "这个", "那个", "啊", "嗯", "那么"} STOP = {"我们", "大家", "同学", "老师"} # 按学科补充,避免通用称呼挤占前十 def clean(text: str): text = re.sub(r"[\s,。?!、;:""''()()]", "", text) return [w for w in jieba.lcut(text) if w.strip()] def freq_report(transcript: str, topn: int = 20): words = clean(transcript) content = Counter(w for w in words if w not in FILLER and w not in STOP) filler = Counter(w for w in words if w in FILLER) total = sum(content.values()) # 分母只算内容词 top = [(w, c, round(c / total * 100, 2)) for w, c in content.most_common(topn)] return top, filler.most_common(5)

几个参数必须自己定死。FILLER表按教师个人语言习惯扩,同一个教师的口头语在不同课上是稳定出现的,所以它更适合当“语言习惯指标”而不是噪声清掉。分母用内容词总数而不是全部词数,否则加不加口头语,百分比会飘。topn建议取 20 看长尾,正式报告只放前 10 配文字云。分词对学科术语不友好,“整式”“单项式”这类词要在 jieba 里加自定义词典,否则会被切碎,词频直接失真。

4.2 时段切分:逐秒判定,再做区间压缩

原文把课堂时段分成四类:教师讲授、师生互动、个人任务、小组活动。判定依据是时间序列加声纹区分,再结合图像多模态。工程上先把每一秒打上一个标签,再把连续相同标签压成区间——直接按“段”判定会累积误差,逐秒判定再用压缩消抖更稳。

from itertools import groupby def to_segments(labels): """labels: 逐秒标签序列,如 ['T','T','I','I','I','P',...]""" out, cursor = [], 0 for tag, grp in groupby(labels): n = len(list(grp)) out.append((tag, cursor, n)) cursor += n return out def merge_short(segs, min_sec=5): """短于 min_sec 的碎片并入前一段,消除模型抖动""" merged = [] for tag, start, dur in segs: if dur < min_sec and merged: p_tag, p_start, p_dur = merged[-1] merged[-1] = (p_tag, p_start, p_dur + dur) else: merged.append((tag, start, dur)) return merged def duration_by_tag(labels): total = len(labels) acc = {} for tag, _, dur in merge_short(to_segments(labels)): acc[tag] = acc.get(tag, 0) + dur return {k: (v, round(v / total * 100, 1)) for k, v in acc.items()}

min_sec是最关键的一个参数。设太小,一次咳嗽就切断一段讲授;设太大,真实的短互动被吞掉。经验值是 5 到 8 秒,且要在同一批课上保持一致,否则两节课的对比没有意义。标签体系用单字母编码(T 讲授、I 互动、P 个人任务、G 小组),跨模块传递时不带中文,避免编码问题。

拿原文数据验证一下量级:第一次课 43 分 27 秒合 2607 秒,讲授 1819 秒、互动 392 秒、个人任务 305 秒,其余为过渡与准备时间;第二次课总时长 2515 秒,讲授 1459 秒、互动 302 秒、个人任务 307 秒、小组 368 秒。第一次课没有小组活动,第二次课多出 6 分 8 秒的小组段,这正是教师有意识调整的地方。

4.3 ST 占比与 Rt/Ch:课堂类型怎么判

ST 分析看的是教师行为与学生行为的时间占比。原文第一次课教师 30 分 19 秒、学生 9 分 59 秒,占比 70%/30%;第二次课教师 24 分 19 秒、学生 18 分 3 秒,占比 58%/42%。学生行为占比从三成提到四成,是第二次课最直观的变化。

课堂类型用 Rt 和 Ch 两个量描述:Rt 是教师行为时间占比,Ch 是行为转换频率。原文判定第一次课 Rt=0.70、Ch=0.26 属讲授型,第二次课 Rt=0.58、Ch=0.15 属混合型。

def st_ratio(labels): total = len(labels) t = sum(1 for x in labels if x == "T") s = sum(1 for x in labels if x == "S") return {"T": round(t / total, 3), "S": round(s / total, 3)} def rt_ch(labels, fps=1): rt = sum(1 for x in labels if x == "T") / len(labels) switches = sum(1 for a, b in zip(labels, labels[1:]) if a != b) minutes = len(labels) / fps / 60 ch = switches / minutes # 单位:次/分钟 return round(rt, 3), round(ch, 2) def classroom_type(rt, ch): if rt >= 0.65 and ch < 0.30: return "讲授型" if 0.50 <= rt < 0.65: return "混合型" return "需结合 IRE 与时段分布人工复核"

这里有个口径问题必须说清楚:原文只给了 Ch 的数值,没给单位。按第一次课 43.45 分钟、0.26 反推,切换次数约 11 次;第二次课 41.9 分钟、0.15 反推约 6 次。所以 Ch 按“每分钟切换次数”理解是自洽的。自己团队落地时要把这个口径写进文档,不同单位算出来的 Ch 差一个数量级,两类课放一起比就废了。另外fps要和标签生成频率一致,逐秒判定时fps=1;如果模型按帧输出,先按秒做多数投票再进这个函数。

4.4 IRE 三级编码:人工与机器必须用同一把尺

课堂对话分析用的是 IRE 序列:教师提问(I)、学生回答(R)、教师反馈(E),每类再分三级。原文的分级定义和两节课结果如下:

类型定义第一次课第二次课
I1有标准答案的封闭式简短问题63(41.5%)37(42.2%)
I2有标准答案的推理性或解释性问题90(58.5%)50(57.8%)
I3无标准答案的开放式或半开放问题00
R1简单回应(是、不是、对)5(8.2%)4(10.3%)
R2事实性、回忆性、解释性回答56(91.8%)35(89.7%)
R3开放性、推理性、诠释性回答00
E1简单回复11(24.4%)6(33.3%)
E2复述回答者观点,追问进一步解释10(22.2%)8(44.5%)
E3邀请本人或他人回答,促进反思与群体讨论24(53.4%)4(22.2%)

这组数据里最值得注意的不是提问数从 153 降到 76,而是反馈结构的变化:第二次课 E2 从 22.2% 升到 44.5%,E3 从 53.4% 降到 22.2%。也就是说教师少问了近一半的问题,但更多地去追问同一个学生的解释。同时 I3 和 R3 两节课都是 0,开放式问题和开放性回答一个都没有,这才是这节课真正的短板,光看提问总数完全看不出来。

编码落地要做两件事。一是双人标注一致性校验,抽 10% 的语句由两人独立标,算 Cohen's kappa,低于 0.6 就回去改规则而不是继续标。二是让模型和人工用完全相同的定义文本,规则写得越模糊,模型和人的分歧越大,最后没法判断是模型差还是标注差。

5. 避坑与排查:五个把报告做废的操作

5.1 采集与对齐环节的三个坑

坑一:ST 图和录像对不上。现象是报告里写着 12 分 30 秒有一次连续追问,点开录像却在讲例题。原因是各路设备各用各的本地时钟,摄像头、录音笔、拾音器开机时间差几十秒到几分钟不等。解决办法是课前统一校时,课首做一次明确同步事件(拍手、提示音、举牌都行),后期用音频波形互相关找到这个事件,统一平移到同一时间基线。这一步做成固定流程,不要每次临时找。

坑二:小组活动段话语人乱跳。现象是小组讨论时段,ST 图出现大量高频切换,看起来师生互动极其频繁。原因是混音里学生声音盖过教师通道,声纹模型在低信噪比下随机判人。解决办法是教师可穿戴麦单独成轨,不做混音;小组段以教师通道为主、学生通道为辅,判不出来就标“未定”,宁可留空也不要瞎猜。未定比例超过 15% 的课次,直接打回重采。

坑三:行为识别把写字判成走神。现象是“低头”标签大量聚集在练习环节,导致“有趣”维度得分异常低。原因是通用姿态模型没见过这个教室的机位高度和学生课桌遮挡。解决办法是拿本校两三百帧做定向微调,重点标边界样本。微调之前,行为标签只用于时段划分,不用于维度打分。

5.2 指标解读环节的两个坑

坑四:拿单维指标下结论。现象是“本节课提问 153 个,互动充分”。原因是只看提问总数,没看 IRE 分布。第一次课 153 个问题里 I3 是 0,E3 占 53.4% 但话语轮次只有 43 次、参与 11 人,说明提问密集但覆盖面窄。解决办法是提问数、参与人数、话语轮次、IRE 三级分布必须联读,四个数一起看才成立。

坑五:跨学科横向排名。现象是语文课“互动”得分普遍高于数学课,被解读为语文教师更会互动。原因是学科话语结构本身不同,数学的 I2 推理性问题天然多,语文的开放式问题天然多。解决办法是第一年只做同教师纵向对比和同课题对比,常模积累到足够样本量再谈横向。这条不是技术问题,是使用纪律问题,比任何模型都重要。

5.3 上线前的一张自检表

检查项通过标准不通过的处理
多设备时间轴同步事件偏差 < 0.5 秒重新对齐,不进分析
话语人未定比例< 15%重采或改用教师通道主判
短碎片段占比合并后 < 5%调整 min_sec 参数
双人标注一致性kappa ≥ 0.6修订编码规则后重标
证据片段可回放每条证据能定位到录像补时间码,缺则删该条
数据授权与告知采集前完成告知与授权停止采集,不补签

最后一行不是形式。课堂里有未成年人面部与语音数据,采集范围、存储期限、谁能看报告,都要在采集之前定清楚。技术上能做的和该做的,是两件事。

6. 把一次性报告变成常态闭环:我自己的三条硬规矩

报告做得再漂亮,用一次就死。这套架构真正值钱的地方是“全员化、全程化、全面化”的反馈,落到操作上就是三件事。

规矩一:先给教师本人看,再上教研会。单课诊断报告第一时间只推给授课教师,给两三天自己回看证据片段。教师先认了数据,教研会上才不会变成辩护会。我见过太多学校直接把 nine 维度雷达图投在大屏上,结果整场教研都在争论“我这个维度为什么低”,一节课的改进点一个没谈。

规矩二:对比只用同一教师、同一课题的两轮课。原文课例的做法值得照搬:一位数学教师用“整式的乘法”在两个班各上一次,第二次课增加了个人任务之后的小组活动,学生行为占比从 30% 提到 42%,Rt 从 0.70 降到 0.58,课堂类型从讲授型变成混合型。这种对比里每个数字都能对应到一个具体的教学动作,教师看得懂也改得动。跨教师排名除了制造焦虑,没有别的作用。

规矩三:报告字段冻结版本,改字段要留迁移记录。第一版报告定下meta / timeline / st / type / talk / ire / ceed / evidence八个块之后,加字段可以,改语义不行。我们中途把ch的单位从“次/节”改成“次/分钟”,历史数据全部重算了一遍,代价很大。所以字段定义文档里必须写清单位和计算口径,尤其是 Ch 这种原文没给单位的量。

验证方法也给一个:拿原文这两节课的数值当回归用例,把上面几段脚本跑一遍,看算出来的时段占比、ST 比例、Rt/Ch 是否落在 43:27 → 70%/30% → 0.70/0.26、41:55 → 58%/42% → 0.58/0.15 这组数附近。偏差超过 3 个百分点,先查对齐和标签合并参数,别急着怀疑模型。

从那以后我每次拿到一节课的多模态数据,都会先把同步事件对齐、话语人未定比例、短碎片段占比这三个数跑出来,三个数不过关,一个维度分都不算。这套顺序救过我好几次,也让我彻底相信:课堂智能分析的门槛不在模型,在于你愿不愿意在采数据那天多花十分钟校时。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询