近两年拍照答疑赛道一直备受关注,那么拍照答疑、在线答疑的技术核心究竟是哪些?学霸君研究负责人陈锐峰近日带来了他的分享。

拍照搜题和在线答疑,靠什么核心技术?

2016-06-24 14:46:15发布     来源:InfoQ    作者:陈锐锋  

  编者按:近两年拍照答疑赛道一直备受关注,那么拍照答疑、在线答疑的技术核心究竟是哪些?学霸君研究负责人陈锐峰近日带来了他的分享。

  在教育倍受重视的今天,在线教育行业也发展的如火如荼。拍照搜题、在线答疑的核心技术究竟如何?在线教育行业背后的架构又是怎样?一起来看看吧!

  从某种角度说,我们可以做一些补充性,或者说问题降解、难度降解的事情。我们把学生某种学习行为数据用一种手段,比如拍照搜题、1V1答疑,还有很多其他的模块,收集起来,进行建模。然后做成各种各样的模型,输送给另外一个大脑。在这个过程中,我们就完成了部分知识或者记忆的传输。然后我们想做的是,利用他山之石来让其他一些学生可以攻玉,这个就是学霸君要做的事情。

  今天想跟大家分享的有几点。首先简单介绍一下,我们的创业动机,然后是开始的第一步,即搜题的一些核心技术。另外,我还会讲讲1V1的实时答疑,这方面也有很多核心技术。

 

  学霸君要做一件什么事?

  首先,跟大家简单分享一下我们学霸君的简史。

  

  我们在2012年11月开始创建团队,摸索了一年,终于在2013年的10月1号怀着忐忑的心情,把第一版的拍照搜题的APP推送上线。我们是非常紧张的,因为那时候,国内还没有太多这样类型的产品可以参考。它的实际效果、搜索命中率是怎么样,都是个未知数。

  等到第一版上线的时候,我们发现,用了一大堆非常裸、非常的低效的平平手段创造出来的OCR加搜题的模块,能够达到百分之四十几的搜索命中率。我们觉得这个东西有戏。在那个之后,我们逐步迭代各种版本,到现在已经发布了三个主要的文字识别版本,大概是93%左右的搜索命中率。到目前累计搜索接近20亿次。每一道题的搜索,后面紧密连接一个电话号码,就是学生注册的时候填写的电话号码。这有什么用呢?等一下我会跟大家分享一下。

  在2015年9月1号,我们首推了实时答疑。然后第二波的征程就开始了。中国学生比较腼腆,很多时候遇到问题不敢问、不想问、不会问。老师的情况是,在二三线城市的老师的薪酬并不是特别高,但是他们有一部分空闲时间。大部分中国的家长都是望子成龙的,愿意付很多的钱投资在小孩的学习上,他自身又没有时间和能力去辅导他。这样,学生在有问题的时候,没法得到有效的解决。在这种情况下,我们就进一步衍生了一个实时答疑的产品,把相隔千山万水的老师跟学生之间的距离变成了5秒。

  我们的模式是,可以把它理解为在线教育的Uber,用手机APP去呼叫老师,呼叫服务。学生遇到题目不懂,任意一个位置的学生拿起手机来直接就拍,拍了之后,我们就会对他进行识别,会搜索,把答案推出来。甚至有解析,解析非常重要。如果学生看不懂,呼叫一下老师,老师会跟学生互动,他会用相应的策略去讲不一样的解题思路。

  我们用这个APP就做到这样一个效果:老师拿题就讲,学生不懂就问,问懂为止,真正做到今日难题今日毙。在这样的模式下,我们所推崇的就是效率的提升,这是我们在学习里面经常不能得到满足的一个比较大的问题。怎么样做到这些呢?

  拍照搜题核心技术

  接下来讲核心技术。首先,为什么要去做大量的行为数据的采集。行为数据的采集实际上是学霸君在做的真正的内容,拍照搜题、1V1答疑也只是采集数据的两种手段。以后,我们还有其他的采集手段会逐步开放出来。2012年、2013年创业初期,我们思考的一个问题是,怎么样去捕捉学生的大脑。控制论的祖师爷是威娜,他对控制系统提出两个指标,一个是可观,一个是可控。而学生的大脑是极度不可观测、极度不可控制的一个系统。那怎么样去观察学生大脑里面的一些东西,并且勾勒出能力缺陷的空间呢?

  我们讨论了很久,决定从所有的书籍开始入手。怎么样去采集书籍的内容,这个就最终导致我们花了很多精力去做拍照搜题的一个产品。有了一个idea之后,我们非常兴奋,但是马上就遇到一个坎,发现文字识别实在太难了。那时候我们还没有专门的欧西亚团队,都是技术的小白。我们所搜集到的图片都是乱七八糟的图,有非常模糊的,有各种扭曲的。这个是技术难题,但是我们必须要解决。

  我们就开辟一条跑道,这个跑道非常曲折,在这条弯路上,先后探索了印刷体、中文识别、公式识别、英文识别、表格识别、图像识别、自然语言处理、手写识别、卷面的版面分析,以及高并发的图像的处理框架,这些都构成了基础识别团队。然后相应的团队也已经组建起来。

  文字识别上,第一步要做的就是单个文字的识别。我们用的是深度学习的技术,从20亿的虚拟字库里面去进行训练,最终的单字识别率现在是99.5%。考虑到里面有很多是模糊字,所以在清晰的情况下,基本上就是四个九到五个九左右级别的精度。这张图显示的是基本的技术结构。模拟神经网络,有若干个输入,输入之后有正向的应急信号,也有正向的增强信号,也有负向的抑制信号,所有信号叠加之后,有综合的输出。然后我们把所有的网络用大概几千万或者是几百万个单元组合在一起。

  分享一个题目。对于一张图片,我们切割出来,一个字一个字,每个字首先做一次卷集,把它某种方向的一个特征提取出来。第二步做一次下采样,把它变成一个更小的一个图。第三步再做一次卷集,然后变成看不太清楚,但是反映了一些文字的高层特征的图。第四步再做一次下采样,会变成一个更小的图,然后做一个全连接,这是一个网络结构。最终的输出实际上是对所有字的自信度的打分。比如说在这个结果里面,层次是91%的进度,那么这个图片对应的就是层的一个输出。

  

  然后我们还克服了若干其他的问题。现在完成了这样的一个场景,就是我们可以把人眼基本上看不太清楚的东西,变成可以看见的东西。像这张图里面,现在就可以把它浮现到可读可识别这样一个阶段,这也是围绕着图像处理的一些手段。还有手写识别,在拍题搜题里面,它的出现概率不会很多,2%左右,但是这一块的技术,对1V1答疑是一个基础的技术。

  先看一个结果。这是我们在收集拍摄、拍照搜题出来的一个结果,里面的正确率基本上还可以,但是有一个错误,这个错误实际上导致了,数学引擎技术没法完全波接这样一个结果。如果这一套,这个字也识别对了,负一识别为负一的话,这道题在从数学引擎上是可解的。我们会进入另外一个环节,就是对题目画像。我们会把所有提干进行一个拆解,然后把一些已知因素跟未知因素处理出来,做数学、语法素的应用,最终把答案推理出来。

  

  说了那么多,我来说一下应用。在1V1实时答疑里面,假设这样一个场景,老师在讲题的时候,上面会不断显示,最重要的是类人脑的,或者没有那么智能,而是一个某种程度上会思考的引擎,首先会分析老师的笔记。老师在上面画了一张图,我们会先做图形的识别,它是一个立方体,有哪些虚线,哪些实线?

  接下来会分析。比如说在这里面它写了几何法,后面写了一个向量法,几何法跟向量法都可以触发相应的知识图谱,这个知识图谱是围绕着题库建立起来的另外一个知识体系。或者他写了一条式子,在这种情况下,直接就把式子算出来了。

  老师在讲课的时候,他不是孤身作战,他所讲的内容,得到我们的知识体系的支撑。然后会分析他需要什么,不断为他联动一些要讲的内容。还有更重要的是,所有触发在分析引擎的时候,我们会把数据收集下来,这个才是对我们最有价值的,老师怎么讲、用了哪些素材,最终会进入数据库。

  第四个,是智能版面分析引擎。接下去我们要做的事情会更有意思。所有的卷子、书籍,首先可以做校正,然后会做智能化的切割,一道题一道题切割出来。如果这道题是可以解的,那我们给它解出来,如果这道题是数据库有的,我们从数据库搜索出来。每道题的频次、考分、重要性全部分析出来。然后所有学习数据,就可以帮助学生去更精准投放时间,避免时间浪费。我们通过图像的切片,可以把整个任务切成一小块一小块,然后分发给图像的云处理机群,做并发处理,最后把它拼接成综合的结果,发送给相应的处理终端。这个是我们云的架构。

  

  1V1实时答疑核心技术

  1V1实时答疑实际上可以类比为一个Uber打车的模式。我们把它说成是滴滴叫老师。这个模式一个核心技术,就是让最合适的老师给一个学生讲题。我们的老师不一定都是国家级优秀老师,有很多老师在二三线城市耕耘了很多年,有不错的讲课经验,但是还没有达到最顶级老师的水平。通过这样的机制,让老师不断去提升在某个垂直知识点的熟练程度,不断优化,不断优化,不断优化。这个老师在某个曲折点上,他能讲出比一级老师更娴熟的内容,这是我们的一个核心理念。

  在调度上,我们有各种各样的挑战。首先老师的上线时间是不确定的,每一个老师上传的板块不一致,各地的考纲不同,讲题方式也不同。学生是随机提问的,对价格的敏感程度不一样,一线城市可能愿意多花点钱,二线城市可能对比较优惠的策略更感兴趣。对于获得的结果期待也不同。

  所以,我们对各种策略需要有一个智能化的控制。然后大家看到这个系统是简单的写照。如果一个学生有问题,发起请求,然后进入调度中心,这个调度中心会在问题空间里面选取若干个老师,然后发送,最后老师接单,就是这样一个流程。

  隐藏的技术就由这个架构体现。最底层的是知识模型,包括知识导航、知识图谱。往上一层,包括学生画像跟老师画像两块的用户画像,当然家长画像也是非常重要的。还有第三个,往上走就是预测算法。因为供需关系必须平衡,不平衡会导致整个系统崩溃,所以这块也是非常重要的。最上面是偏运筹学方面的工作,需要对老师的需求跟供应进行建模,然后做最优化、智能的调度。

  

  现在我们已经收集了接近20亿次的学生提问、几千万左右的题目。我们使用自然语言理解,还有深度学习,对这些题目跟知识做梳理,然后把它整理成树状的结构。比如说高中数学,现在有七大板块,22个章节,550个知识点,三千多个题型,根据各地的考纲的不同,会有不同的版本,然后这些版本会导致问题更细致化。

  但是整体的思想是,建成一个树状结构的导航体系,可以把它类比为Uber系统的GPS,就用这个去分类各种题目、学生画像等。接下来看一下怎么去用这个东西。第一个问题是,学生画像是非常有意思的问题,学生是千人千面,没有两个学生是完全一样的,但是我们通过某种统计规律可以抽象出一些共性,然后就可以用来做很多事情。

  这张图给大家看一下我们怎么去分析学生的共性,怎么去用这种拍照搜题数据。每个学生在系统里面呈现出很多的数据,这个数据就是我们非常大的财富,然后不断去挖掘里面隐含的信息。首先用刚才说的那个GPS系统,就是知识的建模,把每一个题目的知识点抽样出来,变成一个输入,接上时间轴,把它扔进一个深度神经网络,这时候就可以抽取学生的各种特征。然后接下去,我们可以做一些分析。

  

  举个例子,可以看到学生的行为有个时间轴。学生的行为实际上是动态变化的,不是固定的,今天学代数,明天学几何,会不断变化,学生所问的问题,或者说需求的问题不断变迁。那在这种情况下,有一个现象是可以利用的,就是学生之间的共性。比如说A学生,问了若干系列的问题,B学生问了若干系列的问题,后来来了个C学生,我们发现A学生B学生的共性非常强,那C学生接下去想问的问题或想了解的内容,可以通过前面A学生B学生所形成的聚集去预测,这个对于分配老师、调度老师的策略上是非常有帮助的。

  

  老师的画像跟学生的画像是完全不一样的两个问题。老师没有学习阶段的时间轴,很多老师各个年级都能讲,但是他所讲程度不太一样。为了对老师进行适当的分类,我们用了这样的策略,就是竞争神经网络。我们把所有的老师,大概有几千到接近一万老师,映射到一张地图,这是数据计算出来的地图,用类似于商级来区分不同老师的分类,每种颜色代表着老师的一个类,这个只是庞大地图里面的一小块。

  比如,绿色代表着老师会讲立体几何,红色代表会讲立方体这一块,等等。对所有老师建模之后,注册一个新的老师,他讲若干道题之后,开始对这个老师进行定位。比如,他讲了立体几何,可能还讲了其他一些题,但是他立体几何比较擅长,那最终会把他定位到这一个区域里面,然后不断让他讲这块内容。这个就是我们老师画像的应用,这体现了需求和供应两方面。

  

  需求供应,我们需要去量化。接下一个核心技术就是需要去预测,每一个知识点、每一个知识板块,有多少的供应量,有多少的需求量,可以去设计老师的人源池的分配。每个地区供需关系不太一样,这导致一个非常有意思的数学问题,就是庞大数据集多时序的一个预测。每个老师都有一个相应讲题的频次、数量等,几个月下来,基本上可以估出它的模式,然后就可以对每个老师的上线时间进行预测,对讲题的供应能力进行预测。

  

  最后,根据历史结果来估算老师未来的服务能力,然后可以对不同老师的能力进行排序,有需求的时候,会根据这种排序去进行动态的调度。这里面就有启发性搜索的算法。接下来我们就讲精益工程里面经常用的库存模型,把它用到1V1时答疑里面去,这个模型叫做Make toOrder,就是按需求去生产。

  生产系统里面基本上有三个主要角色。首先是协调管理和调度的人员,我们现在是用95%的自动化加5%的人工去进行协调管理,其目的就是为了调整老师跟学生之间的匹配关系。老师答疑的供应,可类比为库存,整个系统不断生产,老师会不断出来,如果库存积压的话,有库存成本。

  学生答疑的需求,可类比为市场需求,如果市场的需求不能得到满足的话,那收入就会流失,如果需求太少的话,整个系统也跑不起来。这样的系统建立一个数学模型,X代表着库存大小,γ 1、γ 2代表着老师到来的频次、学生到来的频次。这就是一个数学问题了。

  

  我们把它建成一个Markov过程,这是实实在在放在后台调度的一个模块。然后可以把Markov过程想象成为状态机,有不同的状态,每个状态可以互相跳变,但是这个跳变有一定的概率。我们可以去模拟各种各样稀奇古怪的分布,老师的分布不一定是正态分布或者指数分布那样工正,可能是双峰值、后尾的等。为了预测比较好的准确度,用了非常特殊的一个分布区域对它进行建模。

  建模之后,我们就可以做队列的模型。老师进来,服从这样一个Markov过程,学生到来,服从另外一个Markov过程,它的参数是不一样的。学生过来之后,如果有老师在等待队列里面,他们就可以匹配,形成服务的一个对接,这就是一个好的开始。有了刚才Markov过程,接下去就是列出一大堆平衡方程,总共大概有几十万到一百万的平衡方程,基本上是描述各种状态之间的跳变。

  然后再加归一化条件,所有的概率的核等于1。接下去就可以解线性方程,最终得到一个非常有意思的结果,就是队列的一个分布、老师的概率,队列里面有两个老师的概率,有三个老师的概率,再细化一点,就是队列里面辅导立体几何的老师在等待的概率、辅导函数的五个老师在等待的概率。就可以帮我们推导运筹学的收益优化的模型。

  

  这是非常简单的版本,它主要包括几个模块。一个是答疑总量,这个是正向的,答疑总量越大,我们收益率越高,还有答疑评分越高的话,基本上来说收益会更好。一个是提问流失,是负向的,如果流失的提问,我们效益要紧逼。老师闲置也是负向的,这个也会打击老师的积极性,然后再减去其他的成本,实际上还有很多很多其他的因素。

  老师的实际可调配的量是小于最大的供给量的,即,最大不可能超过注册老师的供应量。然后就有一个非常有意思的调度策略,实际上相当于滴滴司机排班这样的策略,但是我们对老师有一定的干预能力。我们会从需求上预测,大概在某个时间点需要多少老师,把它切为若干时间片,每个时间片需要多少老师。最后,会向老师推送一些信息,这个时间点你上线,有更多的单子,那老师就会来。这些信息最终归结为最优化的问题,可以用很多的算法。

  

  简言之,我们现在用了遗传算法在做在线的优化。遗传算法简单时显,实际上就是通过不断的迭代、计算,把一些解不断优化,X1、X2、X3到X8就代表着每一个时间的一个片断的一个排单量,然后通过两种算子,一种是交叉,一种是编译,不断去形成更优的排班。迭代很多次计算之后,总体的收益函数会不断上升,直到比较好的结果。这个就是我们最终的排班策略。

  为什么排班策略很重要,为什么调度策略非常重要?非常简单,这是一个速度决定着生死的市场,如果没法在很短的时间内聚集足够有用的数据量,我们是完不成数据采集的最终目标的。如果爬坡速度够快,那可以有足够的数据量,去推进下一步的业务,把数据全部用起来,可以做很多事情。如果没有的话,基本上到后面就是会走向消亡,这个是非常残酷的一个现实。

  

  学霸君在收集20亿左右拍照搜题的题目之后,接下去的目标是一千万、非常高质量的、1V1的视频样本。1V1视频样本是非常特殊的数据,它只有一个人讲、一个人问,然后只针对一道题。像手机讲话,它非常垂直、非常精准,有大量的数据在围绕它做一个标注,比如有图库做支撑,有图谱知识做支撑,拿这些东西去做语音的训练也好,去做知识的建模也好,都是非常有价值的。

  最后能够拿到现在国内还没有人拥有的垂直领域的教学模型。我们就把它放到计算系统里面。这个计算系统分为两层。第一层是CPU跟GPU计算机群,现在很多的最优化机器学习都放在这样机群里面去算。但是机器不是万能的。我们搭建了人工自有系团队,去标注各种各样的数据,然后综合起来。我们会不断去提炼里面的模型。

  数据库主要有三个,一是题库、学生库、老师库,二是更高层的拍题的一些记录,三是1V1讲题记录,这是更高层的数据记录。我们的数据挖掘工程师,不断去做各种各样的计算流,把它扔到这个平台里,从各个侧面去挖这样的数据,比如说哪些题是更高频的、这个学生需要问什么问题、这个学生以后三个月需要学习什么,这是知识性学习的问题,等等。还有一些报表的结果。

  

  小结

  最后总结一下,学霸君是做什么的?我们是一家做教育行为数据采集的公司,采集的手段有图像识别、手写识别、工人识别、文档分析,还有音视频数据的采集,还有识别。这是第一步。第二步,就是做分析。我们用机器学习和深度学习去做各种题目的建模、人物的建模,还有整个调度模式的建模,然后把它用到体系里面,不断推高数据采集的速度。最终,我们把它用在培训上,会跟其他人合作,或者是会有一些相应的业务。

  实际上我们是开数据挖掘机的。

  陈锐锋,新加坡国立大学运筹学博士,研究方向为大规模生产资源调度、供应链库存协调、运输系统的建模、生产系统的动态控制。 2010年回国加入东南融通,任研发中心高级研发工程师、博士后,从事金融IT及风险模型研发,负责业务流程和金融票据业务解决方案。 2012年加入厦门恒隆兴公司、重庆恒隆兴公司,任技术专家、部门经理。 2013年投身学霸君,担任研究负责人职务,组建智能计算团队,主攻文字识别、图像算法和数据挖掘方向。带领团队在国内率先开创同时适应自然场景、复杂版式图像拍照识别引擎,为搜题及1V1实时答疑业务奠定了技术基础。同时,将基于深度学习的文本挖掘技术引入产品,实现高效而智能化的知识导航。