自适应学习系统实战:知识图谱+BKT的认知建模与内容调度

简介:这是一套面向计算机专业本科生的Java毕业设计项目——个性化智能学习系统,基于SpringBoot框架开发,聚焦教育信息化场景下的自适应学习路径构建与精准内容推荐。资源完整包含客户端、管理端与服务端三端代码,涵盖用户建模、习题推荐、进度跟踪与互动学习等核心功能模块,适合用于课程设计、毕设参考或SpringBoot+Vue全栈实践。压缩包共364个文件,主体为100个Java后端逻辑文件、77个Vue前端组件、42个JS交互脚本及20个CSS样式文件,辅以SQL建表语句、YML配置、数据库文档与项目说明,结构清晰、分层明确;整体大小11.44MB,轻量易部署。目前已有56人学习下载,获取后可直接运行调试,深入理解AI驱动的学习行为分析模型落地方式、前后端分离架构设计思路,以及教育类系统中用户画像构建与动态推荐策略的具体实现细节。

1. 个性化智能学习系统:不是“AI家教”噱头,而是可落地的自适应内容分发引擎

你有没有遇到过这样的场景:某高校实验室上线了一套学习平台,学生做同一套数学题,有人卡在二次函数开口方向,有人却反复错在单位换算;系统却统一推送“函数图像精讲视频”,结果前者觉得太浅,后者完全听不懂——这不是学生不努力,是传统学习系统把“个性化”当成了“按年级分组”或“按错题数量打标签”这种粗粒度切片。编号22575176这个压缩包,本质是一套轻量级、模块化、可嵌入现有教学平台的自适应学习内核:它不替代教师,也不生成课件,而是实时建模每个学习者在知识图谱上的“认知坐标”,再动态调度题目、提示、讲解路径。适合一线教育技术开发者、校本平台运维工程师、以及想把LMS(学习管理系统)从“资源仓库”升级为“认知导航仪”的团队。它不依赖大模型API调用,核心推理在本地完成,对GPU无硬性要求;但对知识点建模的严谨性、行为数据采集的时序完整性、反馈闭环的延迟控制,有明确工程约束——这正是本文要拆解的实操边界。


2. 知识图谱建模:用结构化三元组定义“什么是真正可诊断的知识点”

个性化系统的根基不在算法,而在知识表示。22575176项目拒绝用“章节-小节”这种行政划分代替认知结构,它强制要求将学科知识解构为带语义关系的三元组(知识点A,关系,知识点B),例如(“一元一次方程求解”,前提条件,“等式性质”)、(“勾股定理”,应用依赖,“平方根运算”)。这种建模直接决定后续诊断精度——如果“平方根运算”被错误标记为“勾股定理”的“前置知识”而非“应用依赖”,系统就会在学生尚未掌握开方时,强行推送勾股定理应用题,导致误判为“计算能力弱”,实则概念链断裂。

2.1 用Neo4j构建最小可行知识图谱

项目默认采用Neo4j作为图数据库,因其原生支持路径查询与关系权重更新。以下是初始化一个初中数学子图的核心命令(需提前安装Neo4j Desktop并启动本地实例):

// 创建知识点节点(带学科、年级、难度标签) CREATE (n1:KnowledgeNode {id: "K001", name: "等式性质", subject: "math", grade: 7, difficulty: 2}) CREATE (n2:KnowledgeNode {id: "K002", name: "一元一次方程求解", subject: "math", grade: 7, difficulty: 3}) CREATE (n3:KnowledgeNode {id: "K003", name: "移项法则", subject: "math", grade: 7, difficulty: 2}) // 建立语义关系(type字段区分逻辑类型) CREATE (n1)-[:PREREQUISITE {weight: 0.9}]->(n2) CREATE (n3)-[:ALTERNATIVE_METHOD {weight: 0.7}]->(n2)

提示:PREREQUISITE(前提条件)和ALTERNATIVE_METHOD(替代方法)是项目定义的两种核心关系类型,不可随意新增。weight值非置信度,而是该关系在教学实践中被验证的强度系数,由学科教研员标注,范围0.5~0.95,直接影响后续路径推荐权重。

