分享

模糊逻辑、人工智能和诗词格律

 敦行斋 2012-01-31

(一)兴头的产生
  看到楼下陈苏杭关于用人工智能判断诗文的帖子,突然激活了我泯灭了
两年多的对计算机人工智能(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…”,
而是一门数理逻辑和计算机结合的科学。远未成熟,大家努力!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多