【李白郭52:单层、一锅烩、反悔】

Guo:
@白 你前几天提到“算符优先”,今天又提type,猜想你的二元相偕是离散(而不是连续)的。能问下你的运算符和类型大概的数目规模吗?

完全不用“复杂特征集”,把所有不同关系都拍平在同一层,感觉颗粒度不容易掌握。

白:
(1)type是贯穿于句法和语义的;(2)算符优先是仅适用于句法的;(3)二元相谐是仅适用于语义中间件(subcat+统计)的;(4)平拍是贯穿于句法和语义的。算符的数目几十;句法cat少得可怜;subcat目前1000多。

Guo:
几件不同的事情!谢了!

白:
神奇的是,少得可怜的句法cat,居然管了这么多事儿。勾画了毛毛虫的“包络”。subcat确定了毛毛虫的细节。

李:
平拍是what

白:
把萝卜和坑搁同一个桌面上。坑不再嵌套。就是单子化的意思。

李:
哦 扁平化。
我自己在扁平化过程中,也有很多机关很好玩的,我叫做原子化。原子了,但taxonomy还在。非常轻便利索,但一样容纳知识结构。

白:
taxonomy是框架定义,不是实例定义。具体到实例都是扁平化的。

李:
本体(ontology)里面的主线 ISA 就是 taxonomy. 社科院跟刘老师做MT的时候,就是我提议的扁平化,说话30多年了。刘老师当时很高兴,给起了一个高大上的名字叫背景知识库(BGKB)。与白老师现在的中间件处于同一个地位。

白:
一个词在说人,就犯不上扯猿猴啊灵长类什么的。

李:
问题在当那个说【人】的词填坑的时候,【灵长类】啥的需要参与。当然,用大数据中间件也许可以绕过去了。但传统的优选语义的约束必须要用到 taxonomy,具体说就是,如果是用到灵长类,语义相谐给满分。

白:
萝卜和坑的subcat不一致时需要借助taxonomy一致化,具体就是求格(lattice)的下确界。

李:
就是。
理论上taxonomy往上是满分,taxonomy 向下需要打个折扣。你要的是【人】,那遇到【职业】的话,是满分。你要的是【职业】,遇到了【人】,那需要打个折扣,因为并不是所有的人都有职业。

白:
但是所谓绕过去,只是在借助subcat解决parsing问题(例如伪歧义)的意义上绕过去,解决语义问题则是绕不过去的。也就是说,大数据可以部分替代subcat来确定谁跟谁有关系,但不能进一步确定是什么关系。确定是什么关系(落到哪个槽里)还得subcat出马。

Guo:
说到这,此毛毛虫已非彼毛毛虫了。

@wei 在模式匹配下的分层,我理解主要是为了方便(在nonterminal级)lookahead并引入有限的上下文相关。

其实顺着LR(k)的思路,对其稍加改造,也是可以对含有一定上下文相关规则的文法等价地单次无回溯做parsing的。

李:
等价这种东西理论上可以证明,实际上做起来就知道,模块化是怎样一个让人放心的开发策略了。哪个大型软件不是模块化的?为什么偏偏到了自然语言这个 monster,非要一锅烩呢?

这里面有一个坎儿,不是认知和策略层面的, 而是算法层面的。如果你的parsing算法的基因就是单层搜索,即便你接受模块化的好处,多层的从容和开发维护的便利,你可能还是难以改造成多层。

白:
拿具体例子说。哪个策略是算符优先做不到的。
算符优先碍着开发什么事儿了

李:
我说不过你,但你说不服我,=)
我是打死也不会回到单层去。

白:
我一张优先序大表,表上每个格子对应一个模块。

李:
对啊

白:
绝对是模块化的,但算法是按照优先序统一调度的。这没矛盾啊。

李:
事实上Brill tagger就是单层,但是里面的200条规则是有次序的,或优先级的,等价于200多个模块的多层pipeline。这个道理我懂。

白:
语言学家只需要关注一个一个模块的事情,只需要关心优先序的语言学合理性,不需要关心调度算法。这在开发上哪点不好了?

李:
也许吧,这要等到哪天我投奔白老师做个语言学码农的时候,才能体会到,是不是在单层里面也有模块化开发的感觉了。

白:
调度算法只有一锅煮才是最合理的。

李:
一锅煮合理的argument本来是立足于自然语言现象的相互纠缠,interdependency。

白:
不是的

李:
既然你一锅煮了 还是要补以休眠唤醒等机制,那么这个根基就动摇了。

