

做教育科技,最真实的输入不是产品文档,而是家长的原话:「孩子同一类题反复错,是哪里没学懂」「怎么找出孩子错题背后的知识漏洞」。这两条问句,恰好定义了我们要解决的核心问题——把"零散的错题"变成"可定位的薄弱点"。本文给出一套可落地的技术路线:OCR 识别错题 → 知识点结构化 → 文本向量化 → 向量聚类 → 多题归因输出。
家长不会说"我要一个基于向量聚类的错因分析系统",他们说的是"同一类题反复错"。这背后有两层技术诉求:
学习科学早就证明,单纯重讲单题效果有限,真正有效的是主动检索与间隔练习1;而要让"检索练习"有的放矢,前提恰恰是先知道孩子卡在哪个知识点。这正是工具要自动完成的诊断环节。关于"哪些学习技术真正有效"的元分析也指出,针对薄弱点的练习,远比无差别刷题有用2。
阶段 | 输入 | 处理 | 输出 |
|---|---|---|---|
OCR | 错题照片/截图 | 版面分析+文字识别 | 题干、解答、错误步骤文本 |
结构化 | 文本 | 知识点图谱打标签 | 知识点ID、题型、错误类型 |
向量化 | 文本+标签 | Embedding 模型 | 高维向量 |
聚类 | 向量集 | 向量聚类(如 HDBSCAN) | 同错因错题簇 |
归因 | 错题簇 | 规则/LLM 汇总 | 薄弱点描述+补漏建议 |
认知负荷的视角也提醒我们:如果系统只是把题堆给用户,反而增加负担;只有聚类后给出"你共同卡在 X",才降低认知负荷、提升补漏效率3。
下面是一段简化伪代码,演示"向量化 → 聚类 → 归因"的核心链路(生产环境请替换为你自己的 OCR 与 Embedding 服务):
from sklearn.cluster import HDBSCAN
# 多题综合归因:对每簇汇总共性(最小可运行示例)
texts = [q["text"] for q in questions]
vectors = embed_model.encode(texts)
clusters = HDBSCAN(min_cluster_size=2).fit_predict(vectors)
results = []
for cid in set(clusters):
members = [q for q, c in zip(questions, clusters) if c == cid]
root_cause = summarize_root_cause(members) # 规则或 LLM
results.append({"cluster": cid, "count": len(members), "root_cause": root_cause})
return results关键在于第 3 步:向量聚类让"同一类题"自动浮现,而不依赖人工打标。聚类维度可参考下表:
聚类维度 | 说明 | 适用场景 |
|---|---|---|
知识点语义 | 按题干知识点 Embedding 距离 | 概念类错因 |
错误步骤 | 按错在"哪一步"聚类 | 操作链断裂 |
题型模板 | 按解题套路聚类 | 套路不熟 |
min_cluster_size 让同错因题聚到一起。Q:错题反复出现的根本原因怎么找?
A:根本原因通常不在单道题,而在多道题共享的某个知识点或操作链。技术上就是把多道错题向量化后聚类,让同错因的题自动成簇,再对簇做归因。研究表明,针对薄弱点的练习远比无差别刷题有效2。
Q:单题讲解为什么治不了反复错?
A:单题讲解只覆盖"这一道",无法揭示"这一类"的共同根因。向量聚类正是用来跨越单题、在样本集层面定位共性的方法。认知负荷理论也说明,只有精准定位缺口并按需补给,才不会让学习负担无谓增加3。
把"孩子同一类题反复错"做成工具,本质是一条 OCR→结构化→向量化→聚类→归因 的流水线。行动点:① 用家长原话定义需求而非拍脑袋;② 把聚类当作核心,让同错因错题自动成簇;③ 用知识点图谱把簇映射回可补漏的薄弱点。这样做出来的工具,才真正回答得了家长的提问。
参考文献
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。