【存档】者,恢复科学网博客被遮蔽之博文也。有些文字也不知道犯了啥规矩,譬如本篇,纯学术沙龙,也莫名其妙封杀了。总之现在是风声鹤唳,杯弓蛇影。也难为编辑了,宁可错杀一千,不能放过一个,这也是高压下自保之策,可以理解。人在弯腰树,惹不起可以躲一躲,不是?
【立委按】读者的反应是,这次笔记是《立委科普》专栏中最深奥的。看得稀里糊涂,不明觉厉。的确,没有专业背景不行,这两篇不算严格意义的科普,当然也不是科唬,而是严肃的探讨,希望对后学和同仁更有价值。
好了,咱们接着聊,第二章:为什么多层系统,尤其是 多层 FSAs ,不受伪歧义的困扰?
白: 只要证明毛毛虫以外不是人话,就只管放心玩毛毛虫好了。
头头绪绪,怎么讲好呢?
白: 伪歧义跟规则的递归形式无关,跟规则的词例化水平和压制机制有关。但是,要hold住十万百万量级的规则,CFG一开始就必须被排除在外。
对。
说到底是规则的个性与共性关系的处理,这是关键。这个不是我的发现,我的导师刘倬先生早年就一再强调这个。刘老师的系统命名为 专家词典(expert lexicon )系统,就是因为我们把个性的词典规则与共性的句法规则分开了,并且在个性与共性之间建立了一种有机的转换机制。
白老师说得对,单层的 CFG 基本是死路。眉毛胡子一把抓,甚至所谓词典主义的 CFG 流派,譬如 HPSG 也不能幸免,不出伪歧义才怪呢。如果规则量小,做一个玩具,问题不严重。如果面对真实自然语言,要应对不同抽象度的种种语言现象,单层的一锅炒的parsing,没有办法避免这种困扰。
白: HPSG 之类可以依托树做语义信息整合,但是在树本身的选择数目都在爆炸时,这种整合是不能指望的。
可以说得具体一点来阐释其中道理。分两个小节来谈,第一节谈多层系统中,单层内部的伪歧义问题。第二节谈多层之间的伪歧义问题。
白: 但是仍然困惑的是某种结构化的压制,比如“美国和中国的经济”’。“张三和李四的媳妇”
如果这两种伪歧义都有自然的应对方式,那么伪歧义不是困扰就理所当然了。待会儿就讲解白老师的例子。我这人啰嗦,学文科的,生存下来不容易,各位包涵了。说到现在,从白老师的眼中,都是偏离主题核心了的。
白: 抽象的并列,天然优越于抽象的长短不齐。似乎并不关乎词例,词例化的、次范畴化的规则,都好理解。抽象的结构化压制,处于什么地位呢?
但是难得大家围坐在一起,忍不住借题发挥一下,顺带进一步阐释了上次“上海会面”上的论点:我对乔老爷既爱且恨,爱他批判单层统计派的一针见血;恨他一竿子打翻一船人,敌我不分,重理论轻事实。
白: 是因爱成恨好吧
我们实际上半条身子在统计派的船上,大家都是有限状态;半条身子在语言派船上,毕竟我们不是单层的有限状态。统计派的有限状态的典型表现 ngram 实际上是 n-word,而我们的有限状态是真正的 ngram,这个”gram“ 就是刘老师当年一再强调的 “句素”,是一个动态的句法单位,可以是词、短语或者小句,随 parsing 的阶段而定。这样的 ngram 是统计派难以企及的,因为它反映的是真正的语言学,统计学家天然不懂。
白: 世界上只有深层派和浅层派,这是复旦美女教授教导的。我认为只要touch深层,无论什么派都会殊途同归。
先说单层内部的伪歧义。这个白老师心里应该没有疑问了,不过为了完整还是先讲它。
单层的有限状态说到底就是一个 regex (正则表达式),只不过面对的单位根据语言层次的不同而不同而已。如果是 POS tagging 这种浅层,面对的单位就是 words (or tokens)。如果是句法关系的解析层,面对的单位就是短语(可以看作是头词,它代表了整个短语,“吃掉”了前后修饰语)。
对于单层,有两种结构歧义,一种是伪歧义,占多数;一种是真歧义,占少数,但存在。单层系统里面的每一条规则都是一个 pattern,一个缩小版的局部 parser (mini-parsing),试图模式匹配句子中的一个字符子串(sub-string)。歧义的发生就是 n 个 patterns 对相同的输入文句的字符子串都成功了。
白: 然后?
这是难免的:因为描述语言现象的规则条件总是依据不同的侧面来描述,每条规则涵盖的集合可能与其他规则涵盖的集合相交。规则越多,相交面越大。每条规则的真正价值在于其与其他规则不相交的那个部分,是那个部分使得 parsing 越来越强大,涵盖的现象越来越多。至于相交的部分,结论一致的规则表现为伪歧义,这是多数情形。结论不一致的规则如果相交则是真歧义。这时候,需要一种规则的优先机制,让语言学家来定,哪条规则优于其他规则:规则成为一个有不同优先度的层级体系(hierarchy)。
白: 在线?
FSA Compiler 事先编译好,是 FSA Runner 在线做选择。
白: 那要隐含规则的优先关系,不能初一十五不一样。
个性的现象优先度最高。共性的现象是默认,优先度最低。这个很自然。一般来说,语言学家大多有这个起码的悟性,什么是个性现象,什么是共性。
白: ”张三的女儿和李四的儿子的婚事“
如果优先语感不够,那么在调试规则过程中,语言数据和bugs会提请语言工作者的注意,使得他们对规则做有意义的优先区分,所谓数据制导 (data-driven) 的开发。
白: specificity决定priotity,这是个铁律。在非单调推理中也是如此。
这个优先权机制是所有实用系统的题中应有之意。
优先级别太多太繁,人也受不了。实际情形是,根本不用太多的优先级别区分,只要三五个级别、最多八九个优先级别的区分就足够了。
白: 我还是觉得优先级初一十五不一样的时候一定会发生,而且统计会在这里派上用处。
一切是数据制导,开发和调试的过程自然做到了这种区分。而更多的是不做优先区分的歧义,恰好就落在了原来的伪歧义的区间里面。这时候,虽然有n条规则都产生了 local parses,他们之间没有优先,那就随机选取好了,因为他们之间没有 semantic 的区别价值。
换句话说,真歧义,归优先级别控制,是数据制导的、intuitive 的。伪歧义则随机选取。这一切是那么自然,以至于从业者根本就没有真正意识到这种事情可能成为理论上的困扰。
关于初一15的问题,以及白老师的具体实例,等到我们简单阐释第二节多层之间的伪歧义的应对以后,可以演示。
第二章第二节,多层之间可能的真伪歧义之区分应对。
对多层之间的真歧义,不外是围追堵截,这样的应对策略在开发过程中也是自然的、intuitive 的,数据制导,顺风顺水。围追堵截从多层上讲,可以在前,也可以在后。在前的是,先扫掉例外,再用通则。在后的是先做默认,然后再做修补(改正,patching)。道理都是一样的,就是处理好个性和共性的关系。如果系统再考究一点,还可以在个性中调用共性,这个发明曾经是刘老师 Expert Lexicon 设计中最得意的创新之一。个性里面可以包括专业知识,甚至常识(根据应用需要),共性里面就是句法模型之间的变式。
好,理论上的阐释就到此了,接下去可以看实例,接点地气。白老师,你要从哪个实例说起?我要求实例,加问题的解释。
白硕: “中国和美国的经济”。这就是我说的初一十五不一样。
这是真的结构歧义,Conjoin (联合结构)歧义 。在语言外知识没带入前,就好比西方语言中的 PP attachement 歧义。结构歧义是NLP的主要难题之一。Conjoin 歧义是典型的结构歧义,其他的还有 “的”字结构的歧义。这些歧义在句法层无解,纯粹的句法应该是允许二者的共存(输出 non-deterministic parses),理论上如此。句法的目标只是区分出这是(真)歧义(而这一点在不受伪歧义困扰的多层系统中不难),然后由语义模块来消歧。理论上,句法和语义/知识 是这么分家的。但是实践中,我们是把零散的语义和知识暗度陈仓地代入句法,以便在 parsing 中一举消歧。
白: 一个不杀当然省事。但是应该有个缺省优先的。
缺省优先由”大数据“定,原则上。统计可以提供启发(heuristics)。
白: 有次范畴就能做出缺省优先。不需要数据。
当然。次范畴就是小规则,小规则优先于大规则。语言规则中,大类的规则(POS-based rules)最粗线条,是默认规则,不涉及具体的次范畴(广义的subcat)。subcat based 的其次。sub-subcat 再其次。一路下推,可以到利用直接量(词驱动)的规则,那是最优先最具体的,包括成语和固定搭配。
白: 次范畴对齐的优先于不对齐的,就联合结构而言。但是,about 次范畴,理论上有太多的层。
那是,联合结构消歧中的次范畴不是很好用,因为这涉及词的语义类的层级体系。不管是 WordNet 还是董老师的 HowNet,里面的 taxonomy 可以很深,统统用来作为次范畴,不太现实。但理论上是这样使用的。
白: 再一个,“张三的女儿和李四的儿子的婚事”。这个也是真歧义吗?
上例的问题和难点,白老师请说明。"的"字结构的 scope歧义加上联合结构的歧义的叠加现象?
白: 上例是处理深度的问题,各自理解即可。歧义叠加,只有更加歧义了。可是实际相反,叠加限制了歧义。
在分层处理中,我们是这样做的:
(1)Basic NP, 最基本NP层的结果是:NP【张三】 的 NP【女儿】 和 NP【李四】 的NP【儿子】 的 NP【婚事】
(2)Basic XandY, 最基本的联合结构层:在这个层次,如果条件宽,就可能发生联合错误,错把 【女儿 和 李四】 联合起来。这个条件可以是 HUMAN,二者都符合。而且在 95% 的现象中,这个条件是合适的。如果条件严的话,譬如用 RELATIVES 这个语义次范畴(HUMAN的下位概念),而不是 HUMAN 来限定的话,这个句子在这一层的错误就避免了。
那么具体开发中到底如何掌握呢,这实际上决定于设定的目标,没有一定之规。做细总是可以做到更好质量,大不了多加几层 NP 和 XandY 的模块(FSAs),但还是增加了开发和维护的负担。如果做粗一点,只要所造成的 parsing 质量上的后果能控制在应用可接受的范围,那也未尝不可,因为说到底,世界上没有完美的系统。上帝允许人类的不完美。
雷: 联合类的问题一直是nlp的难点。
白: 把这个换成“AB的中点与AC的中点的连线”?同样的结构。
另一个思路,就是多层协调中的修补。对于上述两个例子,修补的办法似乎更好。与其分多层,代入各种繁琐的语义条件来消歧,不如任他出错,然后根据pattern的平行因素加以修正。在多层系统中,这个常常是有效的策略,也符合开发的总体规划。先把系统大体弄得work了,可以对付多数现象,然后有时间和余力了,后面可以 patching。前提是,错误是 consistent 和 predictable 的。对于多层管式系统(pipeline system),错误并不可怕,只要这种错误 consistent 有迹可循,后面总可以把它们修正。
多层管式系统常常被批评存在一个 error propagation(错误放大)的难题。其实,多层系统也可以做到负负得正(矫枉过正是也)。一个好的系统设计,是后者,通过 data-driven,可以做到把错误放大控制到最低限度,并发扬负负得正来得到最终正确的结果。
白: 伟哥的诀窍其实是把握一个适中的词例化-次范畴化水平问题。太粗则伪歧义盛行,太细则边际效益大减。
上例中 “中点与AC” 可以联合,不过是一个暂时的内部错误而已,后面可以修正。总之,这些都不是根本的 challenge,想做就可以做,实际操作上,也可以选择不做。问题大了,就做;用户发飙了,就做;否则就无视。很少有歧义是做不出来的,功夫和细节而已。最终决定于值得不值得花这份力气,有没有这样的开发时间和资源。
白: 做与不做,有可能影响架构选择。补丁有好处也有后遗症。
NLP 可以做一辈子,在基本机制(优先机制,修正机制,范畴、次范畴机制,专家词典等)由平台实现提供以后,慢慢磨到最后就是 diminishing return,与爬山类似,这决定了我们何时罢手。如果85%的精度作为parsing的目标,那么系统会选择不做一些稀有的现象。有了这个 85%,已经可以满足很多应用的要求了。
有了 85% 做底, 还可以让机器变得智能起来,自动地自我提高,所谓 self-learning,这是研究课题了,但是是可以实现的。实际上在我指导的实习生实验中已经实现,不过就是不大实用而已。
白: 再看“馒头吃光了”?
这个例子更容易讲清楚,。在系统的某一层,可以有个规则 把某种 “V+光" parse 成为动补结构,这个V的限制可以调试出合适的子范畴来。
白: “光”词例化肯定是可以的。
好,这就解决了95%以上这类以“光”收尾的现象。如果遇到了反例,譬如,”黑洞吃光了“, 那么或者修正它,或者作为个体知识的规则前置。围追堵截是也。总是可以把零碎的专业知识做成规则,如果需要的话。至于这么做值得不值得,那是应用层面的决定。很多时候是不必要的。错了就错了,不过是显得系统缺乏专家的知识,so what?
即便是人,也决定于他的知识面,小学生和文盲一般不能正确 parse 理解 ”黑洞吃光“ 的动宾语义来。动宾的语义是需要语言外知识在语言内非优先的潜在结构上作用才能得出。而动补结构则不需要,那是语言内的句法知识(最多说是句法子范畴或小规则,但不涉及专业知识),是所有国人的默认理解。
白: 这一点非常重要。一个开放,一个封闭。一个外部,一个内部。
外部的事儿,就算没有专业知识,也可以大数据招呼。
今天似乎可以结束了,说到底,就是
一,平台需要提供一些基本机制来处理共性与个性的关系,从而应对歧义,这些在 FSA formalism 的教科书定义中可能不存在,或被忽略,但却是实用系统不可或缺的。
二,NLP 的确是个力气活,有无限的可能深入。当然,我们可以选择不深入,可以选择何时罢手。
至于大数据招呼,那个在前述的自学习上也必须用到。
雷: 人在语言理解中也会发生许多歧义。如果机器发生的理解歧义同人的歧义,这个反而正常了。
我们教授机器做到 85%,大数据基础的自学习可以让它自行提高到 90%,这个是部分证实了的,可惜还没有发表出来,以前说过,懒得成文。都骨灰级老革命了,谁在乎那个。
雷: 大数据太笼统了。言语理解有太多层了。比如,比喻或隐喻。
白: 他就是要抹平这些层 @雷
我说的大数据是指与大语料库对应的 grammar trees 自动形成的 forest,比 PennTree 大好几个量级。
啰里啰嗦,把大家都吓跑了,只剩咱哥仨了?
雷: 这些抹平是暂时的还是永久的?
白: 实用主义的
雷: 同意,实用主义
对。实用主义,就是小平的猫路线。
这次神侃算不算基本回答了疑惑,可以得出 ”伪歧义在多层系统中不是困扰“ 这个结论?
白: @wei 是,非常感谢
不过,我们一方面实用制导,一方面没有忘记基本面和大局。与纯粹的实用主义,头痛医头,脚痛医脚,还是不同。
雷: @wei 这些可以发表在你的博客吗?@wei 许多东西在博客里更好更有指导意义
既然讲了,就博客吧。这种积一辈子挖煤的经验之谈,正式论文中罕见,也算一件功德。
难得的是白老师还有雷司令身为主流精英,居然能一开始就高于主流,不排斥异端或少数派。
所以上次上海聚会,我就说,火药味的架掐不起来的, 因为相互的理解和欣赏多于分歧。
白: 可以再关心一下NLP的商业模式,怎么能讲一个好故事。我们说fsa也好分层也好,资本都是不感冒的。
雷: 是,商业模式, 如李长官以前说的,怎么2c,而不是仅仅2b
白: 只要聚焦于深层,一定会殊途同归。
但我知道也有很多统计死硬派,甚至大牛,是不尿这壶的。
白: RNN记在统计账上,但已经是深层了。
滑稽的是发现有些死硬派做了n年NLP,却真地不懂语言学,有个别大牛连常识都不懂,让人跌破眼镜。当然这个只能内部说说,不能博客的。所以往往是互相地不尿对方那一壶,与宗教之战类似。
RNN 我还需要学习,才敢发言, 不过从白老师零星的介绍来看, 很可能殊途同归。不过 FSA 这套 deep parsing 是已经稳定成熟的技术。RNN 的工业成熟度如何,我不知道。
可能都是核弹, 不过是原子弹氢弹区别而已。
白: Ngram说不定变出个什么花样来,也殊途同归。
其实 多层 FSAs 本质上就是 ngram 的花样,不过 gram 不再仅仅是词了,而是等于或大于词的句素。能以动态句素作为 ngram 的对象,是因为多层的原因,跟剥笋子一样,层层扒皮,gram 当然就是动态的了。这一点很关键,是乔姆斯基都没想到的 power。
白: 对,边扫描边归约,边抛出句素。
黄: ngram是简单的统计,这几年也有许多进展,representation learning 算是深度学习在自然语言处理的热点。
这里面最 tricky 的不是机制而是细节。魔鬼在细节,就是指的这个。FSA 是”古老“简单的机制了,细节就是玩平衡,玩模块之间的协调。玩得好的就好比中餐的大厨,可以做出满汉全席来,玩不好的还不如麦当劳、keywords。到这一步,经验因素开始起作用。没碰过n次壁,甚至几万小时的炼狱,这个火候掌握不好。
白: 句素的个头大,影响范围就大,相当于抛得就远。可以进入远距离的滑动窗口,伟哥说的Ngram的缺点就不存在了。
黄: 很多新的模型都试图去capture long distance, sentence, paragraph的依赖关系,这里头可做的事情很多。
这类系统很难做得表面上漂亮光洁,总是在混沌中前行,要忍受不完美。这方面的忍受,数学家不如语言学家。他们天生追求简洁完美,不愿意将就。
白: dirty是必然的
ngram 的缺点是主流的缺点,不是语言多层派的缺点。恰好相反, ngram 多层以后,很容易比任何 CFG 做得细致深入,以至于,想怎么深入就怎么深入, 如果持续开发的话。
黄: 我感觉统计模型的优点之一是在某种程度上加上了semantic,比pure syntactic有很多好处
CFG 那套单层范式,无论统计模型还是传统文法加以实现,真地深入不下去,是框框决定的。两边都玩过,这种对比太强烈了。我对我的博导说过, HPSG 真地不好用,那边费那么大劲的事儿,在我这儿是小菜。说拿的是牛刀,可对象不是牛,而是鸡。不如我剪刀和匕首好宰鸡。
白: 我一个学生搞蛋白质折叠的分析。蛋白质大分子折叠的点恰好是若干局部的代表(相当于语言的head中心词)之间发生全局相互作用的地方。真是神了。
为世界和平和人类福祉计,统计模型和规则系统一定是要融合和弥补的,in some form。
这个忽视统计的教训我们也有过。如果没有统计的概念,没有大数据的制导,往往拍着脑袋而过度开发,最终是系统的臃肿不堪,甚至报废。我们语言学家是一种可能走火入魔的动物。必须要用数据制导和工程操作规范来制约我们,不能由着我们任性胡闹。
白:飞机要起飞了。关机。到北京再继续。
今天到此,特别谢谢白老师的互动和精彩的及时点评。
黄: 大胆假设,小心求证。复杂模型的威力如果有了海量带标数据没准能发挥。这几年好些统计模型都是老树开花。
黄老师还沉浸在主流的傲慢与光荣中,呵呵。
黄: 不好意思。
当然,任何奇迹都可能发生,就如在图像和语音中发生的奇迹一样。也许 deep learning 在 parsing 方面会有突破。可以想见,很多 DL 研究者正在朝着这个目标奔跑,似乎谁跑得快,谁就可以摘除NLP皇冠上的明珠。
不过这边厢有半个多世纪的传承和几十年的积累,奇迹已经发生了。
我最乐观的预测是,统计的奇迹一旦发生,从功能上也就是多层规则派奇迹的再现。从今后扩展上,也许更具优势?
拭目以待-ing。
【相关博文】
泥沙龙笔记:骨灰级砖家一席谈,真伪结构歧义的对策(1/2) 2015-09-21
http://blog.sciencenet.cn/blog-362400-922450.html
上一篇:泥沙龙笔记:真伪结构歧义的对策(1/2)
下一篇:【旧文翻新:温哥华,我的梦之乡】
1 陈辉
发表评论评论 (4 个评论)
- 删除 回复 |赞[2]李维
- 一不小心,把我以前的关于有限状态不是确定性状态的回复覆盖了,懒得重写了。总之,有限状态是一个 formalism,用来描写输入串如何模式匹配,而确定性和非确定性(deterministic、nondeterministic)是指的输出结果的形式。
- 删除 回复 |赞[1]srrc
- 这种方法总觉得离人对语言的理解有偏差,人阅读会有回溯。但很多情况下,读如花园小径句子并不需要重读,可见人脑中本身就有多种后选,这与确定性状态有悖。
-
回复 : 微博的一些评论转抄如下:
王伟DL
文章透露着落地的经验(经历)的光泽,不同的人对此文吸收和反射的谱线也会不同。我贪婪地一连看完,很多地方只觉得在理,的确是是是,有些地方也想表己见,却欲辨已忘言。“...指与大语料库对应的 grammar trees 自动形成的 forest,比 PennTree 大好几个量级。",好羡慕这个大块头!大块头有大智慧!
@算文解字:这篇顶级高手对话,充满思想,可以当武林秘籍参悟的文章,竟然没人转。。。强烈推荐啊!
算文解字
依存关系的确更好用//@立委_米拉: (1) 分层是正道。最起码要两层,基本短语层和句法关系层。(2)顺便一提,作为生成结果,短语结构的表达远不如依存关系的表达。短语结构叠床架屋,不好用,也不够逻辑和普世(不适合词序自由的语言)。当然,这后一点是另外的话题了,不仅仅是 CFG vs FSG 之争了。
算文解字
也对,镜老师批评的是用同一层次的规则处理不同层次的现象的"原教旨"CFG生成方法,提出的对策为FST分层处理。而在CFG下用coarse2fine的(分层)策略,也算是殊途同归了。//@沈李斌AI: 没必要排斥CFG。CFG树是生成结果,不是生成步骤。设计好coarse to fine的生成策略,控制每一步的perplexity和recall
|