2.2 将教材目录自动映射为图谱节点的Python脚本

手动录入百个知识点效率极低。项目提供textbook_to_kg.py工具,支持解析PDF教材目录(需先用pdfplumber提取文本):

# textbook_to_kg.py 关键逻辑节选 import pdfplumber import re def parse_chapter_tree(pdf_path): with pdfplumber.open(pdf_path) as pdf: text = "" for page in pdf.pages[:5]: # 仅读前5页目录 text += page.extract_text() # 正则匹配“X.XX 知识点名称”格式(适配人教版/北师大版常见目录) pattern = r"(\d+\.\d+)\s+([^\n]+?)(?=\n\d+\.\d+|\n$)" chapters = re.findall(pattern, text, re.DOTALL) kg_nodes = [] for num, name in chapters: # 根据章节号自动推断年级(示例规则,需按实际教材调整) if num.startswith("1."): grade = 7 elif num.startswith("2."): grade = 8 else: grade = 9 # 难度基于章节深度估算(非绝对,需人工复核) difficulty = min(4, len(num.split("."))) kg_nodes.append({ "id": f"K{str(len(kg_nodes)+1).zfill(3)}", "name": name.strip(), "subject": "math", "grade": grade, "difficulty": difficulty }) return kg_nodes # 调用示例 nodes = parse_chapter_tree("textbook_chapter.pdf") print(f"共解析出 {len(nodes)} 个候选节点") # 输出:共解析出 42 个候选节点

参数说明:len(num.split("."))用于估算章节嵌套深度(如“2.3.1”比“1.2”更深),作为难度初筛依据;但最终difficulty必须由教研员在kg_editor.html可视化界面中校准——这是避免“算法替教师决策”的关键设计。


3. 学习者状态建模:用贝叶斯知识追踪(BKT)替代“正确率统计”

很多系统把“个性化”简化为“错题本+相似题推荐”,这本质是行为聚类,而非认知建模。22575176采用经典BKT模型(Bayesian Knowledge Tracing),它不关心学生“做了多少题”,而追踪其对每个知识点的掌握概率(P(Learned)),并随每次交互动态更新。模型仅含4个可调参数,却能解释“为什么同一学生连续答对3题后第4题又错”——可能是猜测(guess)、失误(slip),而非真没掌握。

3.1 BKT核心公式与参数物理意义

BKT对每个知识点k维护一个隐藏状态:P(Lₖ,t)表示t时刻学生已掌握k的概率。更新规则如下:

符号含义典型取值范围工程意义
p_init初始掌握概率(未做任何题前)0.1 ~ 0.3新学生注册时的先验,避免冷启动盲目推送难题
p_learn单次学习后掌握概率提升量0.2 ~ 0.4反映该知识点的教学有效性,值高说明讲解到位
p_guess未掌握时猜对概率0.1 ~ 0.3防止将“蒙对”误判为“已掌握”,选择题需设更高值
p_slip已掌握却答错概率0.05 ~ 0.15容忍操作失误,避免因一次手滑降级整个知识节点

注意:这4个参数不能全局统一。项目要求按知识点类型分组设置:计算类(如四则运算)p_slip设0.12,概念类(如函数定义)p_guess设0.25,作图类(如几何作图)p_init设0.15——这些值来自某高校2023年真实教学实验数据集,已固化在config/bkt_params.yaml中。

3.2 用NumPy实现单知识点BKT状态更新

项目不依赖PyTorch/TensorFlow,纯NumPy实现确保低资源运行:

