【李白对话录:RNN 与语言学算法】
精选
已有 7514 次阅读
2016-2-27 21:11
|个人分类:立委科普|系统分类:科普集锦|
机器学习, formalism, RNN, 语言学算法, 过程性
立委按:本次《李白对话》涉及NLP两条道路融合的大议题。这个问题在NLP历史上从来就没有协调解决好过,其结果是以一方的无条件投降或隐身在学界拉下帷幕。这个议题的重要性和这次讨论带来的启发性,学术史将会留下印记。在我假想的NLP大学里,学生如果能独立消化理解这个对话的80%,至少可以授予一个硕士学位。其实,真实生活中新毕业的博士也不妨自己测一下能不能看懂在说什么。看懂了,可以自己奖励自己一碗正宗牛肉面。如果看不懂,呵呵。
李: 说机器学习的本质是自动编程,很多人不大认可,主要是觉得把一个热门甚至universal的东西等价于一个听上去就不靠谱的东西,多少有些抹黑的味道,至少是别有用心。抹黑犯不着,别有用心是有的。
白: 不是自动编程。
李: 有人可能argue,说机器学习学出来的系统,不是真正意义的自动编程,而只是学出来一个 modal,这个modal不过是一个资源,一种数据。可以是symbolic rule 的形式,更多的是统计概率模型 stochastic modal 。前者等价于手工的规则集或文法,而后者 stochastic modal 类似专家词典一样的资源,虽然人肉眼不大能看懂它。总之,这些类似词典文法的models不是程序,程序是在调用这些model的时候体现的。那个调用的东西,所谓 model 的 runner (decoder, 刘老师老老年把内含语言学过程性算法的runner叫控制器),那个才是程序,那个里面有算法,可那玩意儿不是机器学习培训model的过程中 “学习” 出来的,而是每一类机器学习算法预先给定的。从这个意义上,机器学习学习的不是程序,而是“知识”。
其实这正是我诘问机器学习在领域深度任务上有效性的关键所在,那个 runner 是预定的,通用的(可以用于NLP,也可以用于AI的任何领域,股票预测、蛋白质分子结构等),里面所隐含的算法和过程,没有领域算法的因素,因此凡是超出 model (知识资源的某种形式)表达能力以外的语言学算法,统统被认为是不必要的,或者被认为是可以被通用算法完全取代的。这怎么能做好深度 NLP 呢?
白: 这个过程需要澄清一下:
1、模型(如RNN)是一个formalism的一般形态。
2、这个formalism中含有大量未定的参数(权值)。
3、合适的权值可较好地解决填坑的任务。
4、权值可通过DL获得,也可通过编译显性语言学知识获得。
李: 我的困惑是,机器学习在哪里留下了接口,可以让语言学算法,特别是“过程性”的算法(先做什么,后做什么)进来?
如果没有这个接口,那就是认为语言学算法是儿戏,不值得吸收,语言学家可以轻易取代。
白: 过去的BP做不到“过程性”,RNN恰恰能做到。所以,编译到RNN,真的是编译,不是隐喻。
李: 关于 4,那些显性的语言学知识包括过程性的语言学算法么?还是只包括静态或平面的语言规则?多层的语言规则系统怎么进入 RNN 去帮助调控权值?
白: 语言规则都有对应的自动机,自动机都是过程性的。你也多层RNN好了。所以,要RNN,不要DL,是可行的。
在 Prolog 和 constraint-based grammars (也叫合一文法) 流行的时候,很多人看轻了过程性,以为语言的文法资源可以是没有过程的,没有层次的。一个外在的算法决定这个资源怎么用,分析还是生成。但这个观点站不住 站不住 站不住 啊。重要的观点至少说三遍。语言学的过程性的算法是深度parsing绕不过去的,这就是我的结论。因此无论是 HPSG,GPSG 等以前流行的文法派也好,还是更传统的 CFG 的单层文法派也好(其实二者是同质的formalism,涉及到的decoding算法是直接从形式语言formalism派生出来的),还是机器学习把语言分析当成黑箱子去训练一个model也好,统统地有一个共同的缺陷,致命的,就是里面假设了,通用的算法,或基于某个乔氏形式语言formalism的单层算法,可以包打一切,可以代替语言学过程性的算法。
白: 机器学习不假定乔氏,不排斥分层。
李: 传统的机器学习为什么都那么浅、那么平、那么地单层为主,至少层次极为限制?这里面可能的确有其苦衷。
白: 机器学习的结果可以有过程性。
李:机器学习本身自然是可以有层次的,有过程性,但是那是它内部的事情。如果一旦开了一个口子,让领域的过程性算法参合进来,容易乱套,这个接口不好定义和协调。猜想这就是苦衷。算法是命令问责制,不可能服从两个司令。所以不能轻易开口子,让语言学进来告诉机器该怎么做。语言学家做资料员可以,但不能当经理去指挥程序的走向,否则不是祸起萧墙,凌驾于党。
白: 不是formalism的问题,是学习本身的问题。绕开学习就不是问题了。
李: 怎么绕开学习?具体一点说说看。
白: 先说过程性。这里有三个层面的问题。一、分层,这相当于模型的级联,并不颠覆模型;二、非确定规则系统的确定化,比如regex到fsa,重写规则到图灵机,都在转换的过程当中忠实地引入了过程性,向RNN转换也是如此,理论上不存在法外之地;三、通常的规则系统里,各规则是平权的,但为规则引入优先级并不是新的idea,早就有,具体条件下按优先级选择同时适用的规则,程序可以做,RNN们也一样可以做。一是宏观控制,二是微观控制,三是中观控制。
李: 这个语言学算法与RNN接口的议题很有意思,以后可以细细讨论,也许是两条道路的汇聚点。
白: 当分层和分优先级管住了大的逻辑,具体规则的不确定变确定管住了每一根毛细血管,就剩不下什么法外的过程性了。
李: 有点意思。
你的第二点不是问题。那个过程性是天然的。第一点最重要,这里面有经验因素,也有原则,但正如所说,不改变“毛毛虫”(i.e. formalism)的性质,不过是一个过程的config而已。需要注意的是,分层的接口。这个接口很微妙,可以假定是数据结构搞定它。
白: 分层和滑动窗口结合会带来新问题。
李: 在你那里就是 RNN 的representation。只要这个数据结构是约定好的 protocol,分层本身就是一个 config 而已。
至于第三点,其实我的“毛毛虫”里面,早就有规则权重机制了。没有这个优先级的区分,还怎么玩 hierarchy 的规则系统,怎么应对语言的个性与共性?
个性共性的矛盾,一个是可以通过外部过程性控制,譬如先调个性,再做共性;或者先做共性,再用个性去 override,但是外部过程控制不能解决 hierarchy 的全部要求。因此规则集内部还是需要有适度的优先级控制。这些优先级多是经验性的或实验性的调控。靠的是语言学家对语言现象的感觉,到底是个性还是共性,多大程度上是个性等等。这个地方,有语料现象的统计来帮助的空间,因为人的语感不一定可靠,而且人见到的现象永远是局部的。
白: 假如,下面一层走很多步,上面一层才走一步,下面一层有可能先突破滑动窗口的限制,必须“武断”了,而上面一层其实等得起。这就导致不协调。如果用休眠唤醒,就可以在层级间更好地协调。所以,休眠唤醒这种非常典型的过程性机制,也是formalism的应有之义。
李: 听上去蛮有道理。
你这个滑动窗口,可以解释,用例子illustrate一下么?
白: 就是当前已经看到但没搞定的token不能超过多少个。要么停下来,要么搞定,不能在没搞定的情况下还往前走。其实我举的把字句辖域的例子(“把总统杀死的刺客埋了吧”),就是这么引起的。
李: 哦 那个滑动窗口是动态的,但对于某一层是基本定的。拿 regex 来说,理论上,有了 * 和 +, 窗口可以无限长,但是实际上,开发者心里有数,这个 * 不能超过一个 n,否则就无法预期后果了。
白: 类似
李:因此,大体上,每一个层是有一个相对固定的窗口的。到了下一层,因为句素的数据结构更新了,句素动态加长,滑动窗口就自然变大。到了句法建树阶段,long distance 也不过就是个三级跳而已,看上去很远的物理距离也够得着了,树结构上成为了邻居,远距离由此而 bigram or trigram 了。这就是句素分层处理的奥妙和威力。
白: 我刚才说的,就是下层紧张上层空闲的情况,这时休眠是有帮助的。
李:受教了。
白: 彼此。
李:休眠唤醒保不定哪一天会成为领域的热门术语呢。高兴的是,至少 “难过” 的休眠唤醒,我已经放到系统了,部分实践了这个机制。恰好 “难过”的歧义关涉情感分析,我舆情挖掘可以用到,在雷达上。
白: 分层、优先级、滑动窗口、休眠唤醒,这四个东西,把语言学家可感的主要过程性要素朝着落地的方向推进了一大截。
李: 诺。
白: 它们融入RNN框架的前景,借用早上讨论的热词,叫“有希望”而不仅仅是“有/希望”。
https://blog.sciencenet.cn/blog-362400-959092.html
上一篇:
《新智元笔记:再谈语言学手工编程与机器学习的自动编程》下一篇:
【泥沙龙笔记:机器 parsing 洪爷,无论打油或打趣】