(一)兴头的产生 看到楼下陈苏杭关于用人工智能判断诗文的帖子,突然激活了我泯灭了 两年多的对计算机人工智能(AI,artificial intelligence)的兴趣。 想谈一谈,又觉得不带上点文学的味道,怕不能在这文学论坛上立足。于是 乎,“假作真时真亦假,无为有处有还无”,自己命了这样一个题:人工智 能判断一篇文字是否是五言律诗。 不过,人工智能不是一般的穷举法加“If…Then…”计算机编程语句。 我先说点自己的认识,才能心安理得地进入正题。 (二)人类对自己的挑战 总的来说,人工智能的研究开发进度,至今还是令人失望。在一九八○ 前后,似乎有过一个高期望期,但是人们很快就冷静下来了。 首先是这个项目的复杂性,涉及到哲学、逻辑学、数学、计算机科学、 生理学、心理学,等等。从理论上讲,人类对人工智能的研究,限于数理逻 辑的不完整性,并且是一个典型的“自我引证”的逻辑循环圈(self- referring logical loops)。一九三一年,哥德尔(Kurt Godel)发表了 一篇论文,被许多人认为是二十世纪纯数理逻辑发展最有意义的事件:他向 人们展示了基本数理逻辑的不完整性(The Incompleteness Theorem)。 简单说来,就是一些数理逻辑的“公理”,例如2+2=4,是无法证明也 无法否定的。关于“自我引证”,古希腊哲学家埃皮明尼底斯(Epeminides )提出过一个著名的例子:“此言虚也”(“This statement is false” )。所谓“自我引证”就是证明者和被证明者为同一事体。霍夫斯达特 (Hofstadter)在《哥德尔、埃舍、巴赫》一书中(“Godel,Escher, Bach”)详细论述过人工智能的这两大障碍,限于篇幅,我只能点到为止。 其次,从工程实践上讲,人工智能受制于计算机资源的发展。尽管在短 短的十五年内,普通微机运算速度从几个MHz到了上千MHz,内存从几百KB 到了近百万KB,但是据说人脑的信息储存能力在10的7次方个GB的数 量级(但愿我没有记错),很明显,电脑和人脑单是“硬件”这个差距仍然 在短时间无法逾越。几年前,IBM的“深蓝”系统(注意我用的“系统” 这个词)战胜了国际象棋冠军卡尔帕若夫,人们的确振奋了一下,但随之也 清醒地看到了人工智能事业之艰巨。第一,国际象棋是一个相对简单的“完 整信息系统”(后面将进一步论及),而且“完美”的游戏数理逻辑和代数 (minimax)在五十年前就建立了,并有人不断改进。第二,IMB动用了 当今最强大的电脑系统,别的特制硬件不说,单是用64个CPU来一对一 负责棋盘上64个位置的运算,就令人咋舌。有趣的是,“深蓝”系统的软 件却是相对地简单!基本上就是平行运算、成熟的游戏代数、由特级大师现 场调控的胜数函数(scoring function)、硕大无比的旧值表(hash table,用来避免重复运算)、庞大的开局和残局数据库。 难搞并不等于放弃,越具有挑战性的项目,对人们常常越有吸引力! (三)人工智能的两大对象系统 完整信息系统是一个透明的、没有隐蔽条件的系统。围棋、象棋就是典 型的例子。棋子摆在棋盘上,双方都占有相同的原始信息(raw informa- tion)。从理论上讲,运用改进的 minimax 代数、单算子力(王=99, 皇后=9,车=5,马、象=4,兵=1)而不计位置优势的胜算函数,就 能做出永不输棋的国际象棋程序,只是这样的程序按现在最好的计算机能力 也需要计算千百年才能走出第一步棋!围棋主要是争位置优势,其胜算函数 仍然相当不成熟,连不入段的水平都难做到。 不完整信息系统是一个只公开部分信息的系统。例如桥牌,在叫牌阶段 只精确知道自己手上的牌,叫完后也只精确知道自己和明手的牌。战争模拟 是另一类典型的不完整信息系统,情报再好,也是不完全的。模糊逻辑是解 决这种体系的唯一手段。 在不少情况下,很多不完整信息系统可以通过限制条件而转换为完整信 息系统。我后面要做的判断诗词格律的“人工智能”就是这样。这里先举个 极端的例子。大家都知道战国时期孙膑的赛马决策:“下马对上马,中马对 下马,上马对中马”。如果我们做两个数理逻辑定义:再快的下马也快不过 中马,再快的中马也快不过上马,这就形成了一个完整信息系统。用简单的 minimax和几十行源码,一秒钟不到的运算,就能得出和孙膑同样的结论。 有的系统似乎是完整信息的,但由于数理逻辑处理的复杂性,也失去了 部分有用的信息,而成为“不完整信息系统”。人工智能的一个大项目“物 体识别”就是如此。作为第一步的“图形识别”,就是认清明摆在那里的一 件东西,再赋予它准确的逻辑意义,为后面的判断打下基础。对于简单的欧 基里德几何各体,对象素进行矩阵代数运算,基本上能解决。稍稍复杂一点 的,就力不从心了。美国最新的“战斧”巡航导弹,前几百公里由全球定位 系统(GPS)制导,是人们预先设置好的,谈不上人工智能,只有最后几公 里,打开了弹携摄像机,寻找具体目标,才有一点“图形识别”的意义。尽 管一般建筑物的外形是简单的几何体组合,这“战斧”还是常常“砍”偏呢! 那可以说是代表了目前最先进的“图形识别”人工智能技术,更何况更深一 层的“物体识别”?两个同样大小、漆成白色的木球和铜球,即使识别出了 是相同的球体,仍然没有解决问题的一半:虽然伽利略在比萨斜塔证明它们 作为自由落体有共同点,你把它们扔进水里,一沉一浮却是迥然不同的。海 湾战争中有一定数量的坦克毁于“友邦火力”,也可见“物体识别”人工智 能的致命性。另一方面,因为缺乏统一的数理工具,有些“图形识别”看似 复杂,做起来却很简单。一个明显的例子就是指纹甄别:你在象素矩阵里找 到分岔点(minutiae)连接起来,再比较它们的相对位置就行了。 (四)数理逻辑的精巧性 对于数理逻辑,西方人常常强调其“精巧性”(elegance)。说穿了, 所谓“精巧性”就是用简单而严密的代数方程描述逻辑。例如欧基里德几何 的逻辑,传统是用画线画圆来描述和证明。迪卡尔(Descartes)于一六一 九年十一月十号(他的日记记下了这个精确的日子),躺在战地医院床上, 看着天花板一角一只飞来飞去的苍蝇而触动灵感,发明了迪卡尔坐标系。从 那以后,不但欧基里德几何变得精巧了,非欧几何也成为可能。在计算机人 工智能的开发上,将逻辑问题用简单的代数公式来表达,已经不是选项,而 是必需! 多次提到的minimax游戏代数,就充分体现了“精巧性”,这个一切智 力游戏的逻辑基础,其核心部分,用C/C++等支持循环调用(recursive calls,即一个函数调用这个函数本身)的语言写出来,可以不超过30个 句子!这循环调用的技术本身,也是解决不可测循环深度的人工智能运算的 首选手段。一个谈不上什么人工智能的BBS程序,事先不能预料一个头帖 会有多少跟帖,编程者可以预设一个最深层次,例如1000吧,虽然足够, 但在数理逻辑上总是不稳的、不够精巧的。而循环调用却能简单地做到不依 靠任何预设常数,因为后者能自我判断深入还是中止的逻辑操作,算是浅显 的“人工智能”。 (五)诗词格律的人工智能 现在,该做自己的作业了。 判断一篇文字是否是五言律诗属于人工智能中最难命题之一的“自然语 言处理”(natural language processing)。为了自己能做,需要定义一 些条件,使之成为一个“准”完整信息系统: (1)五言律诗有四个基本句式: 仄仄平平仄 平平仄仄平 平平平仄仄 仄仄仄平平 这里不包括所谓“孤平补救”(平仄平仄平)的特例。当然,主要问题 解决后,多加几个“If … Then …”逻辑判断来处理“孤平补救”并不是 什么太难的事。 (2)严格的“粘对”法则 律诗中的奇数句叫“出句”,偶数句叫“对句”,出句和紧跟的对句组 成一“联”。按照“一三不论,二四分明”的字位,同一联中,出句和对句 的平仄要相反,上联对句和下联出句的平仄要相同。这就是“粘对”法则。 (3)没有脱简串简、缺字串字的情况。 (4)对句(或首句)的韵,属于语音判断(phonetics)的项目,不在这 里考虑。 (5)所判断的文字能准确分句,即有分句符号(delimiter),或者是标 点,或者是空位,或者是断行。这个不是必要条件,不行就数五个字算一句。 这个“准”完整信息系统定义后,就可以着手按下列步骤开发。 (1)首先在计算机建立一个汉字平仄图录(map)或者数据库,以便能迅 速有效地确定一个汉字的平仄。阴平和阳平是平声,上声和去声是仄声,这 是没有问题的。但已经在现代普通话里消失了的入声(吴系方言似乎还保留 着)属于仄声,并分别演化成了上述四声:化入上声和去声的无所谓,反正 都是仄,并入阴平和阳平则有点麻烦(例如“国”、“白”)。不过这个图 录或者数据库是一次建立,永久使用。雇一个江浙一带的人来搞,应该准确。 (2)为了“精巧”地使用逻辑代数,将五言律诗的四个基本句式用一个整 数来表示。办法之一可以这样:在32-bit操作系统中,一个整数(integer) 含有32个bits,原则上可以用来表示最多三十二个字的句子,对五言律诗是 多多有余。从最小bit开始,句子中每一个字占一个bit,平声为“0”,仄 声为“1”: 句 式 二进制 十进制 ————— ————— ——— 仄仄平平仄 10011 = 19 平平仄仄平 01100 = 12 平平平仄仄 11000 = 24 仄仄仄平平 00111 = 7 (3)将被判断的文字,按分句符号为界读入内存,按上列代数通过汉字平 仄图录或者数据库进行赋值,如果不是这四个基本句式中的任何一个,就可 以立即否定返回。句式判断肯定后,保留这一句的赋值。 (4)读入下一句并赋值,先判断新一句的句式,符合后再用 bit级逻辑代 数判断“粘对”法则。设有两个句子,赋值分别为A和B,则 “粘”成立如果(A AND 10)XOR(B AND 10)= 0, 这里“XOR”是排己或然操作,而“AND 10”的操作是施行“一三不论, 二四分明”的过滤(十进制10=二进制01010); “对”成立如果(A AND 10) XOR (B AND 10) = 10。 (5)保留最后一句的赋值,重复(4)到(5)直到文字全部读完,或者某 一步出现否定结果。 (6)如果同时纪录读入的句数,还可以判断肯定了的文字是五绝、五律、 长律,还是没有写完的作品(最后的出句没有对句)。 上面的开发过程,很容易引申到七言: 句 式 二进制 十进制 ——————— ——————— ——— 平平仄仄平平仄 1001100 = 76 仄仄平平仄仄平 0110011 = 51 仄仄平平平仄仄 1100011 = 99 平平仄仄仄平平 0011100 = 28 “粘”成立如果(A AND 42)XOR(B AND 42)= 0, “对”成立如果(A AND 42) XOR (B AND 42) = 42。 至于词,在句式方面工作量要大些,因为每个词牌有不同的句式结构, 需要建立词牌赋值(每个词牌由一串整数构成)的数据库,然后逐句判断。 但是,词没有统一的“粘对”法则,在本身的句式结构里面就包括了。 (六)最后几句话 上面判断五言律诗的人工智能,大致是可以用的,也留下了许多改进提 高的余地,例如“孤平补救”的特例。具体的源码则视编程语言有所不同。 最后,我想再说一遍:人工智能不是简单的穷举法加“If … Then…”, 而是一门数理逻辑和计算机结合的科学。远未成熟,大家努力! |
|