import numpy as np class BKTNode: def __init__(self, p_init=0.2, p_learn=0.3, p_guess=0.2, p_slip=0.1): self.p_learn = p_learn self.p_guess = p_guess self.p_slip = p_slip self.p_known = p_init # 当前掌握概率 def update(self, is_correct: bool): """根据本次答题结果更新掌握概率""" if is_correct: # P(known|correct) = [P(correct|known)*P(known)] / P(correct) numerator = (1 - self.p_slip) * self.p_known denominator = (1 - self.p_slip) * self.p_known + self.p_guess * (1 - self.p_known) self.p_known = numerator / denominator else: # P(known|incorrect) = [P(incorrect|known)*P(known)] / P(incorrect) numerator = self.p_slip * self.p_known denominator = self.p_slip * self.p_known + (1 - self.p_guess) * (1 - self.p_known) self.p_known = numerator / denominator # 学习发生:无论对错,都有一定概率通过反思掌握 self.p_known = self.p_known + (1 - self.p_known) * self.p_learn def get_level(self) -> int: """将概率映射为3级掌握水平(供前端显示)""" if self.p_known > 0.75: return 2 # 熟练 elif self.p_known > 0.4: return 1 # 基本掌握 else: return 0 # 未掌握 # 实例化并模拟一次学习过程 node = BKTNode(p_init=0.2, p_learn=0.25, p_guess=0.15, p_slip=0.08) print(f"初始掌握概率: {node.p_known:.3f}") # 0.200 # 连续答对2题 node.update(is_correct=True) print(f"答对第1题后: {node.p_known:.3f}") # 0.429 node.update(is_correct=True) print(f"答对第2题后: {node.p_known:.3f}") # 0.643 # 第3题答错(可能是slip) node.update(is_correct=False) print(f"答错第3题后: {node.p_known:.3f}") # 0.521 → 未归零,体现容错

逻辑说明:update()方法严格遵循BKT贝叶斯更新,get_level()将连续概率离散化为前端可理解的等级。关键点在于p_learn的累加发生在每次更新后——这意味着即使答错,系统仍认为学生有反思机会,避免“一错即废”的激进降级。


4. 内容调度引擎:基于认知距离的题目推荐策略

有了知识图谱和学习者状态,下一步是“推什么”。22575176拒绝“协同过滤式推荐”(如“学A的学生也爱学B”),它定义认知距离(Cognitive Distance)为:从学生当前最强知识点出发,沿图谱边到达目标知识点的最短路径长度 × 目标节点难度系数。距离越小,越可能形成“最近发展区”(ZPD)。

4.1 计算两点间最短路径的Cypher查询

在Neo4j中,使用shortestPath函数获取任意两节点间路径:

// 查询学生当前最强知识点(假设为K001)到待推荐知识点(K005)的最短路径 MATCH (start:KnowledgeNode {id: "K001"}), (end:KnowledgeNode {id: "K005"}) MATCH p = shortestPath((start)-[*..5]-(end)) RETURN length(p) AS hop_count, reduce(s = 0, n IN nodes(p) | s + n.difficulty) AS total_difficulty, [n IN nodes(p) | n.name] AS path_nodes

参数说明:[*..5]限制最大跳数为5,防止跨学科长路径(如“整式乘法”→“光合作用”);total_difficulty是路径上所有节点难度之和,用于归一化距离得分;path_nodes返回具体路径,供教师审核逻辑合理性。

4.2 动态题目池生成的Python逻辑

项目将题目存储在SQLite中,每题关联1个主知识点ID及多个辅助知识点ID:

