《李白108:“他就是要裁你的人”》

李:看一下结构歧义的例3 “他就是要裁你的人”,如果你是个兵 手下无人,这句对你就没有歧义。如果你是经理 麻烦了。

你说:裁我的人 痴心妄想!
我说:拜托 他才不要裁你的手下呢,他是要炒你的鱿鱼!

你说会不会很糟心?

  1. 他就是要裁你
  2. 他要裁你的人
  3. 他就是要裁你的人

白:“你的人”局部优先于“裁你”,这没有错。

李:本来是靠相谐度 力量对比,可是 “你” 和 “人” 都是 human。遇到双关式歧义,傻了。小概率事件发生了。

有意思的是,解析器做了一个候选定语M2,貌似为另一路的解读留有一些端倪:“你的人(your men)”。O 与 M2 不兼容(XOR),虽然借的是AND的表示,这是另一个相关话题了,叫做“如何用确定性数据流表示非确定性结果和歧义”,找时间再论。

上述歧义是不难识别的。中文的【V N1 的 N2】,与英文 PP attachment 句式【V NP PP】有一比,都是结构歧义的典型句式。为什么常常不愿意花力气去做结构歧义的识别工作?

与计算机语言不同,自然语言的特点就是有歧义,NLU的任务就是消歧。彻底消歧不容易,因为需要调动很多知识,不仅仅是语言学知识,还包括常识、领域知识和场景知识,这些知识的作用力不同,最后人是怎么综合各种力量对比做出理解的,是一个不好拿捏的过程。形式化建模有挑战。

然而,与词汇歧义的琐碎不同,结构歧义句式清晰,有迹可循,从理论上是可以识别的。识别歧义不需要世界知识,语言学内部的知识就足够了。结构歧义不是难在识别,而是难在识别了以后如何利用各种知识去进一步过滤消歧(剪枝)。

所以有人建议 nondeterministic parsing,把歧义都识别暴露出来,把球踢给接盘的人。这里面的argument就是,识别问题是解决问题的第一步,总比糊里糊涂好。但是实际上,虽然这是一个可以做的事儿,我们却选择不做非确定性输出。只要算一下账就明白为什么不做是更好的对策。

假如一个结构有两个解读,非确定性输出两个路径(解读),在难以确保后面模块有相当把握和精度消歧的情况下,其实不如从一开始就规定系统只能输出确定性路径,宁愿冒过早剪枝的险。(如果后面的落地方向是支持结构检索,俗称SVO搜索,那又另当别论,因为搜索讲求的是召回,非确定性比确定性的支持更有利。)

人对于二叉歧义(a|b)的理解,不外是三种情况:1. a;2.b;3. a|b:其中,3 是不可解的歧义,即便调动现有的知识,歧义还是存在(如 双关语),是小概率事件,可以忽略。剩下的1和2不是均匀分布的,常见的情况是一种可能比另一种可能要大很多。

这时候,确定性系统在数据驱动的系统开发环境中,就会自然偏向于输出可能性大的路径。数据打磨越久,这种趋向越稳定。如果是不确定性的设计原则指导,就会不断追求召回,干扰了对于最大可能路径的目标追求。一般来说,最终结果自然是不合算的。换句话说,在实践中,不是不可以做到很好的召回和识别出(几乎)所有的歧义,但这个工作肯定会干扰集中精力逼近正确的目标。

自说自话半天,其实是自己给自己的“懒惰”寻找背后的动机,今天算是悟出来的。的确事出有因。很久了,一直觉得应该做也有能力做的这件识别所有歧义的事儿,一直没下决心去做。果然不仅仅是懒惰。既然如此,就有理由继续懒惰下去,好把精力放到更合算和有价值的地方去。

白:合算不合算的思维,不是极客思维。极客没有挡箭牌。

李:一般都是天然地批判 “(过早)剪枝”和确定性数据流,终于找到了这个做法的 “说得过去” 的理由和实际好处。当然前提是把开发看成是一个漫长的数据驱动的打磨迭代过程,今天的看似确定性输出的错误,到明天就纠正了,虽然同样是确定性输出。不确定性是假设在不必迭代的情况下,为后期应用保全潜力。迭代思维把这个后期消歧的假设转换成迭代过程中的前期消歧(譬如一条粗线条规则引起的歧义,在迭代中变成了粗细两组规则,消歧了也就没有非确定性了)。极客不极客,不重要。

白:很多技术可以让剪枝成为伪问题。合理的歧义也许就是前后脚的关系,伪歧义也并非始终寸步难行。允许依序择优梦游,天塌不下来。例如,坛坛罐罐走不齐——各种局部解析非等速前进,就可以把剪枝问题化解于无形。你永远无需做是否剪枝的判断。只要“长芽”被无限期推迟,事实上就相当于剪枝。但是无限期推迟只是一个后果,并不是一个决策。

李:在缺乏厚度或深度 没有足够施展空间的情形下的问题。换了架构 就可以化为伪问题。原来的痛点 逐渐消解了。

白:截流的点可以设置。出一个解析和出N个解析,就是截流阈值的选择而已。所有有语言学意义的判断,都融合在优先级机制里了。截流阈值的选择与语言学无关。

“他就是想利用你,并且在利用完了就杀掉你的敌人。”

“就是”可以带体词性表语,也可以带谓词性表语,造成歧义。“利用”、“敌人”是负面sentiment,“杀掉”可反转sentiment。如果带谓词性表语,从“利用”得知“他”为正面,从“杀掉+敌人”得知“他”为负面。拧巴了。如果带体词性表语,“利用”和“敌人”相谐,“你”和“杀掉”、“敌人”不两立,于是“杀掉”和“敌人”也相谐。这个才是正解。

李:我经常纳闷。白老师冒出来的那些例句是怎么回事。肯定是平时有心,对数据超级敏感,这是数据驱动的角度看例句的收集。数据驱动的有心,本质还是被动的。另一个角度应该是主动的方向性收集+发挥?就是在多种因素中,有意识瞄准冲突最戏剧化的案例。譬如 句法与常识的冲突,惯性与转向/刹车的冲突。

白:嗯,似乎有一种直觉,能筛选出哪条语料对于我来说是不寻常的。

李:中文的【V N1 的 N2】,主要看 V+N1 动宾相谐度与 V+N2 动宾相谐度的力量对比:

“卖火柴的小女孩”
“卖小女孩的火柴”

卖的是东西,不是人。

白:超相谐的填坑>修饰>相谐的填坑>不相谐的修饰>不相谐的填坑

李:这里面貌似有距离因素,修饰距离近 动宾距离远,所以 同等相偕 修饰大于动宾。

白:【笑而不语】

三个境界:1、能单独处理“就是S+(重读)”;2、能单独处理“就是S/2N(轻读)”,其中修饰>填坑;3、能综合处理“就是S+||S/2N”。3又分:“正解+伪歧义”和“真歧义”。境界2中,一度占先的解读推进到某处卡住了,另一个解读后来居上。

“这是卖女孩的小火柴,不卖男孩。”

“卖”的间接宾语坑也来凑热闹了。只要相谐性并无禁止,就可以激活。

李:昨天我想的反例是:“这是卖小女孩的人贩子”。

白:无所谓反例,就是前后脚的事儿。不使用常识(事理),就是歧义。谁比谁先一步都是可能的。这种优先级上的误差,是在容忍范围内的。

【相关】

《一日一析系列》

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

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

《朝华午拾》总目录

发布者

liweinlp

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

发表评论