这星期德克萨斯大学奥斯汀分校的 Raymond Mooney 教授来组里作了一场研讨会。曹同学请来了这样一位大神,组里的老师和学生就像饿狼扑食一样瓜分了和他见面的时间。我正忙着修改文章,只是去听了 talk。说不定当年拒我的套词和还有发拒信,也有他的功劳嘞。
他主要是讲,如何从短视频里生成一句话来描述它。输入是一帧帧的画面,待到全部输入完了,信息已经保存在一个向量里头。然后,再一个单词一个单词地输出成句子。在决定输出一个单词的时候,所用的信息就是上一个输出的单词,和刚才所说的表示视频内容的向量。
他先讲了一下以往人们教电脑“看图说话”的方法。输入一张静态的图片,先由一些计算机视觉系统识别出人啊、马路啊、各种物件,然后把这些东西交给语言模型。语言模型根据这些名词,找出它们最可能的组合方式。假如画面中有个人,后面跟着部摄像机。电脑一组合,就生成出“人扛着摄像机”这样的句子来。其实它根本没有看出“扛着”;这恐怕只能叫计算机幻觉了(笑)。这样做效果倒是不错,能忽悠很多人觉得有那么点智能。
他的系统当然要克服这个毛病。视频和句子的训练数据可以从给视障人士收听的电影解说音轨里提取,或是在亚马逊上请人写,但终究是不够多。所以他先用静态图片识别的数据训练了,再拿视频去练。他能证实,如果打乱帧的次序,效果就不那么好了;说明电脑有效利用了动态的画面。
这给我一样启发。不同于先用计算机视觉识别出物件的方法,这直接把一帧帧画面(可能不是像素,而是处理好的视觉特征,每十帧输入一帧)输进去,信息量很大,帧和帧之间又有很多重复,必须要有一个信息筛选和识别重复部分的过程。之前听说过的 encoder—decoder 模型,都是输入什么信息就输出什么,如机器翻译,基本不(希望)存在信息损失。而且这里要用到连贯性,这对于应用到自动摘要上是重要的。问题在于他只输出一个句子,若要输出一篇摘要,至少是一段话。可能可以从分割文章后各生成一句话做起。
“如果只要向量就够了的话,我们还教什么数据结构课”作为一个 recurrent 神经网络(recurrent 一词有译成“递归”的,但 recursive 才是递归)的最近皈依者,他在讲座里也夹带了些私货。他认为,向量不足以表达复杂的结构。要是训练个神经网络,不是把什么都保存成一个向量的一堆数字,而是保存成“知识关系图”(脑图,我想也不错)之类的,那该多好呢。
这想法正合我意。有两个直觉在隐约地指导我这些年的思路:(一)自然语言是基于一堆离散的概念符号的。人的思维本来是一片混沌,自从有了语言,就好像盘古开天地,清晰起来了。用一些基本的概念,再组合出复杂的概念。这样就方便了记忆、推理、交流和记录,文明就发展起来了。没有语言,人也有思维,但缺乏结构。(二)自然语言处理,或者人工智能,最终一定要实现一个离散的符号体系跟连续的统计数据之间的大一统。单词向量并不能自己说明自己,比如“跑”有“移动”、“快速”、“脚不同时着地”等特征,但现在还没法从“跑”的向量里看出来。它只是记录了“跑”常见的上下文,而这些特征需要从频率数据里做反向推理才行。正面方向上,可以让电脑程序像孩子一样在模拟世界里学会词义,尤其是“从不说出的常识”。这两个方向的努力,不知道会在哪里相遇。
不过,组里的教授历来反对我的这些想法。我也不方便把这些哲学思想写进毕业论文里,就只写我做了什么。尤其是那个用思维的“基本粒子”进行组合的想法,他们认为是早已被淘汰的理论——当然要看是分成什么基本粒子了,分成金木水火土固然是错,但分成原子、质子、夸克,那就是正路了(吗)。语言的组合问题(compositionality),在鹿死谁手之前先存个念想吧。
网友评论