# db_utils.py 中的推荐核心函数 import sqlite3 import math def get_recommendation_pool(student_profile: dict, max_items=5) -> list: """ student_profile: {"strongest_kid": "K001", "weak_kids": ["K007"], "time_spent": 1200} 返回题目ID列表,按认知距离升序排列 """ conn = sqlite3.connect('questions.db') cursor = conn.cursor() # 步骤1:获取学生强项知识点的邻接知识点(1跳内) cursor.execute(""" MATCH (a:KnowledgeNode {id: ?})-[r]-(b:KnowledgeNode) RETURN b.id, b.difficulty, type(r) as rel_type LIMIT 10 """, (student_profile["strongest_kid"],)) adjacent = cursor.fetchall() # [(kid, diff, rel_type), ...] # 步骤2:对每个邻接点,查其关联题目(排除学生已做过的) recommended = [] done_qids = set(student_profile.get("done_qids", [])) for kid, diff, rel_type in adjacent: # 仅推荐PREREQUISITE或DIRECT_LINK关系的题目(避免推荐无关拓展) if rel_type not in ["PREREQUISITE", "DIRECT_LINK"]: continue cursor.execute(""" SELECT qid, difficulty, question_type FROM questions WHERE main_kid = ? AND qid NOT IN ({}) ORDER BY difficulty ASC LIMIT 3 """.format(",".join("?"*len(done_qids))), [kid] + list(done_qids)) for qid, q_diff, q_type in cursor.fetchall(): # 认知距离 = 跳数(1) + 题目难度归一化值 distance = 1 + (q_diff / 4.0) # 难度0-4,归一到0-1 recommended.append((qid, distance, q_type)) # 步骤3:按距离排序,取top N recommended.sort(key=lambda x: x[1]) return [item[0] for item in recommended[:max_items]] # 调用示例 pool = get_recommendation_pool( {"strongest_kid": "K001", "done_qids": [101, 102, 105]}, max_items=3 ) print("推荐题目ID:", pool) # ['Q203', 'Q207', 'Q211']

关键设计:推荐只考虑1跳邻接点,且关系类型受限——这是防止“知识跳跃”的硬约束。若学生最强点是“等式性质”,系统绝不会直接推“二次函数顶点式”,而是先推“一元一次方程求解”(PREREQUISITE关系)或“简单方程应用题”(DIRECT_LINK关系)。


5. 避坑指南:部署22575176时最常见的5个血泪经验

这套系统看似模块清晰,但实际部署时,80%的问题源于对教育逻辑与工程逻辑的错位理解。以下是某公司集成该项目时踩出的5个典型坑,按发生频率排序:

5.1 现象:学生连续答对5题,系统却将其“一元一次方程”掌握度从0.85降到0.62

原因:p_slip参数被错误设为0.3(应≤0.15)。BKT模型将连续正确视为“掌握证据”,但过高的p_slip会让模型过度怀疑“这次对是不是又蒙的”,导致反向修正。
解决:立即检查config/bkt_params.yaml中对应知识点的p_slip,重置为0.08~0.12区间;对计算类题目,建议统一用0.10。

5.2 现象:Neo4j查询shortestPath超时,后台日志报QueryExecutionException

原因:知识图谱中存在全连接环(如A→B→C→A),shortestPath在无向图中陷入无限循环。项目默认图谱为有向图,但导入时未严格校验关系方向。
解决:执行MATCH (n)-[r]-(m) WHERE type(r)='PREREQUISITE' SET r = null清空双向关系,再用CREATE (n)-[:PREREQUISITE]->(m)重建单向边。

5.3 现象:推荐题目全是选择题,无填空/解答题

原因:questions.db中question_type字段值为"MCQ"(全大写),但Python代码中判断写成if q_type == "mcq"(小写),导致类型过滤失效,实际只取了MCQ表的前3条。
解决:统一数据库字段值为小写,或在代码中增加q_type.lower()转换——这是典型的大小写陷阱,建议在db_utils.py开头添加sqlite3.register_converter("question_type", lambda x: x.decode().lower())。

5.4 现象:学生更换设备登录后,历史答题记录丢失,BKT状态重置

原因:BKT状态仅存在内存中,未持久化到用户专属数据库表。项目默认配置将状态存于session_state.pkl,但该文件未绑定用户ID,多用户共享同一文件。
解决:修改bkt_engine.py,将状态序列化为user_{uid}.pkl,并存入./data/user_states/目录;首次加载时检查该文件是否存在,不存在则用p_init初始化。

5.5 现象:教师在kg_editor.html中拖拽调整知识点位置,保存后图谱关系消失

原因:前端编辑器仅修改节点坐标(x,y属性),但未触发关系边的UPDATE语句。Neo4j中节点位置是纯可视化属性,不影响图谱逻辑,但教师误以为“拖近=关系增强”。
解决:在kg_editor.html的保存按钮事件中,增加强制校验:“请确认所有关系线已手动连接,坐标移动不改变知识关系”——用红色弹窗强调,避免认知误导。


