揭秘自适应学习背后的原理(第二集)

  本期导读:贾潇一

  本期美编:刘华伟

  

  “

  大家好,我是胡天硕。

  在上一集中我为大家解释了为什么要做自适应学习以及自适应学习的系统架构应该是什么样的。今天是自适应学习系列节目的第二集,我将深入一步为你介绍各个等级自适应学习的算法原理,而在下一集中会为你介绍自适应学习的产品设计与商业模式。

  每当大家聊起AI与汽车的时候,第一个想到的是无人驾驶技术。每当大家聊起AI与教育的时候,第一个往往想到的则是自适应学习。然而自适应学习就像无人驾驶一样,分为不同的等级。

  事实上,较低等级也就是基于难度判断学习成果的自适应学习几乎与AI无关,而最高等级也就是基于NLP推理引擎的自适应学习则可以拿到任何一道学科题目就能用多种策略得到正确答案,并且每它看到别人的答案时,还能判断答案是否正确。然而问题在于如果想做到这一步就得越细致,越细致研发过程就越困难,因此目前还没有一家公司能够完全做出来。今天我将会带大家从低级到高级,把我自己整理了三天两夜的自适应学习心得体会循序渐的为大家展开,希望对你思考如何做到最高等级的自适应学习有所启发。

  欢迎大家关注公众号星河融快 (ID:rongkuai888),《胡说在线教育》专栏将持续与你分享“有趣的”在线教育干货。欢迎你在下方留言和我们分享你的观点,自荐或推荐优质产业互联网项目,同时更欢迎你来上地18号和我们聊聊。

  ”

  以下,供你参考。

  Level 0

  基于纯人工的自适应学习

  如果想要做一款自适应学习的产品,我们不妨先假设电脑是完全没有能力判断出学生的学习情况和能力水平,而由老师来做判断,判断之后,再交给电脑来推送相应的课程。

  

  举例1:英语作文批改。

  用户小胡在网站上录入了自己的托福作文,提交后,作文被送到一个队列里等待人工批注。

  老师收到了作文后,对小胡作文的各个部分进行了标注,勾画出哪些单词拼错了,用错了,哪些固定搭配错了,哪些语法有问题,文章结构有什么问题。

  批改完毕后,学生会收到老师的评价和系统自动推送出的单词、语法和结构课程。从算法上来讲,这个逻辑非常简单,总共会有不同的几种错误类型和对应的课程,只要学生在作文里出现某种错误,给他自动自动推送这类课程就行了。

  举例2:一对一几何课。

  老师在一对一地个性化辅导小胡同学,这时候给出一道几何题目让他完成。小胡通过手写的方式录入了自己的答案,但是中间有几个过程问题。老师用手写批改后,在直播过程中的后台记录了学生的知识漏洞,课后生成的学习报告中会包括学生的知识点掌握情况、出现的错题、推荐做的同类题目。甚至,在直播的过程中,老师出什么题目,完全可以不由老师自己决定,而是由系统自动推送,老师每次只负责给出评价,每个学生到底出现了哪些知识漏洞?是否要出一个更难的挑战?

  从算法上来讲,这个逻辑也非常简单,一道几何题出现的错误类型有限,可以为每道题目找难度更低和更高的几种题目,然后由老师最终决定是加大难度、减少难度、还是到下一个学习环节。

  接下来我们让电脑来判断学生的对错。

  Level 1

  基于简单规则的自适应学习

  我们只要在Level 0的基础上加入简单的条件判断,就可以实现最简单的自适应学习算法。基于规则的自适应学习,其实本质是决策树,适用场景不是去判断学生是否掌握某种知识,而是直接去判断学生的某种行为是不是正确的。

  

  举例1:汽车模拟驾驶

  学生闯红灯了,扣分,然后告诉学生,你要注意红绿灯。

  学生左转忘打转向灯了,扣分,然后告诉学生,你要记得打转向灯。

  学生超速了,扣分,然后告诉学生,你要注意自己行驶的速度。

  由于是电脑模拟驾驶,判断语句如上图设计起来并不复杂。这种情况不仅适用于开车、也适用于开飞机、开挖掘机等各种计算机可以模拟的情景。

  举例2:智能健身矫正

  

  通过可穿戴或者视频式动作捕捉设备,系统能够分析学生在做深蹲、硬拉、平板支撑等一系列动作时各个关节的角度。

  如果在学生完成动作的过程中有角度超出规定值的时候,系统就提醒学生:“你硬拉时背部不够收紧,臀部不够翘起。”

  动作捕捉的技术和硬件虽然当前还未普及,但是实际上,判断姿态是否正确的算法并不是那么困难。这种情况,不仅适用于健身,还有篮球、足球等各种球类、舞蹈、甚至器乐的基本功学习。

  实际上学生的掌握程度,未必是那么黑白分明,因此我们就需要在简单的决策树规则之上建立更好的自适应学习算法。

  Level 2

  基于难度等级的自适应学习

  刚才我们在Level 1级的自适应学习里,通过学生的行为直接指出学生的问题。再拿开车举例,同样两个人既不闯红灯,又不超速,但依然可能让乘车人获得完全不同的体验——所谓菜鸟司机和老司机的区别。

  如果我们不去规定,学生什么具体行为错了就推送什么相应课程,而是设计一套难度递增的课程,当学生完成得好就加大挑战难度,当学生完成的有问题时,就相应减少难度。这就是基于难度等级的自适应学习。

  

  举例1:英语分级阅读

  

  一个学生是否能看懂一篇文章,背后其实有很多原因。一个很难的单词,靠上下文,反而可以猜测出来。几个简单的单词,组合成短语和搭配,反而意思完全变了。甚至如果是因为专业性问题,可能你都能看得懂单词、短语、语法,但依然不明白这句话究竟在说什么。

  所以国外提出了所谓的readability(可读性)的概念,儿童出版社将书籍按照大概的年龄段划分。

  教学的时候,虽然每一个孩子有他的真实年龄,但是可以通过阅读测试找到最合适他读的年龄段。一开始当书比较少的时候,可以由教育专家和老师来评定书籍的可读性,但随着要标注的书籍的增加,这件事情就必须由算法来完成。

  国外readability的算法在wikipedia(https://en.wikipedia.org/wiki/Readability)有讲述,以常见的Flesch-Kincaid等级为例,单词的平均音节数越多,段落里句子的长度越长,就认为文章越难读懂。例如高考听力的难度最难也就在10年级,高考阅读在12年级左右,托福雅思的阅读题可能会有18-19年级的压轴题。注意像Flesch-Kincaid这类把句子长度考虑进去的readability算法,对于缺乏标点符号的歌词或诗歌,还有标点符号过于频繁的对话型文章,都会有较大偏差,需要进行修正。

  举例2:王者荣耀的天梯系统

  

  在这里我们举一个非常有意思的学习例子,那就是手机游戏。

  像王者荣耀这类MOBA手机游戏,并不是自己去设计不同难度的关卡让用户进阶学习而是采用了天梯的方式,让水平近似的人在相同的段位PK,变相地提供了一个进阶的台阶。

  在排位赛的个天梯系统里,赢得多了就会遇到更强的对手,输得多了,就会遇到更弱的对手。虽然最终比赛的输赢不仅和个人的操作、意识和配合有关,而且还跟自己的队友、选择的英雄组合和运气有关。但是从整体来讲,差一个大的段位(例如钻石和铂金),水平上一定会有明显的差距。我就不说自己是什么段位了~

  融快注释:MOBA(Multiplayer Online Battle Arena)中文译为多人在线战术竞技游戏。这类游戏的玩法是:在战斗中一般需要购买装备,玩家通常被分为两队,两队在分散的游戏地图中互相竞争,这类游戏通常无需操作《星际争霸》等游戏中常见的建筑群、资源、训练兵种等组织单位,玩家只控制自己所选的角色。

  elo算法在围棋、国际象棋领域是国际上评估水平高低的重要算法。与天梯系统不同,输赢的得分并不是固定的,而是和你竞争对手的差异有关,如果你赢了水平比你强的人,你提的分数多,那么他掉的分数多;如果你输了水平比你强的人,你掉的分数少,而他提的分数也少。感兴趣的可以参考这里(https://en.wikipedia.org/wiki/Elo_rating_system)

  基于难度的自适应学习算法的最大缺点是认为学生的学科掌握度是一个值——有点像把学生分为重点班、普通班的感觉——而实际上,更多时候大家关注的是学科中细颗粒度知识点的掌握情况。

  Level 3

  基于知识点网络和概率模型的自适应学习

  Level 2 只有难度等级的概念,现在我们要引入知识图谱的概念了。我们实际上是没有办法直接去测量学生的知识点到底掌握的如何,我们只能倒过来从学生做题的情况,推断出知识点的掌握程度。

  后面可能会涉及到一些数学公式,前方烧脑,我们分为多个部分来讲。

  

  3.1 相同难度,单一知识点的题目

  我们先解释一下,为什么学生的知识点要用概率模型来算。学生做对或做错题最简单模型就是翻一枚不均衡的硬币,看正面朝上的分布。

  假如学生知识点的掌握度为p,p是0~1之间的一个数,意味着每做1道题,有p的概率做对。那么学生做了n道题,得零分的概率为(1-p)的n次方,得满分的概率是p的n次方,他最有可能做对的题目数是n*p。

  问题是,没有人知道p为多少,我们倒过来只知道n道题里,有m道做对了。当n趋近于无穷的时候,我们几乎可以肯定p=m/n。但在现实中,别说无穷道题,同一个知识点的题目让学生做20遍,学生就会受不了了。所以为了追求实用,我们必须牺牲一部分精度,我们可以认为n=0的时候,也就是我们对学生一无所知的时候,p应该是一个0~1的均匀分布,但是随着n的增加,p的分布应该如何改变呢?

  实际上数学家们早已经告诉我们了,扔不均匀硬币的二项式分布的共轭先验密度函数(conjugate prior probability distribution)是beta分布(其多维版本叫做Dirichlet分布)。具体的公式和推导参见维基百科((https://en.wikipedia.org/wiki/Beta_distribution))。这里背后核心的思想是,同样是100%的正确率,同样难度的题,张三做了三道,李四做了20道,由于样本容量的不同,会导致知识点掌握度的置信因子不同。

  3.2 不同难度,相同知识点的题目

  接下来我们要考虑到,真实的题型,并不是难度都一样,甚至说把难度当一个衡量指标是远远不够的。

  举个例子:

  题目1(填空):1234*56789等于多少?

  题目2(判断):一个天体为水的密度,重量为1亿亿吨,请问这个天体是否是一个黑洞?

  前者其实难度是比后者小的,但是,由于前面是填空题,后面是判断题,其实后面的题目有50%的蒙对概率。为了能够对题目更好地建模,我们引入IRT(Item-response-theory)模型。

  

  以上图是三个参数版本的IRT,其中a为区分度,b为难度,c为猜测可能性。

  横纵标里,值越高代表学生能力越强。

  c=0.25,意味着哪怕最差的学生都有25%的可能性做对,所以这道题目最有可能是一道4选1的单选题。

  b=0.0代表,这道题目的难度正好适中,如果b比较大,代表能够把特别优秀的学生和普通学生区分开,如果b比较小,代表这是一道送分题,如果这还做不对,大概是平时没有认真学习。

  区分度a,可以认为当区分度特别大时,这道题目是要么肯定就会,要么就是彻底不会,不存在中间地带。

  IRT模型的初始化可以用老师来标注,但是后期只有通过足够多的真实做题数据才能反映出题目的真实难度。通常来讲,一道题目被1000个不同的学生解答后,参数就可以基本确定。因为当这道题被10000个学生做过后,会基本收敛,再来新的学生,参数变化就会非常小。

  在IRT的基础上,又出现了BKT,PFA还有基于深度学习的DKT等一系列算法,不管算法怎么演进,其核心目的在于通过做题情况估算学生真是的知识点掌握度。

  然而,刚才有一个重要的点被我们略过了,那就是实际的题目,并不是只有单一知识点,而往往可能同时对应多个知识点。这时候我们就要引入q矩阵的概念。

  3.3 一题多个知识点对应的情况

  

  q矩阵就是一个题目与知识点对应的矩阵,其中的值既可以是离散的0或1,也可以是连续的0~1之间的概率。

  Level 3级自适应学习的最大工作量之一就在于q矩阵的搭建,尤其是当知识点的颗粒度比较细的时候,所需要投入的人工成本非常大,就光初中数学一个学科,为百万道题目打标签,没有大几百万的经费是几乎不可能完成的。

  而就算在收到足够多的数据后,可以对q矩阵进行演化,做知识点的拆分和合并,但是在没有任何初始化的q矩阵,光有数据几乎是不可能空手套白狼变出一个知识图谱的。

  那么到底应该怎样给题目打标签呢?在这个过程中一定要抛开狭义课本上的知识点,而采用广义知识点。

  所谓广义知识点就是除了章节以外,还应该包括策略、考察点、技巧、知识误区、甚至还有学生是否马虎大意,应用题的阅读理解能力如何等等。

  好的系统,可能会给选择题的不同选项对应不同的知识点,而填空题的情况还会更加复杂。

  3.4 知识点相互关联形成知识图谱

  知识点之间并不是孤立的。当学生做题之后,除了要更新题目所对应的知识点,还要以降低置信度+传播到相关知识点。这部分的算法并不复杂,真正难的是建立知识图谱。

  知识点的关系,远比课本或教参中呈现的章节树复杂的多。

  章节树的结构,仅仅是做了包含关系,而且由于教材版本的不同,实际上会出现一个知识图谱与不同版本教材章节的映射网络。

  高中学习阶段,有的知识点会一次次地出现,然而每次地出现都是把过去的定义,特性推倒重来,可是到了高三总复习的时候,又要融会贯通。这些同类知识点,需要关联起来。很多团队做了知识的先后依存关系,但是他们忽略了实际上有的时候多学的东西,不仅没有强化过去的知识,反而有可能会导致困惑,让过去的知识的掌握程度降低(例如英语里学完compose之后又学了comprise)。

  3.5 考虑到时间的影响

  一个学生做了100道知识点一样的题目,最终对了50道,这真的代表学生水平是0.5吗?

  实际上很有可能,前20道题,由于学生什么都不会,只对了2-3道,而后20道题,学生已经基本掌握了,可能一道都没错。

  我们要以发展的眼光去看待学生的变化,这就意味着,我们需要“遗忘”那些时间久远的事情。也就是我们需要一个滑动的窗口(sliding window),越遥远的行为数据权重越低。

  还有一个时间的影响就是记性,随着时间的推移,学生遗忘的比例会越来越高。而最佳的复习时间,就是学生恰好要遗忘,却没有忘记的时候。

  自适应的复习算法,开源软件anki采用了supermemo的早期spaced repeatition算法,已经能够满足绝大多数的需求,也是多数背单词软件所采纳的算法。

  3.5 这节终于讲完了,可以举例了

  举例1:数学的填空题,0.0035的科学计数法

  比如学生回答:-0.35*10的3次方。

  那么最简单的办法是,系统评估这道题是一道简单题,说学生你的科学计数法基本功不行。但实际上如果是一名优秀的数学老师,他会发现,学生搞错了多个事情:

  一、科学计数法首位应该非零的数字。

  二、负号的位置学生搞错了。

  三、学生估计记得老师说过,从小数点往后数几位,指数应该放多少,而没有真正理解指数上的坐标的意思。

  举例2:英语开放作文的发音和语法

  发音的知识图谱比较简单,bit和bite混淆发音,那么lite和light混淆的可能性也非常大。甚至bed和bead都有可能因为元音长短因分不清楚而错误。这个在学生边读的过程中,就可以逐渐收集问题,并且推送相应课程。

  语法的知识图谱就比较复杂了,同样是动词的过去式,规则动词就包括多种情况,不规则动词几乎每一个都构成自己一个知识点,过去式与过去分词搞混了又是另外一种情况。

  同样是冠词,a后面是元音是一种情况,但a user是一种特例,an hour又是另一种特例,如果后面接的是地理位置,则更加混乱(the USA, 但不是the China)。英语的教研工作量一点都不比数学简单。

  自适应做到这个地步,依然存在两大问题,一个问题是人工教研工作量庞大,做得越细越好,越困难。另一个问题是,只能解决客观题,对于证明题和简答题,完全没有办法做。而只有能够在解题步骤里做自适应,才是真正的终极解决办法。

  Level 4

  基于NLP和推理引擎的自适应学习

  真正的AI级别的自适应学习,说的就是Level 4。

  如果拿自动驾驶技术来对比,这就是你可以撒手,不摸方向盘、不看路面、不听导航在汽车里睡觉,汽车就会安全送你到你的指定位置。

  达到这个水平的自适应学习系统,可以做到拿到任何一道学科题目,就可以用多种策略得到正确答案(也就是最近高考机器人在比拼的事情),并且看到别人的答案时,它还能判断答案是否正确。

  

  一个简单粗暴的想法是略过推理引擎,直接拿着几百万道题目做char-rnn,但很显然这个是不work的。

  可以认为答案就是如同程序代码一样的是有内在逻辑的,然而目前char-rnn是根本没有能力生成任何有真实意义的代码,最多只能生成一些格式上看起来正确,但是没有任何含义的代码。

  这件事情如果要做成,必须死磕推理逻辑。毕竟一道题目里,学生可能会出现的错误类型实在是太多了。例如:

  推导错误

  计算错误

  关键步骤顺序不对

  推导正确但原因不对

  多次计算错误,但最终答案凑巧对了

  用结论来“反证”结论

  引入原本不存在的条件

  冗余步骤

  所以,整个过程应该是:

  将题目的题干抽取成机器能读懂的条件

  判断题目没有逻辑错误,确实有解(小红有三个苹果,小明有四个,请问小红多大了)

  得出标准答案

  如果学生是手写的答案,先做图像识别

  如果是选择,填空,直接对比学生的答案

  如果是大题,验证学生的推理过程是否完备,正确

  判断学生出错的环节,不告诉完整答案,而只是给学生一个点拨性的提示

  对比当下的扫题软件,学生哪里不会,去哪里抄答案。而这一的自适应学习系统,则更是,哪里卡住了,算错了,哪里小小地提醒一下。这种教学方法才是真正帮助学生成长和前进。

  举例1:英语作文AI批改

  回到了Level 0的例子了,只不过再也不需要老师的参与,AI直接对词汇、短语、句式、语法、逻辑性、结构和文笔优美度给出了打分和修改建议。目前的AI对于前面几点(尤其国外的Grammarly公司)做得还可以,但是对于结构,逻辑,文笔,则是完全做不到。

  举例2:一对一几何课

  还是Level 0的例子,老师这回是真的面临失业了,全中国的每一个学生都配备了一个最厉害的AI老师,他能够针对性地解决你的学习问题,你做题并不需要在电脑上做,依然是笔和纸,但是他随时会提醒提示你,学习的过程由过去的很长时间才有反馈,变成了像游戏一样,很快就有反馈和进步。

  结论,一旦出现了Level 4级别的自适应学习,从Level 0到Level 3级别的都会收到巨大的颠覆,毕竟都能自动驾驶了,自然就不需要单独的自动泊车技术。然而Level 4级别的难度非常高,无论是国内还是国际上都是在探索阶段。说实在,我这里没有展开说算法,因为我也不知道这个算法该怎么做。

  下期预告:

  接下来是自适应三期连载的最终完结篇,我会与大家分享自适应学习的产品模式和商业模式。敬请期待!

  我是胡天硕,我们下期见。