Guo:
计算上不等价。算符优先,如算术表达式,计算复杂性与算符数无关。规则优先,如Brill Tagger,计算量随规则数目增加。

李:
一锅还是分层,最终都有个唤醒的问题。

白:
一锅煮是提炼了语言学无关的过程性控制策略的共性,语言学相关的,都封装在模块里了。唤醒也是语言学无关的。@Guo 我规则数为0。

李: 唤醒与语言学远距离句法有关。
可以反过来问:有什么一锅煮能解决的,分层解决不了或解决不好?

以前的例子是有的,譬如 hidden ambiguity, 尤其是汉语切词,在一锅烩中,理论上在理想状态下,这个问题是可以自然解决的。但是切词模块被分开后,这个问题就不能。解决只有靠休眠唤醒。

白:
不加反悔,都解决不好。

李:
不加反悔,理论上一锅烩的 parsing 是可以解决的。当然理论与实践有距离。所以白老师即便一锅烩,也不解决它。

白:
加了反悔,给分层带来多大架构上的冲击我不知道,但是给一锅煮+算符优先带来的架构上的冲击几乎为零。

李:
反悔与分层是天然亲密的。chemistry 很好。反悔不过看成是分层的延伸而已。不过是最后多加几层罢了。

白:
那大家殊途同归好了

李:
而且因为反悔都是在后期,条件成熟了,efficiency上极为合理优化。我现在做反悔,都是在结构上做,不在线性序列上做,那叫一个痛快,一打一个准。反悔从机制上几乎等价于抽取了。

白:
kick off也是在结构上做:一个萝卜出,一个萝卜进。坑还是原来的坑。

Guo:
分层并不天然地等价于模块化。Brill Tagger,改中间任何一条规则,后面全部规则都要重写。这是“负负得正”的负面。

李:
如果是 adaptive 目标驱动,就没有了这个负面。为什么我们多层开发的每一个模块的变动,都必须要通过目标驱动的 regression 测试呢。这些都是软件开发的老生常谈了。

白:
词典化的词负载结构框架下,没有改规则的问题,只有写词条的问题。

李:
模块化的好处是解析性好,可以理喻。一个bug来了,很容易找到出问题的模块,不会是隔靴搔痒。

白:
模块化所有人都没有意见,可以忽略。

李:
到了真地进入这个模块去debug的时候,情况就不再是局部模块了,而是全视野 目标驱动的。这样既保证了一打一个准,有保证了没有副作用。既埋头拉车,也抬头看路。所以Guo的那个顾虑不是问题。

白:
但,模块化并不必然推出分层,分层并不必然推出单向无反悔,模块化也并不必然推出算符优先哪里不work。算符优先相当于桶排序,而桶排序是线性的。

李:
撤了。今天有个 Tech Day。白老师也夜深了,good night

白:
至于目标驱动,这是软件工程的老生常谈。软件工程还说要做边界测试、压力测试、极限测试。

李:
的确是老生常谈。
“白老师也夜深了”

白:
好句

李:
这句里面,主语“白老师”,“也X了”是典型的谓语。句法主语与谓语是什么逻辑语义呢?

白:
顺杆爬,主语所在地。

李:
哈:白老师(那地儿)也夜深了。

白:
这是隔着时区说话才有的语义。

李:
这是同一个战壕战友的关切黑话

 

【相关】

【李白之37:分层与一锅煮的parsing机制探讨】

[转载]【白硕 – 穿越乔家大院寻找“毛毛虫”】

【立委科普:结构歧义的休眠唤醒演义】

【李白董铿锵行:说不完的subcat和逻辑语义】

【语义计算:李白对话录系列】

中文处理

Parsing

【置顶:立委NLP博文一览】

《朝华午拾》总目录

发布者

liweinlp

立委博士,自然语言处理(NLP)资深架构师,Principle Scientist, jd-valley, Netbase前首席科学家,期间指挥团队研发了18种语言的理解和应用系统。特别是汉语和英语,具有世界一流的分析(parsing)精度,并且做到鲁棒、线速,scale up to 大数据,语义落地到数据挖掘和问答产品。Cymfony前研发副总,曾荣获第一届问答系统第一名(TREC-8 QA Track),并赢得17个美国国防部的信息抽取项目(PI for 17 SBIRs)。立委NLP工作的应用方向包括大数据舆情挖掘、客户情报、信息抽取、知识图谱、问答系统、智能助理、语义搜索等等。

发表评论