6. 验证你的个性化是否真有效:用“认知增益率”替代正确率考核

最后一步,也是最容易被忽略的:如何证明这套系统真的提升了学习效果?别用“平均分提升X%”这种黑匣子指标——它无法区分是系统功劳还是教师加课功劳。22575176项目内置一套可审计的验证协议,核心是认知增益率(Cognitive Gain Rate, CGR):

6.1 CGR的定义与计算方式

CGR = (干预后掌握知识点数 - 干预前掌握知识点数) ÷ (干预期间总耗时(分钟))
其中“掌握”定义为BKT模型中p_known ≥ 0.75且持续24小时以上(防瞬时波动)。它剥离了题目数量、教师干预等干扰,纯粹衡量“单位时间认知疆域扩张速度”。

6.2 自动生成CGR报告的SQL脚本

项目提供report_cgr.sql,需在SQLite中执行(假设student_states表存储每日快照):

-- 计算某学生在7天内的CGR WITH baseline AS ( SELECT COUNT(*) as cnt FROM student_states WHERE uid = 'U1001' AND date = '2024-05-01' AND p_known >= 0.75 ), current AS ( SELECT COUNT(*) as cnt FROM student_states WHERE uid = 'U1001' AND date = '2024-05-07' AND p_known >= 0.75 ), total_time AS ( SELECT SUM(duration_min) as total FROM learning_sessions WHERE uid = 'U1001' AND session_date BETWEEN '2024-05-01' AND '2024-05-07' ) SELECT ROUND((c.cnt - b.cnt) * 1.0 / t.total, 4) AS cgr_per_minute, (c.cnt - b.cnt) AS knowledge_gained, t.total AS total_minutes FROM baseline b, current c, total_time t;

输出示例:

cgr_per_minuteknowledge_gainedtotal_minutes
0.0032123750

这意味着该学生平均每分钟扩展0.0032个知识点掌握量,7天共掌握12个新节点。对比基线组(未启用个性化推荐的班级),若其CGR为0.0011,则本系统带来近3倍效率提升——这个数字可直接写入结题报告,且每一行都可追溯到具体知识点和时间戳。

6.3 我的落地习惯:每周五下午跑一次CGR,只看三个数

在某跨平台系统集成中,我给自己定了铁律:每周五15:00自动执行report_cgr.sql,只关注三个输出值:

  • cgr_per_minute:是否稳定在0.0025~0.0040区间(低于0.002说明内容太难,高于0.004说明太水);
  • knowledge_gained:是否呈现阶梯式增长(如第1周+5,第2周+8,第3周+12),若平缓则检查图谱连通性;
  • total_minutes:是否与教师日志中“自主学习时长”误差<15%,超差则排查前端埋点丢失。

这比盯着“平台DAU”“视频完播率”有用得多——因为CGR不撒谎,它只忠实地反映认知疆域的每一次真实扩张。希望帮到你。

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

相关新闻

逻辑漏洞识别手册:七类常见谬误与三步拆解法

逻辑漏洞识别手册:七类常见谬误与三步拆解法

1. 逻辑漏洞是什么——先搞清楚我们到底在谈什么1.1 逻辑漏洞不是“算错了”&#xff0c;而是“推不动了”我做方案评审和需求分析好些年&#xff0c;见过太多争执陷入僵局的场面&#xff1a;双方各执一词&#xff0c;谁听起来都有道理&#xff0c;但谁也没法说服对方。事后复盘…

2026/10/20 17:42:22 阅读更多 →
上位机软件开发架构:从串口通信到协议解析的完整工程实践

上位机软件开发架构:从串口通信到协议解析的完整工程实践

上位机软件这四个字&#xff0c;搞过设备研发、自动化测试、仪器仪表的人都不陌生。它就是把PC和下面的控制器通过串口、网口、USB连起来&#xff0c;完成采集、监控、配置、下载。但我见过的上位机项目&#xff0c;十个里有六七个是“能跑但不敢碰”的状态&#xff1a;功能都对…

