让人工智能解数学题 可能没你想象的那么简单

导读:约1500年前的古代数学著作《孙子算经》中记载了一个有趣的问题:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”这就是今人所谓的鸡兔同笼问题。如今这个问题小学生们解决起来可能都轻而易举,但对于人工智能而言可能并非如此。在人工智能火热的今天,我们想聊聊如何让计算机具备解此类问题的能力——即数学解题。

智能答题任务

如果说一套系统就能解决所有问题的“通用人工智能”离人们的生活还很遥远,那么让人工智能系统解决具体的某一项、或某一类问题已经是一个切实可行的小目标。近几年智能解题逐渐成为人工智能的一大研究热点。随着这项研究的日益火热,人们想通过让人工智能参加“考试”,与人类选手进行公平、公开的比试,从而衡量目前人工智能系统的“智能”水平。

在全世界范围内,有多家研究机构正在从事这一方面的研究。例如日本国立情报学研究所开发了一个项目Todai Robot,他们让机器人挑战大学试题,目标是2021能够考上东京大学。艾伦人工智能研究所(Allen Institute for Artificial Intelligence) 也举办了一项比赛,来自全世界的几千个团队纷纷提交了自己的软件系统来挑战8年级的科学题目,最终,该比赛的第一名仅能达到59%的正确率。在中国,国家科技部2015年也开启了“高考机器人” 项目(863计划中的类人智能项目),让人工智能系统和全国的文科考生一样,挑战2017年高考语文、数学、文综三项科目,研究相关类人答题系统。超过30多家高校和科研机构(清华大学、中科院自动化所等)联合参与了该项目。

意料之外但又情理之中的是,目前各个人工智能系统的表现普遍在理科解题上弱于文科解题。究其原因:目前机器学习更多强调的是对记忆、计算等相关内容的储存和运用,而对于逻辑理解和推理这一模块还没有很好的解决。数学解题,作为理科考试的一部分,十分考验计算机的理解能力和推理能力,针对数学解题之上的研究成果非常有可能定义计算机智能的新层次。有鉴于此,数学解题应该也正在成为人工智能的一块重要拼图。

难点和挑战

尽管鸡兔同笼问题已经成为小学数学中的常见题型,然而该问题对于计算机来说却是一个极大的挑战。具体来讲,为了得到最终答案计算机需要通过理解题目的文字描述来得到相关数学表达,计算机需要具备逻辑推理能力来对得到的数学表达进行算术演算,计算机还需要具有一定的有关现实世界的常识从而能够约束和简化题目。

首先,数学解题需要多种层次的自然语言理解。对于一道题目的文字描述,计算机需要知道并理解其中包含的概念。举个例子,“一加一等于几”以及“小明有一个苹果和一个梨,问小明有几个水果”,同样本质是“1+1=?”的两道题,在题型概念上是一样的,表达方式却截然不同。计算机需要知道如何把以上两道问题都抽象成两个对象相加,这就涉及到所谓的自然语言理解。

事实上,抽取题目中各个概念变量的关系也十分具有难度。数学题要求的是精确,如果题目变换了一个词,变量之间的关系可能就会改变,整个解法也会不一样。比如下面两道追赶问题:

(1)两辆车同时往同一方向开,速度分别为28km/h和46km/h,问多少小时后两车相距63km?

(2)两辆车同时往相反方向开,速度分别为28km/h和46km/h,问多少小时后两车相距63km?

两道题描述很类似,但是车的方向关系导致了两题的解法大不相同。如何捕抓出这种细微的差别也是一大难点。这也是所谓的自然语言理解的一部分。

其次,在一定程度上理解文字之后,数学解题需要通过逻辑推理生成解题公式。如下图Hosseni 2014的工作,把数学题通过自然语言处理得到几个变量状态之后,需要推理得到各个变量状态之间的关系得出数学公式。在他给出的例子中,计算机通过学习能得到动词“give”代表两个状态相减。