立委按:cs(common sense):句法的脑补,情报的冤家,是为常识。常识语义在语言理解中的作用,一直是AI符号派的重要话题。常识看上去漫无边际,如何形式化有效利用,也一直是个挑战。沙龙讨论的是轻量级或碎片化的常识语义的可行性与实践体会。具体说来有两方面,一是所谓语义相谐反映的常识条件在语言解析中的作用(譬如,EAT谓词概念 与 FOOD类实体的相谐度高),二是所谓“事理”图谱(譬如,“面试”与“录用”之间的因果关系),反映的是某种常识推理。有意思的是,语义落地所强调的情报性有与常识相逆的特性。俗话说,狗咬人不是新闻,人咬狗才是。
白:“他给张三倒洗脚水”、“他向张三泼洗脚水”,在两句中,“洗脚水”各是谁的?“他给张三拿银子”有歧义,一是他帮张三拿张三的银子,二是他拿自己的银子给张三。介词宾语和主语,什么条件下谁来跟宾语发生领属关系?有钱出钱,拿的是自己的钱;有力出力,拿(拎?背?揣?端?抱?抗?)的是别人的钱。
“他给张三写自传”,自然是张三的自传;“他给张三送自传”有歧义,可能是赠送“他”的自传给张三,也可能是给张三跑腿,把张三的自传送给其他人。赠送义本身有间接宾语,但“给”的介词宾语未必与之重合。因为出现了一个“帮办”角色。主语是帮办,主执行;介词宾语是事主,主名分。帮办做动作,名分归事主。间接宾语角色和事主角色造成歧义。
“张三给李四带口信”有三重歧义。张三委托别人把口信带给李四vs别人委托张三把口信带给李四vs李四的口信委托张三带给别人。这里的角色有:事主、帮办、直接宾语、间接宾语,口信是直接宾语,李四不能是帮办、张三不能是间接宾语。剩下的组合构成上述三重歧义。“向”引入的介词宾语坑,在动词不具有间接宾语坑时(如“吐痰”、“泼水”)临时客串间接宾语角色。在动词带间接宾语坑时(如“投掷”、“赠送”),二者共享一个萝卜。没有事主帮办之分。临时客串的情况下,介词宾语和直接宾语没有领属关系。“为”引入的介词宾语又是另一番景象:它是直接宾语的当然领属者。“为他人做嫁衣裳”不管是谁做,穿的一定是“他人”。
“在公园爬树”,“树”是“公园”的附属物,勉强说得上领属关系。“在公园打人”,“人”是不是“公园”的附属物,难说。“张三在公园放风筝”,“风筝”不仅不是“公园”所有,反而大概率是“张三”所有。所以,介词为“在”时,领属关系似可不作标记。真要追究时,靠事理来弄。没有坑的直接宾语,随他去。有坑的,看相谐性或者大数据。“张三在这个公园有月票,每天早上都来锻炼身体。”“月票”的坑就由“公园”来填。
“他给张三买了块巧克力吃”,是“张三”吃,不是“他”吃。“给”的介词宾语置换出来,在谓词群里面横扫千军。在有接续动词的情况下,“帮办”角色自动消失了!
“他给张三送了本自传看。”没歧义了,是“他”的自传而非“张三”的自传,“他”不是帮办“张三”也不是事主。世界清静了。真神奇啊。“他给张三挖了个坑”有微弱歧义;“他给张三挖了个坑跳”一点歧义没有。
汉语的介词,S+/N,禁止名词右填坑;日语的格助词,S+/N,禁止名词右填坑。英语N向S左填坑只限一次,再多的名词只能受动词短语降格修饰,汉语的N向S左填坑则不受这个限制,所以逻辑主语话题主语大小主语一堆堆。方向性对于加速获得正解还是很必要的。汉语的个别词,如“以前”,是反过来的,S+/X,但是X坑只能从左侧填,禁止从右侧填。从CG走来,先把填坑的方向性全部放开,再选择性地关闭其中个别词的个别方向。特别是,语种选择可以批量设置关闭方向。修饰的方向性基本不放开。头尾修饰是否有副作用,还不清楚。
宋:@白硕 在你的系统中如果一句话内的词相同,词序不同,是不是分析结果相同?
白:@宋柔 不一定,看具体配置,特别是词性标注不同会不一样。比如:张三比李四高,李四比张三高,一定是不同的parse。
谁填“高”的坑,谁填“比”的坑,都是不同的,当然是不同的分析结果。
酱油李四打了,李四酱油打了。这俩,分析结果的拓扑一样,内在语义角色的指派也一样。毕竟酱油不能打李四。
后面四个的分析结果,拓扑结构是一样的。它们当中,1-2的语义角色指派是不确定的,3-4的语义角色指派是确定的。如果有更强的上下文,1-2的语义角色指派会随之更为确定一些。这个机制,在句内的已经部分实现,跨句的还没有实现。
宋:猫抓老鼠和老鼠抓猫,分析结果一样吗?
白:拓扑一样,语义角色指派不一样。看图看不出本质差别。
鸡不吃了,在图上是没有歧义的。
宋:猫抓老鼠和老鼠抓猫,施事都是猫,受事都是老鼠?
白:不是的。能说的是:猫和老鼠,相对于抓,都是“填坑”关系,而且填了不同的坑。谁填了哪一个,句法不予确定。语义角色指派可以根据语序推定,但只限于一左一右这种。两个都在一边就无法推定。图上不标施事和受事。现在图上能看到的是LMa、RMa等。不负载施事受事等语义标签信息。
在双宾语的情况,某些江南方言里有时听到“我给钱你”这样的句式。直接宾语和间接宾语倒挂,而且不加介词。二者一人一非人的场景,是可以搞对的。二者皆人,我还没听到例子(不知道“我嫁女儿你”能说否),但真要区分角色的话,可能需要用到事理了。
宋:也就是说,对于二价动词V来说,N1 N2 V中,N1和N2各填V的那个坑,要看N1和N2与V的语义相谐性;N1 V N2,还是要看语序来决定谁填那个坑。对吗?
白:都相谐再看语序。
如果都在一边,语序也不起作用:“猫老鼠抓了”“老鼠猫抓了”,这时还要请出事理啊大数据啊更大上下文啊什么的。
宋:明白了。
李:都相谐再看语序?
svo 语序 为啥要看相谐呢?
“是乌云吃了月亮 还是月亮吃了乌云?”
白:都不相谐也回到语序。
李:“做了个梦好怪 一张烙饼吃下了一窝兔子”。
白:相信说话者别有用心,或者相信一切皆可为专名,都是出路。有强语境做免死金牌的,更可以回到语序。
李:还可以这么说话:
“一个实体x了另一个实体”。
“x 被律师打黑了”。
白:见怪可以不怪,那还相谐个啥。说都不会话了。提着火车上皮包。小孩说话慢慢教,哪有一井挖个锹。
李:问题是 先相谐 然后看语序 次序感觉不对。
“月亮吃乌云” 是都不谐,“烙饼吃兔子” 是谐与语序矛盾, svo 语序是决定性的,相谐是非决定性的。决定性的句法形式 决定了就完了。形式留下空间 才有相谐出场的必要。
白:“草把兔子吃肥了”。“烙饼把兔子吃噎着了”。完不了。句法形式到了汉语,语序变轻了。
李:语序是句法形式 相谐是语义约束。“烙饼把兔子吃噎着了”,不是句法的反例。语序 小词 都是形式,它们留下空间 才有语义约束的可能性。硬指标以后 才看软指标。显性形式没辙了 才求隐形形式 包括常识语义。
白:还有容错一说吧。“拎着火车上皮包”,就是被容错了。韵律感越好,越容错,乃至无感。反过来搭,和不搭,是不同的处理。反过来搭,容错占主导;不搭,句法占主导。句法一主导,然后就进入疯狂的脑补,拼命找辙。
顺杆儿爬,顺杆儿滑,隐喻,夸张,甚至怪诞的专名,都可以有。此外,局部有伪歧义的情况,不搭是最先要排除的。比如“馒头吃光了”。标准svo啊,但是不work。除非拿到怪诞大比拼的免死金牌。
宋:老鼠抓猫,老鼠一定是施事,猫一定是受事,因此,此时的“抓”不会是“抓捕”。而应该是“抓挠”。语序决定了施动受关系,进而决定了动词的语义。
白:这是事理。恰好“抓”有一个义项符合事理。
宋:如果有更大的语境提示是童话故事,或者发生基因变化,“抓”可以是“抓捕”的意思,但仍然老鼠是施事,猫是受事。
白:当你在处理一个局部的sov时,并不知道其他义项是否会组成更搭的合语法结构,所以对局部不搭的sov而言,是否一定会出头,不是局部能确定的,还要看别人。
“老鼠抓不抓猫都吃得好好的。”
“老鼠一抓到猫就可以睡大觉了。”
“老鼠一抓到猫就可以美餐一顿了。”
“猫一抓到老鼠就可以美餐一顿了”。
一个意思。局部要不要搞成不搭的svo,取决于全局。
宋:好例!
白:所以svo不是教条,只是一种可能性。放大看,svo要不要还两说呢……
宋:“老鼠一抓到猫就大祸临头了。”
白:不搭给这种可能性减分,但也不断其生路。外围有更好的组合,svo又算个啥,该扔就扔。外围没有更好的组合,svo就勉为其难吧。但是,组合好不好,一定是句法语义通盘考量的,哪有句法一定优先于语义一说。
“老鼠一抓到猫就大祸临头了。” 有歧义,充分脑补吧。老鼠居然抓到了猫,这世界该翻了天了,大祸临头。猫抓到了老鼠,去掉了主人的心病,主人也该卸磨杀驴了吧,大祸临头。猫给老鼠抓到只是猫的计策,老鼠大祸临头了。接下来玩死你。
事理可以作用于伪歧义的消除,但是对真歧义,事理也毫无办法。猫大祸临头,老鼠大祸临头,看客大祸临头,都有相应的解读。svo作为一个局部,你根本不知道外面有什么时,根本不敢把赌注押在句法上。
李:T1 svo T2,就够了。绝大多数情况不需要语义出场。trigram 是句法 5-gram 也是句法 都还在可控范围之内。以前说过 任何在(dynamic) 5-gram 之内可以搞定的事情 都是 tractable 的。虽然理论上永远可以找到反例,但是随着 n-gram 中 n 的扩大 (up to 5),随着 gram 的定义由 literal 延伸到包括 token features,以及随着 gram 从 word 延伸到动态的句素(包括各类短语),句法兜不住的伪歧义反例急剧减少 -- 直到句法发现真歧义。这时候 语义(主要是常识)约束、语用约束、领域约束等等 可以逐步出场,或不出场(保持歧义,或包容歧义)。
“传统” parser 为伪歧义困扰的事情 已经是过去的故事了。“现代”的句法基本上摆脱了伪歧义的羁绊 因为细线条 词汇主义路线 以及多层动态的 parsing。
白:五元组判定过程中用不用语义?用不用相谐性?如果用,那岂不是说相谐性判断先于svo?如果不用,伪歧义怎么弄掉的?单凭句法?就是说,T1、s、v、o、T2,各自携带了一些特征,用于五元组来判断svo要不要归约为s。这些特征包不包括语义/本体特征?动用这些特征是不是先于svo结构被确定?
不妨就试试 “老鼠一抓到猫就可以美餐一顿了”。看看“一”和“就”的辖域分界线是怎么确定的。实际上就四元组。左侧空缺。右侧再饶一个,又怎样?
“酱油打了李四也该回去交差了。”
到底是把“酱油”理解成一个人的外号,还是放弃svo转投ov(s)?哪一个是符合奥卡姆剃刀原则的?
如果上下文介绍李四是杀手,目标是张三,“张三杀了李四也该回去交差了”是不是应该放弃svo?这个上下文是五元组能cover的?事理:x完成任务—>x交差,任务从上文取得。
李:以反例批评一个一般性策略 其结果就是所有的过程性都是跛脚的 所有的因素都必须同时起作用。
白:有更好的系统性策略,而且并不跛脚。就是加分减分而已。看得分是一个统一的策略。硬约束有一个高的基准分。软约束不把它拉下来他往前走就是,拉下来就别怪谁了。
李:(较)软性约束与(较)硬性约束不同步 是一个总体有利的策略。
白:同不同步只是一个计算策略问题。晚几步发现问题还是早几步发现问题的事儿。只要有问题,拉下来则是必须的。就看付出的代价是什么了。另外的选择也虎视眈眈呢。一遇到合适的软约束,马上张口咬人。以现在的算力,神经网络那么大的冗余都不在话下,几个相谐性检查算什么。更何况毕竟都在线速的范围内。只要不破坏现场,总有翻盘机会。你走你的,但别杀死别人。
李:理论上 一个 l 长度的句子 在 l 没有全覆盖之前,任何 n-gram ( n < l ) 的模式都是跛脚的。这一点在分词中表现最为简明。不断有人以“反例”来推论 分词必须包括 parsing、常识、领域知识、世界知识...
白:分词不是最终任务,只是一道工序而已。
李:道理都是一样的。这道工序一旦缺乏某个知识 理论上就是 过早剪枝,但实践中 几乎所有 real world 系统都不理睬这种理论上的批评。保留所有可能分词路径 直到最后的系统 不能说没有 但极少。(当然 这个分词的工序 现在有了 越来越流行省心的 char-based 的路线, 干脆绕过去。)
白:曾经的real world系统还都不睬deep parsing呢。按同样逻辑deep parsing甭活了。real world系统也在进步好不好?
常识,有重量级搞法,也有轻量级搞法。不要被重量级搞法吓住了。
白:
李:
“张三杀了李四也该收手了吧”
“张三杀了李四还嫌不够解气吗?”
“张三杀了李四也该有个说法 不能白杀”。
谁白杀谁?
“张三杀了李四也该有个说法 不能白死”。
谁白死?
“人咬死了狗, 不会受处置 合理吗?”
“人咬死了, 狗不会受处置 合理吗?”
“人咬死了狗不会受处置 合理吗”
白:“这些木头盖了房子。”不是svo。
李:工具s 与 施事s 是一个熟透了的现象。中英都很普遍。
白:木头不是工具,是材料。
李:材料也差不多,工具 占据 s 位置 更普遍一些。材料 对于 制造类谓词 占据 s 位置也很多。
白:贴了标签也无益。人家正主儿可能在后面藏着呢。到时候找上门来,嘿嘿,小三上位了。
李:svoc,句法只有 三个位置,逻辑语义几十个。一对多 很自然,也很谐。不过就是需要增加一个 逻辑语义细分的任务,否认不了 svoc 的句法骨架作用。
“枪不杀人 人杀人”
枪真地不杀人吗?子弹杀人 不长眼睛的。
“x 杀人”
x 与 “杀” 相谐吗?x 是不是 s?如果是,x 是 agent,还是 instrument,还是 material?如果 x 未知 怎么填坑?
白:要真是未知就简单了,坑说了算,抽象的听具体的,奥卡姆剃刀。不举证证明不是他,就是他。
李:“他” 很难说是 “盖” 的 S【施事】,更像是 “盖” 的【受益人】。
语言没有明说的 可以存疑 或 模糊。硬要跳坑里去,也不过就是个情报价值不大的常识默认。
白:这没问题啊,没有证据证明策划人、出资人、执行人、受益人是分离的,就假设他们是一致的。这叫非单调逻辑,举证义务在反方。
李:对于模糊表达 可能无所谓正反。一不小心就是 over reading,读出了不存在的语义。
白:情报价值不应由开发方评价。这类连边都有特殊标记。
李:用户方的证据也不足。多少用户需要不可靠的情报 与 明确表达的情报 混杂在一起呢?
逻辑预备的坑总是很完备,但语言不见得。常识是情报的冤家:用的适度 可以帮助情报的完整性;稍不留神 就伤害了情报的准确性和可靠性。
白:想避免错误的填坑可以用阈值拦一刀。但是拦得住拦不住是水平问题,那个位置该不该给小三则是态度问题。先要端正态度,虚位以待。就算一直虚着,也没小三什么事。这些不进坑的角色,语义上都有后路,才不在乎主语的标签。我们也没有主语标签。只有留给施事的标配坑。
李:
“这些木头盖了房子他很开心”,他才不管谁盖的房子呢 木头物有所用就好。
“这些木头盖了房子他很伤心”,木头是他的 房子却是他人的。
白:这叫自己跳出来。
李:根据常识填坑是危险操作,很容易 put words into others mouth。这不是语言理解的目的。
白:不妨设个开关,一切可控,用不用随你。
李:可以,一个叫 s,明说出来的 有句法依据的;一个叫 hiddenS,常识推出了的。就是到了法庭 也不怕了。
如果任着常识使性子,党指挥枪 与 枪指挥党,就同义了。首先 先帝不答应。
枪不能杀人 背后一定有个扣动扳机的 agent,机器人能杀人吗?机器人背后也有人。
“他造了把土枪 专门杀人”
“他造了个机器人 专门杀人”
是他杀人 还是机器人杀人?
白:系统说是就是呗,反正认的是标签,标签背后的道理,说了也不懂。
李:系统1说 a 杀人,系统2说b,系统3说 a and b,系统4 说 a or b,系统5 说 测不准 ……
白:很正常,除非有人强推标准化。
李:这一路不是一直在论标准吗?材料不是 s “他“是 s,也说的是标准。“党“是 s “枪“是 o。
白:党和枪都是隐喻,指挥的坑里面没有能匹配枪的。
李:重点是 常识与句型,谁说了算、比例如何?
白:只有不匹配得离谱,才引出隐喻。说常识太泛,其实就是一个中间件,给出了相谐度的评价。
李:不匹配离谱 的前提是 先逃进坑。谁决定的 枪要跳进坑o,而不是 s?肯定不是常识。
白:枪指挥党就跳进s。
李:对呀。谁决定的?Svo 决定的,准确说是,T1 svo T2 决定的。
白:反正离谱而且没有正解,于是回到svo,或者说,没有相谐度方面给出加分,改变不了句法初始设定的优先格局。是检查了之后没推翻它,而不是不需要检查。
李:不如不检查。这是争论的焦点。不检查先做,做错了“休眠唤醒”再反悔 也是常态。一多半根本就到不了需要检查那一步 就差不多成了铁案。
白:检查了推翻也是常态。不等检查结果出来就做也可以,这只是不同的控制策略。上不到标准层面。
李:譬如 x 指挥 y,根本就走不到相谐还是不相谐,“系统说了算”,这里系统指句法。
白:维也纳爱乐乐团指挥够了,他又来指挥费城了。
@宋柔 不一定。假设李四有个to do list,上写“打张三”“打王五”等等。做完一件事,就划去一项。
宋:“张三杀了”有歧义:杀别人和自己被杀,如此才有了“张三杀了李四也该收手了吧”的歧义。如果换成“打嬴了”,“张三打嬴了”没有歧义,一定是张三打别人。此时,“张三打嬴了李四也该收手了吧”也没有歧义。这个句子的语义就要靠语法来分析了。
李:白老师可以把 “打-赢” 拆开来论证语义大于句法 也许。谁打 谁赢……
宋:不要“打”。只要”嬴”。“张三嬴了李四也该收手了吧”。
白:打是S/2N,赢是S/N。合并的时候两个坑共用一个萝卜,一个占名额,一个不占。
宋:“张三赢了李四让教练很生气。” 谁的教练?
白:@宋柔 都可以,张三李四都行。
宋:除非有更大的语境进行强制约束,否则还是张三的教练生气。这是句法胜过语义。句法胜过常识。
白:句法语义都行,但是sentiment是顺着一头儿说的。赢和生气的不应该是一头儿的,除非教练安排只许败不许胜。因为有只许败不许胜的“找辙”,句法没被颠覆。
宋:当有人说“张三赢了李四让教练很生气。”后,一定会有人觉得奇怪,问“为什么生气?”
白:如果是“有人说”,那么“赢了”后面会有一个停顿。
宋:这里是说没有停顿的情况。有停顿的话就要加逗号。“赢了”后面没有停顿。
白:不吃最后一个馒头不饱,总有人觉得之前的馒头可以不吃。
宋:一般人都会觉得这个表述很奇怪,违反常理。
白:有保镖在身边没人敢动你,并不说明不需要保镖。“李四”后面有没有停顿?
宋:李四后面与无停顿都一样。
白:好像不是。可以都不停顿,但李四后面的间隔更小。这时难说。主要是叙述的视点变化奇怪,并不是句法。
宋:我感觉这句话体现了了句法的硬性约束:教练一定是张三的。但是,嬴者的教练本应高兴,实际的情况是生气,于是就有矛盾。如果教练可以是李四的,就没有矛盾,听者就不会奇怪了。
白:“张三痛打了李四,脸都肿了。”
谁的脸?是句法决定的?跟上面句法可是完全平行。谁的脸肿了,跟谁挨打有直接的事理关联。这就是常识“拗得过”句法了。刚才那个只是没拗过而已,因为可以只许败不许胜,尤其在团队作战时,为了在下一轮避开某个对手。这说明确实两方面因素在较劲。如果不是同时出场,较劲就不会发生。
宋:任何一种行得通的理解都有一种合理的解释。问题在于听者在强大的事理约束下居然并不顺从,还会疑问,就说明句法胜过了事理。
白:胜过了非但不证明句法早起单独起作用,反而证明了事理因素早期就参与较量。恰恰是我的观点的一个旁证。
宋:但较量不过。
白:是。但不是都较量不过。平行的句子也有相反的结果。语义和事理早期参与了较量,这个就够了。
宋:是的。句法约束胜过语义的例子不大好举。
白:伟哥的意思是根本句法就在唱独角戏,语义和事理没参加较量。
宋:路线斗争。李维:先看句法再看语义;白硕:先看语义,辨不清时再看句法。
白:我是句法先拿到基准分,出不出线,要看句法和其他因素的较量结果。较量可以不改变得分的高低顺序。
宋:合二而一。
白:但是这时,非句法因素相当于最后一个馒头、相当于没有动手的保镖,不可以认为非句法因素是多余的,是不在现场的。较量不是多余的,基准分不是一锤定音的。甚至,如果并行机制设计得好的话,拿基准分和较量可以异步。中间有一段时间存在叠加态,保留部分坛坛罐罐走不齐。
宋:当然。我完全同意语义的重要性,只是觉得词汇语义+事理常识+专业知识,实在是无边无际,难以控制。某个句子可以采用某种语义关系加以解释,但可选用的语义关系非常多,机器怎么就能选对了语义关系进而做出正确的解释?大数据并非万能。所以,挖掘句法的硬约束还是有意义的。
白:硬约束已经在基本分里体现了呀
宋:一些硬约束其实还没有挖掘出来。操纵语义需要极大的功力。当然,做实际应用系统,语义相谐性是绝对离不开的,而且是最大量的工作所在。
白:软约束就像保险,花点小钱,保你关键时刻用非句法兜底。也许没用到,但是不等于没有用。特别是,软约束可以灵活地面对长尾。看起来每一个都是小概率,但是放在一起并不少。所谓没用到,就是较量了但没产生颠覆效果。并不是没较量。
宋:解决长尾问题必须靠软约束,但这个尾巴太大,需要的软约束太多,如何挖掘和使用软约束是一个极困难的问题。
白:软约束不仅数量大而且类型多、机制复杂。我现在尝试做的事情是:1、不管什么类型什么机制,最后都折合为同一种量(优先级),这是较量的前提。2、当个别软约束缺失时,不会影响其他软约束以及硬约束的较量,这是软约束增量化建设的需要。3、集中把两三个重要的软约束类型吃透做透,形成明显的“高地”,再图类型的扩充。其实绝不是无边无际,完全把握得住的。
宋:我觉得难度非常大。在某一个较小的专业领域,可能可以正确解决大多数问题。做一个通用的理解系统,恐怕不好办。
白:先分类型,再抓主要类型,铺开规模时以领域为抓手。做出来的不会是通用理解系统,但可能是通用理解机制框架+领域资源。
宋:AI的知识工程(知识获取、知识表示、知识使用)讲了几十年了,未见到突破性进展。现在的数据驱动+深度学习是一个突破,但是范围很受限。
白:加类型不影响通用机制,上规模不影响通用机制,改参数不影响通用机制。而且它不是知识处理,只是标签演算。也不能说是理解,只是某种程度上的精准解析。
我们范围也很受限。
(喘口气儿,待续...... 《李白王116:常识是情报的冤家(2/2)》 )
【相关】