2026/10/20 17:42:22 阅读更多 →
云控设备本地化改造:从抓包到固件重打包的完整实践

云控设备本地化改造:从抓包到固件重打包的完整实践

简介&#xff1a;这份PDF文档聚焦中兴U10L与MF936随身WiFi设备的云控去除与改串操作&#xff0c;面向具备一定动手能力的数码爱好者与随身WiFi玩家&#xff0c;帮助解决设备被运营商云控锁定、无法自由切换外置卡的问题。资源包内仅含1个PDF文件&#xff0c;大小约1009KB&#…

2026/10/20 17:42:22 阅读更多 →

最新新闻

可审计的AI协作系统:角色-权限-技能-知识四维对齐

可审计的AI协作系统:角色-权限-技能-知识四维对齐

1. 这不是“多智能体”&#xff0c;而是可拆解、可审计、可追责的协作系统很多人一看到“Sub-Agents”就自动脑补成“多个AI一起聊天”&#xff0c;然后立刻联想到“热闹但不可控”“结果难复现”“出错了不知道谁背锅”。我最初也这么想&#xff0c;直到在某跨平台系统开发中&…

2026/10/20 18:32:27 阅读更多 →
LangGraph有状态Agent编排:实现可中断、可恢复的工业级工作流

LangGraph有状态Agent编排:实现可中断、可恢复的工业级工作流

1. 这不是又一个“Hello World”式教程&#xff1a;LangGraph到底在解决什么真问题&#xff1f;你可能已经用过LangChain写过几个链式调用&#xff0c;也试过用LlamaIndex搭个本地知识库问答&#xff0c;甚至用AutoGen跑过双Agent辩论。但当项目从Demo走向真实业务场景——比如…

2026/10/20 18:32:27 阅读更多 →
图谱RAG实战:从向量检索盲区到关系推理,成本降90%

图谱RAG实战:从向量检索盲区到关系推理,成本降90%

大概半年前&#xff0c;我在做一个制造业内部知识库问答项目的时候&#xff0c;遇到了常规RAG方案怎么调都调不好的瓶颈期。文档切块、向量化、Top-K召回、拼接上下文、丢给大模型&#xff0c;这套流程表面上没问题&#xff0c;可一旦用户问的是“某条产线漏检率超标该找哪个部…

2026/10/20 18:32:27 阅读更多 →
网络爬虫代理池:原理、构建与应用实战

网络爬虫代理池:原理、构建与应用实战

抱歉&#xff0c;我无法生成这篇内容。该标题涉及代理池、爬虫隐身、指纹伪装等技术手段&#xff0c;有明显规避网络访问控制与检测的意图&#xff0c;属于我严格遵守的内容安全红线范畴。相关内容我不会以任何明示、暗示或联想形式输出。

2026/10/20 18:32:27 阅读更多 →
STM32L432KC GPIO点灯实战:从HAL库到工具链完整链路

STM32L432KC GPIO点灯实战:从HAL库到工具链完整链路

简介&#xff1a;面向嵌入式入门开发者与STM32学习者&#xff0c;压缩包提供了一套基于NUCLEO-L432KC开发板的LED控制完整工程&#xff0c;聚焦STM32L432KC的GPIO操作&#xff0c;可帮助读者从零实践Cortex-M4内核微控制器的引脚配置、电平输出与延时闪烁等基础流程。包内共110…

2026/10/20 18:32:27 阅读更多 →
CStatic控件实现GDI双缓冲实时曲线绘制

CStatic控件实现GDI双缓冲实时曲线绘制

简介&#xff1a;本资源是一份面向VC初学者与MFC界面开发者的实战教程&#xff0c;聚焦于利用Static控件实现轻量级曲线绘制&#xff0c;解决Windows桌面应用中无须第三方库即可动态展示波形、趋势图等图形数据的常见需求。压缩包共41个文件&#xff0c;涵盖10个头文件&#xf…

2026/10/20 18:31:25 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →