计算机的艺术
我想说的“计算机的艺术”跟高德纳老先生的“计算机程序设计艺术”不是一回事. 写本文的起因是前几天在cnbeta上看到一则名为用遗传算法让电脑写宋词的贴子, 觉得颇有意思. 说是来自厦门大学和浙江大学的三个学者写了篇论文“一种宋词自动生成的遗传算法及其机器实现”, 能够根据用户输入的词牌(目前仅支持十个词牌)和关键词填出一首词. 根据作者所说, 其作品“大部分是可接受的, 偶尔也有较为出色的诗作生成”. 作者的得意之作是这首“风格婉约”的“清平乐-菊”:
相逢缥缈, 窗外又拂晓. 长忆清弦弄浅笑, 只恨人间花少.
黄菊不待清尊, 相思飘落无痕. 风雨重阳又过, 登高多少黄昏.
又比如这首“风格豪放”的“西江月-饮酒”:
饮酒开怀酣畅, 洞萧笑语尊前. 欲看尽岁岁年年, 悠然轻云一片.
赏美景开新酿, 人生堪笑欢颜. 故人何处向天边, 醉里时光渐渐.
作得四平八稳, 煞有介事. 公正地说, 这个效果要比频频文不对题或者冒出“孩儿发底白霜”之类病句的稻香居作诗机强不少, 毕竟后者只是人家的业余消遣. 跟论文的结果相比, 这位“稻香老农”的优点是兼通诗词, 速度更快, 而且可以限韵. 作为例子, 我用近似的韵让“稻香老农”来一首“清平乐-菊”:
阶前父老, 春在千林表. 趁取媒人新意少, 谁可一觞欢笑.
天风清梦三更, 情关想见重城. 咫尺纵西日上, 初弦寄与先生.
尽管这是在多次尝试之后勉强选出的大致通顺的一首, 但这一首的意境实在是有些玄幻, 而且似乎与题目毫无关联. 很明显“稻香老农”的实现并没有考虑词句的意义关联. 再举一首:
清樽一笑, 弄蕊风情少. 开遍修篁斑衣换, 几处更寻芳草.
年年遗爱莲房, 不消永昼秋光. 欲雨还听叠鼓, 倦箫来此苍茫.
虽然第二句跑题到了竹子上面, 但好歹“弄蕊”, “秋光”还与标题“菊”稍有关联. 当然, 总拿“稻香老农”的随兴之作与人家的得意之作相比有失公允, 下面看看稻香居主人拿来举例的一首“忆秦娥-雕鞍”:
眼底短, 高低赤羽莺簧减. 莺簧减, 梳头晚照, 云蒸河汉.
玉山赏静远烟犬, 风声秋雨白眉剑. 白眉剑, 山川共指, 雕鞍远岸.
放在一般的武侠小说里面大致可以乱真了; 不知道经过了多少次尝试才冒出这样一首. 不过稻香居主人的宏愿是将来把这个程序给女儿当嫁妆, 现在时间还早, 期待“稻香老农”的诗艺慢慢进步.
除了汉语诗词这一中国人专有的艺术之外, 在音乐美术这些无国界的艺术形式上计算机也颇有造诣. 科学松鼠会上一篇名为算出音乐来是对计算机作曲的很好的介绍, 其中提到的1981年诞生于David Cope之手的EMI(不是那家唱片公司, 是Experiments in Musical Intelligence的缩写)尤为有趣. 这个页面上是EMI“创作”的部分曲子, 不过我用Firefox不能直接下载, 需用FTP软件下载.
本想写一篇文章详细介绍EMI的, 但发现木遥早在两个多月前(2010-3-1, 肖邦的200岁生日)就写了篇题为发达数字时代的抒情诗人的博客, 不光介绍了EMI, 还提供了肖邦和EMI所作的两首马祖卡舞曲, 供读者分辨. 想要检测自己对肖邦的熟悉程度, 不妨一试.
文章里提到了侯世达对EMI的评价(Sounds Like Bach, 译作如聆巴赫). 本来我以为这位文字游戏的老手在标题里讽刺EMI得其皮毛而缺乏情感, 但是读了全文发现自己完全猜错. 侯世达在GEB里曾表示真正的人工智能不是功能单一的“棋王”, “乐师”或者“作家”程序, 而是与人类具有同样深度的会思考的系统(侯世达相信人类智能等同于一个复杂的形式系统; 参看这里). 不过在听过EMI仿作的“肖邦风格”的马祖卡舞曲之后, 他不无沮丧地表示:
(1) Chopin (for example) is a lot shallower than I had ever thought.
(2) Music is a lot shallower than I had ever thought.
(3) The human soul/mind is a lot shallower than I had ever thought.
就我看来, 侯世达的反应似乎过于激烈了. 肖邦的曲子我听得不多, 但莫扎特的曲子我还比较熟悉. 因此, 在听EMI谱的“莫扎特风格”的三部钢琴奏鸣曲(可以从EMI的FTP上下载)时能够听出从原作中摘取的乐句(所谓“莫扎特的签名”)和明显的拼凑痕迹. 毫无疑问, 侯世达比我更清楚EMI类似于拼图游戏的算法原理, 他对肖邦的熟悉程度也很可能超过我对莫扎特的熟悉程度. 这使我对他的表态感到惊讶.
当然, 计算机的艺术只是人工智能的众多研究方向之一. 侯世达在GEB中将人工智能的研究领域划分为十一类: 机器翻译, 博弈, 数学定理证明(参看木遥的文章形式证明: 机器的光荣与人的梦想), 数学符号处理, 视觉, 听觉, 自然语言理解, 自然语言生成, 思想艺术创作, 类比思维, 学习. 虽然这一划分是三十年前的看法, 但我感觉到现在仍然适用, 大部分课题至今未能很好地解决.
若想尝试一下和人工智能聊天, 只需打开EMACS, 输入命令M-x doctor, 然后精神科大夫就开始为你服务了…
若想观看两个人工智能的对话, 只需打开EMACS, 输入命令M-x psychoanalyze-pinhead, 然后闹剧就上演了… 按Ctrl-G结束.
The Art of Unix Programming的读者一定知道这个小把戏. 也可以参看这里.
咋这么牛逼呢,博主生活得相当艺术和诗意啊~
先锋你太扯了, 发个留言还用马甲