科学网

 找回密码
  注册

tag 标签: parser

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

On Recall of Rule-based Systems
liwei999 2016-8-1 13:34
After I showed the benchmarking results of SyntaxNet and our rule system based on grammar engineering, many people seem to be surprised by the fact that the rule system beats the newest deep-learning based parser in data quality . I then got asked many questions, one question is: Q: We know that rules crafted by linguists are good at precision, how about recall? This question is worth a more in-depth discussion and serious answer because it touches the core of the viability of the forgotten school: why is it still there? what does it have to offer? The key is the excellent data quality as advantage of a hand-crafted system, not only for precision, but high recall is achievable as well. Before we elaborate, here was my quick answer to the above question: Unlike precision, recall is not rules' forte, but there are ways to enhance recall; To enhance recall without precision compromise, one needs to develop more rules and organize rules in a hierarch y, and organize grammars in a pipeline , so r ecall is a function of time; To enhance recall with limited compromise in precision, one can fine-tune the rules to loosen conditions. Let me address these points by presenting the scene of action for this linguistic art in its engineering craftsmanship. A rule system is based on compiled computational grammars. A grammar is a set of linguistic rules encoded in some formalism. What happens in grammar engineering is not much different from other software engineering projects. As knowledge engineer, a computational linguist codes a rule in a NLP-specific language, based on a development corpus. The development is data-driven, each line of rule code goes through rigid unit tests and then regression tests before it is submitted as part of the updated system. Depending on the design of the architect, there are all types of information available for the linguist developer to use in crafting a rule's conditions, e.g. a rule can check any elements of a pattern by enforcing conditions on (i) word or stem itself (i.e. string literal, in cases of capturing, say, idiomatic expressions), and/or (ii) POS (part-of-speech, such as noun, adjective, verb, preposition), (iii) and/or orthography features (e.g. initial upper case, mixed case, token with digits and dots), and/or (iv) morphology features (e.g. tense, aspect, person, number, case, etc. decoded by a previous morphology module), (v) and/or syntactic features (e.g. verb subcategory features such as intransitive, transitive, ditransitive), (vi) and/or lexical semantic features (e.g. human, animal, furniture, food, school, time, location, color, emotion). There are almost infinite combinations of such conditions that can be enforced in rules' patterns. A linguist's job is to use such conditions to maximize the benefits of capturing the target language phenomena, through a process of trial and error. Given the description of grammar engineering as above, what we expect to see in the initial stage of grammar development is a system precision-oriented by nature. Each rule developed is geared towards a target linguistic phenomenon based on the data observed in the development corpus: conditions can be as tight as one wants them to be, ensuring precision. But no single rule or a small set of rules can cover all the phenomena. So the recall is low in the beginning stage. Let us push things to extreme, if a rule system is based on only one grammar consisting of only one rule, it is not difficult to quickly develop a system with 100% precision but very poor recall. But what is good of a system that is precise but without coverage? So a linguist is trained to generalize. In fact, most linguists are over-trained in school for theorizing and generalization before they get involved in software industrial development. In my own experience in training new linguists into knowledge developers, I often have to de-train this aspect of their education by enforcing strict procedures of data-driven and regression-free development. As a result, the system will generalize only to the extent allowed to maintain a target precision, say 90% or above. It is a balancing art. Experienced linguists are better than new graduates. Out of explosive possibilities of conditions, one will only test some most likely combination of conditions based on linguistic knowledge and judgement in order to reach the desired precision with maximized recall of the target phenomena. For a given rule, it is always possible to increase recall at compromise of precision by dropping some conditions or replacing a strict condition by a loose condition (e.g. checking a feature instead of literal, or checking a general feature such as noun instead of a narrow feature such as human ). When a rule is fine-tuned with proper conditions for the desired balance of precision and recall, the linguist developer moves on to try to come up with another rule to cover more space of the target phenomena. So, as the development goes on, and more data from the development corpus are brought to the attention on the developer's radar, more rules are developed to cover more and more phenomena, much like silkworms eating mulberry leaves. This is incremental enhancement fairly typical of software development cycles for new releases. Most of the time, newly developed rules will overlap with existing rules, but their logical OR points to an enlarged conquered territory. It is hard work, but recall gradually, and naturally, picks up with time while maintaining precision until it hits long tail with diminishing returns. There are two caveats which are worth discussing for people who are curious about this seasoned school of grammar engineering. First, not all rules are equal. A non-toy rule system often provides mechanism to help organize rules in a hierarchy for better quality as well as easier maintenance: after all, a grammar hard to understand and difficult to maintain has little prospect for debugging and incremental enhancement. Typically, a grammar has some general rules at the top which serve as default and cover the majority of phenomena well but make mistakes in the exceptions which are not rare in natural language. As is known to all, naturally language is such a monster that almost no rules are without exceptions. Remember in high school grammar class, our teacher used to teach us grammar rules. For example, one rule says that a bare verb cannot be used as predicate with third person singular subject, which should agree with the predicate in person and number by adding -s to the verb: hence, She leaves instead of *S he leave . But soon we found exceptions in sentences like The teacher demanded that she leave. This exception to the original rule only occurs in object clauses following certain main clause verbs such as demand , theoretically labeled by linguists as subjunctive mood. This more restricted rule needs to work with the more general rule to result in a better formulated grammar. Likewise, in building a computational grammar for automatic parsing or other NLP tasks, we need to handle a spectrum of rules with different degrees of generalizations in achieving good data quality for a balanced precision and recall. Rather than adding more and more restrictions to make a general rule not to overkill the exceptions, it is more elegant and practical to organize the rules in a hierarchy so the general rules are only applied as default after more specific rules are tried, or equivalently, specific rules are applied to overturn or correct the results of general rules. Thus, most real life formalisms are equipped with hierarchy mechanism to help linguists develop computational grammars to model the human linguistic capability in language analysis and understanding. The second point that relates to the topic of recall of a rule system is so significant but often neglected that it cannot be over-emphasized and it calls for a separate writing in itself. I will only present a concise conclusion here. It relates to multiple levels of parsing that can significantly enhance recall for both parsing and parsing-supported NLP applications . In a multi-level rule system, each level is one module of the system, involving a grammar. Lower levels of grammars help build local structures (e.g. basic Noun Phrase), performing shallow parsing. System thus designed are not only good for modularized engineering, but also great for recall because shallow parsing shortens the distance of words that hold syntactic relations (including long distance relations) and lower level linguistic constructions clear the way for generalization by high level rules in covering linguistic phenomena. In summary, a parser based on grammar engineering can reach very high precision; in addition, there are proven effective ways of enhancing its recall too. High recall can be achieved if enough time and expertise are invested in its development. In case of parsing, as shown by test results , our seasoned English parser is good at both precision (96% vs. SyntaxNet 94%) and recall (94% vs. Syntax 95%, only 1 percentage point lower than SyntaxNet) in news genre, and with regards to social media, our parser is robust enough to beat SyntaxNet in both precision (89% vs. SyntaxNet 60%) and recall (72% vs. SyntaxNet 70%). Is Google SyntaxNet Really the World’s Most Accurate Parser? It is untrue that Google SyntaxNet is the “world’s most accurate parser” R. Srihari, W Li, C. Niu, T. Cornell. InfoXtract: A Customizable Intermediate Level Information Extraction Engine. Journal of Natural Language Engineering, 12(4), 1-37, 2006 K. Church: “A Pendulum Swung Too Far” , Linguistics issues in Language Technology, 2011; 6(5) Pros and Cons of Two Approaches: Machine Learning vs Grammar Engineering Introduction of Netbase NLP Core Engine Overview of Natural Language Processing Dr. Wei Li’s English Blog on NLP
个人分类: 立委科普|4306 次阅读|0 个评论
《泥沙龙笔记:NLP component technology 的市场问题》
liwei999 2016-1-26 04:07
马: 李老师有没有考虑把parser核心代码拿出来放到云端, 搞一个parsing as a service提供api调用。各种互联网大公司小公司从电商到企业信息化都有句子分析的需求, 小公司最多就拿斯坦福用用,大公司in house NLP研发的parser估计没有您的parser精准。 我: 公司没有这个motivation。要是自家创业的话,这个思路可以考虑。但历史上做 component technology 的鲜有成功。 马: 这个可能需要一定的pr和营销 我: 做得最轰轰烈烈的 Inxight 当时是作为 NLP industry leader,背后又有 PARC 的光环,最后在融资 10 轮以后,还是壮烈了,因为 market 不足以养育它。 马: 另外得到外部认可,被MS amz或ibm的云计算部门收购也不失为一个好出路 Nick: 伟哥可以再来篇nlp痛说家史: 十七年风雨狂怕谈以往。 我: 我一直在痛说啊。难得你们组群提供了痛说的平台。平台之前,就在自家的博客菜园子了痛说了n年。否则怎么会积攒了两三百篇 NLP 的博文呢,比中规中矩写论文爽气多了,天马行空,其积累都足够开办全世界第一所 【 NLP 大学 】了。进这所大学既无门槛也有很高的门槛,师傅领进门,修行靠个人,能不能毕业就看造化了。 马: 关键是放到云端控制好流量之类,成本应该不高, 就算发展不如预期,投入也有限。现在也许市场条件更成熟了。从互联网公司到传统的企业信息化公司都在招NLP的人才 从关键词到实体到IE 以及sentiment都是标配。如果能帮他们的提高效果,降低成本,提供了价值,没道理不赚钱。我觉得parsing as a service比各种AI和纯ML的api创业公司靠谱和实用多 了。 我: 提供 AI 或 ML 工具的公司可以生存么?印象不就是那些大学教授做一些开源的工具 放在那里给人用,大多免费。做大数据架构和工具的倒是有市场。做 AI component technology 的悬。so far 未见成功案例。 马: 不清楚 但市面上已经有一些公司,也拿到投资了,能不能活下来就另说了。另外 ibm的watson部门和微软的云计算的一个分支最核心就是一 些ml和text analytics的服务啊。 我: 巨头另说,不代表business,他们一转念就把工具免费了,譬如 Facebook 和 谷歌最近的作为。 马: 可能取决于市场对NLP技术需求的规模。规模足够大养活一两家parsing/ie公司也不困难。只要有足够造电器的中小企业,卖马达的可能就会有生意。 我: 不给力,dream job 是去 wechat 里面去挖掘,啥挖不出来呀。只有想不到的,没有挖不到的。 马: 让白老师介绍个腾讯的高管给您,配个团队,用黑科技挖矿。不过难点可能在于腾讯估计不放心在硅谷开个办公室挖数据。 我: 腾讯在硅谷的经理曾经多次想促成双方的合作。data 的敏感度根本不允许。 马: 数据是命根子啊,腾讯的态度不难想象。 苏: 他们自己做吧 我: 那自然。不在工具有多强,科技有多黑,如果是富矿,平台足够大,一把菜刀也可以在大数据闹革命。没办法,那叫平台优势。 【置顶:立委科学网博客NLP博文一览(定期更新版)】
个人分类: 立委科普|3013 次阅读|0 个评论
【新智元笔记:中文 parsing 在希望的田野上】
热度 1 liwei999 2016-1-16 06:14
中文毛毛虫,还是蛮多坎坷的。看看我开发的这条毛毛虫模型(i.e. Chinese deep parser ),是不是在希望的田野上。拿 白老师的妙文 做个检验,结果是,有些链子掉了。掉链子是免不了的,关键是什么样的链子,多大程度上影响其应用,毕竟parsing 只是中间结果,根本还是为了应用。 初看过去,掉的链子有大约三分之二,是很容易修补的:就是一个力气活,还没完全到位的问题。力气活是时间的函数,这个不怕。假以时间,自然功成,这个有开发更久的英语parser 为前例,心中是有数的。还有三分之一的问题,可能真是痛点。痛点仍然可以用patching 在应用的时候绕过它去。也就是说,一个如本文展示的鲁棒parser ,其缺陷(掉链子) 一般并不影响其应用和产品开发,这 在我们多年的NLP 实践中被反复验证了 。研究这些痛点有语言学本身的意义,更多地为与学术同行分享究竟难点在哪里,而不是说,解决或不解决它对使用会有实质的影响。 接着练: 上句掉链子的地方,一个是 “是” 那里。“当代”是名词修饰语,也挂错了地儿,成了补语(buyu)。 同位语也掉了链子,“祖师爷”与“乔老爷”没接上。 这些属于力气活,明确知道是哪里的问题,假以时间,会自然而然到位的。 可是“谱系划分格局”里面的问题就可能是痛点之一:case by case ,总是可以修补,譬如 “谱系划分”可以作为词典里的合成词处理,扩大词典即可。但这种很难“预先”补全的半开放集的合成词,一旦不在词典,“划分”作为动词谓语的可能就凸显了,这个做谓语的错误的parse 路径就很难避免。 这里,“分析处理” 与“机制” 所掉的链子,是一个非常简单的错误,“机制”这类词常带动词作为修饰语,这个常见现象系统早已处理了,不过是这个词本身漏缺了本该有的lexical feature ,不足为虑。 “和...... 等价”的框式搭配也不是问题,但它在这个句子受到了前面的牵累,掉了链子。前面的问题解决了,这个搭配就自然解决了。 所以这个句子的parsing 没看到什么特别的痛点。 这个也没痛点。“分析处理”与“机制”的问题同上,是小菜。 这个句子的parsing 问题大一些。不过白老师的这个句子本身也确实 “拗口”一些。一个非专业人士的human 在脑子里要parse 这个句子,怕也有类似的困扰。所以虽然掉了一些链子,也还没有到不reasonable 的程度。领域独立的自动parsing 当然到不了专业人士的分析程度,但与非专业人士的分析能力,距离也不大了。 “正则”这个词条没在词典里面,是一个局部问题,词典不全,专业术语未及收入。 其他的问题(“机制”的掉链子)与前同,也是局部的,不足为虑。此句也没有看到什么难以跨越的痛点。 以上这些观察讨论就是想根据具体实际语料的分析,看看中文毛毛虫里面,哪些是痛点,哪些是可以一眼见底的。这样也许对各位会有启发。值得一提的是,这里展示的只是一个parsing 结果的“骷髅”,用图形方式表现其概貌。真正的parsing ,其数据结构和结果的representation 比以上图示要丰富得多。譬如每个 词和词组身上所带有的多维信息,可以在下一步为应用提供很多由于结构不足或掉链子而所需要的弥补,这些在一个简单的树形图示中是展示不了的。 如果白老师的文字反映的是中文表达及其结构的典型或偏难的水平(因为所表达的概念和思想其实是有相当深度的,句式也比较复杂),那么一个毫无特别准备的中文parser 在结构层面的分析和应对,应该说已经基本靠谱了。换句话说,中文parsing 的毛毛虫,其实没有想象的那样高不可攀。它确实比欧洲语言难缠,但也仍然是一条扁平而且并不太长的毛毛虫。其特有的难度可以比喻为这个毛毛虫是一个生了很多毛刺的虫,形体曲线不光滑,形象不美。中文从结构美学来看,的确不如欧洲语言的体型曲线,因此 中文的parser 也确实有更多的长尾问题使得它较难开发和完善。没有多年的经验积累和语言学素养有时感觉就是个迷宫。然而,宏观上来看,中文结构也没有“丑陋”到影响它的主体分析和应用的程度。 博客上我囿于知识局限(因为不懂DL 啊),放出豪言说,即便是DL(Deep Learning) ,也只能逼近人工编码的毛毛虫,要想超越,我看不到这个可能。我知道说这个话得罪了主流的99% ,全领域乃至全社会正围绕深度学习狂欢呢,这个冷水泼得太不合时宜。可是我是有意做这个挑战的。于是有人回说,不出七年,就会看到这小子自打脸。这位后生(从说话的口气猜想,也就是个不知天高地厚初出茅庐的后生)其实蛮nice ,死刑以后还给了老夫七年缓刑,正好是七年之痒的尺度,也算是仁至义尽了。反正到时候我等已经是退休年龄,死猪不怕开水烫了:世界是初生牛犊的,只有夕阳才属于我。 但其实,我的挑战不仅仅是为了刺激,也不仅仅是男人十有九吹的德性,而是因为作为攀登者, 当你已经看到山顶近在咫尺的时候,在你心里已经没有登顶的疑问了。你有一种一辈子追求终于 【美梦成真】 的兴奋需要与世界分享。这个曾长期被认为是自然语言理解(NLU )和人工智能(AI )的核心难题的大山,英语已经登顶,汉语即将登顶,这种创造者的欢乐是抑制不住的。既然你已经可以登顶,那你对无论多牛的对手说一句,你永远赶不上我,这个命题是逻辑恒真的。别说七年之痒,就是再多的时间宽限,后来者最多、最多也不过是登顶,平起平坐而已,怎么可能超越呢?除非我们说的不是同一座山。从这个角度,DL 牛不牛,已经不相干了。何况,再牛的算法在实践证明自己之前,保留一丝怀疑,与心存敬畏一样,是一种合理的心态(DL在图像和语音处理中已经证明了自己,而text NLU迄今未有突破,尚待证明)。攀登者在登山过程中绕过了那么多荆棘和悬崖,很难想象一个自动学习的算法也恰好可以绕过去。作为同一战壕的对手,我们对DL 同行抱着期许,同时也拭目以待吧。 【相关】 【白硕 - 穿越乔家大院寻找“毛毛虫”】 【新智元笔记:parsing 的鲁棒比精准更重要】 【征文参赛:美梦成真】 【立委随笔:中文之心,如在吾庐】 《语言学家是怎样炼成的》 【立委科普:语法结构树之美(之二)】 语言创造简史 【 科研笔记:开天辟地的感觉真好 】 创造着是美丽的 【置顶:立委科学网博客NLP博文一览(定期更新版)】
个人分类: 立委科普|6732 次阅读|1 个评论
【围脖:做 parsing 还是要靠语言学家,机器学习不给力】
热度 1 liwei999 2016-1-6 07:01
对于AI和NLP,统计是万金油,可以做一切任务。有些是统计擅长的甚至必需的,有些则不是。parsing 就属于后者,没有一个统计的必要性。宏观上看,语言的文法是蛮清晰的一套规则系统,人可以直接去 model,无需借助统计去学习。至于长尾的习惯用法或不规则现象,机制上没有问题,专家可以通过专家词典(expert lexicon)内的词驱动规则去应对,虽然人力并不能一蹴而就,但机器学习因此而遇到的稀疏数据(sparse data)则更具挑战性。 当然,如果有海量的带标数据(可惜没有,目前基本只在玩一个新闻文体的非常有限量的宾州树),统计学习出来的 parser 也有可能逼近专家编码的规则系统,但也只是逼近而已。想超过语言学专家码农的精雕细刻,看不出这种可能性。 机器能超过人的地方很多,譬如计算,譬如记忆,譬如在人力不及的巨大搜索空间里寻求最佳路径,譬如在多参数中玩大数据平衡,等等。然而,对于像 parsing 这样的专家可以见底的任务(tractable tasks),机器学习无法超越训练有素的专家码农,虽然它可以超越平庸之徒。 微博评论: 七年之痒 呵呵。 // @Hyperddr : 感觉七年内肯定要被打脸。。。。// @砰砰的小屋 : 转发微博 【相关】 《新智元笔记:对于 tractable tasks, 机器学习很难胜过专家》 【新智元笔记:深度 parsing 的逻辑化 】 《新智元:有了deep parsing,信息抽取就是个玩儿》 《泥沙龙笔记:漫谈自动句法分析和树形图表达》 【立委科普:语法结构树之美】 【立委科普:语法结构树之美(之二)】 【征文参赛:美梦成真】 泥沙龙笔记:parsing 是引擎的核武器,再论NLP与搜索 泥沙龙笔记:从 sparse data 再论parsing乃是NLP应用的核武器 【置顶:立委科学网博客NLP博文一览(定期更新版)】
个人分类: 立委科普|4414 次阅读|1 个评论
【新智元笔记:WSD与分析器,兼谈知识图谱与分析器】
热度 1 liwei999 2015-12-4 01:07
我: 热闹啊。一路扫过去: 印象是这里大概是搞NLP和语义的人最集中的地儿了,托白老师的福。大树底下好乘凉。 二是现在讨论很杂,大概是大家伙儿热情太高。 wang: 白老师在,人正常说话能看出破绽,那机器就无抬头日啊 @wei 昨天挺不好意思,耽误老师太晚 我: 昨天泼冷水,是从我个人角度 不知道你已经钻进去了,没有退路了,:) wang: 李老师,精力也是令人佩服!还好,基本出来了啊 白: 权当预处理了,第0层。也符合伟哥的分层思想。 我: 那是有熬出头的意思,因为成果在望?我以前枪毙过一个加拿大的 WSD 公司。 wang: 前面我已经提到,不用太好的WSD也可以支持不错的句法分析,--这是我的结论。因为我的3级语义码识别,可85%的精度,而这是纯多义词情况比例,而正常句子一般47%的多义词。 嗯,李老师文中提过 我: 哦 文中说过了。人老了,记不住自己都说过啥。反正喷得多了,就成了维吾尔族姑娘,也不怕白老师们抓小辫子了。 白: WSD不是一个解决方案,只是可以和分析器形成流水作业的一道工序。当解决方案用就大错特错了。如果目标在深层的话。 wang: 白老师,确实皆通,句句问到点子上,白老师总结的对,是而这流水协同作用。 我: 关键的要害是,吃力不讨好 wang: 这样,全句的词义消歧92左右,包括单义词,这个正确率,确实不影响太多的句法分析。若算一级语义分类正确率的话,还要再高些。 我: WSD 肯定可以帮到句法,但是费工太大。世界上的事体,没有不能补偿的。譬如眼瞎了,耳朵就灵敏了。不用WSD,别的资源就来补偿了,也可以走得很远。实在绕不过去, 就 keep ambiguity untouched,等到语用的时候再对付。语用的时候,语义问题一下子缩小到一个子集,一个domain,所以原来大海一样的 WSD,就变得 tractable 了,有时甚至自然而然就消失了,不再是问题了。 wang: 嗯,我也不总是一下有解,有些留到后层处理。结果良好,可以接受。 同意,确实有些看似问题,后来不用解决也自然解决 白: 伟哥的意思,解空间是人定的,你搞不清是a还是b,就在论域里增加一个ab好了,后面自有机会把论域再缩小的。不要为了一定要在信息不足的条件下强行分出a还是b,把系统搞重。 我: @白硕 对,白老师说话清楚多了。 第 0 层的想法也对。因为 WSD 这东西可以依靠 density,而 density 是可以在一篇文章的 discourse 下做的。这个有拉动全局帮助局部的好处。 白: 嗯,董振东老师举的“薄熙come”的例子犹如在耳。 我: 这个加 ab 的状况对于完美主义者 心里觉得别扭。但其实,模糊是自然常见的状态,而清晰才是少见的人力的结果,而且还保不定会被翻盘。既然是自然状态,那么就应到不得不清晰的时候去对付它。而不是先清晰了,再去等着不断翻盘。 白: 这个就是量子力学里的叠加态,保留到最后坍缩。 wang: 嗯,刚才也谈到翻盘的,有些压根前期就清晰不了。 我: 不过 话说回来,如果先做 WSD 多少把太不像话的枝枝蔓蔓减除一些。然后做句法 应该还是有益的,只要小心就好。 wang: 嗯,的确减不少。比如一个句子多义词,按平均5个义项算,句子长了各种组合也有很大的规模。 白: 这个,人有时不是这样的。在信息不足时强行坍缩,遇到trigger再翻盘的情况,在段子里一把一把的。我们都被耍弄得很开心。 我: WSD 是个不一定需要结构就可以做个大概的东西。因为全盘的 density 对于 WSD 的影响,比局部的结构对它影响,一般来说,更大一些。这样,discourse 的威力就可以发挥了。道理就在,WSD 虽然是针对个体的词,但是一个 discourse 里面的词的共现,是有很自然的语义相谐性。n 个多义词在同一个 discourse,互相作用,互相消歧。 白: 我就给它定位第0层 他窗口很小,哪里看得见density。 wang: 我接受白老师定义的0层。 是这样的,况且更多是单义词。连续几个多义词在一起也有,处理也还可以,就是连续未登陆词,会出问题 白: 伟哥知道薄熙come的典故吗? 我: 不知道这个典故,但是似乎可以想见董老师的机智和幽默。跟董老师太熟了。 薄熙来了。 薄熙来走了 薄熙come了。 薄熙come走了。 类似这样的? 白: 说的是某汉语文章译成英语,文中出现了5次薄熙来,译成英语后,四次翻译成“Bo Xilai”,一次翻译成“Bo Xi Come”。 wang: 这样啊, 我: 那个系统还是蛮了不起的。 敢于对抗 one sense per discourse 的大原则。我们一般是不敢的。 wang: 从篇章提取关键核心词进行制导,会有改善,但也有改错的时候 我: 你反正是做粗线条,而且是 n-best。目标不是真地消歧,而是减负,譬如从原来的5个,减到3个(3-best)。 wang: 把句法分析结果进行分层,组成篇章理解框架,这样的高级层处理也许,比单句作战要好,---现阶段,只是想想,不敢干。 说的对。 白: 某年我在百度和谷歌翻译上测试周恩来、薄熙来、朱云来,效果依次递减。 wang: @白硕 专有名词词典,能及时跟进,可能就好很多 白: 分析器的lookahead,也是减负,一个道理。 wang: 我目前是选3个,有些很明显分数很大,基本取Top1 白: 但他只看cat不看subcat,典型的活人叫那啥憋死。 wang: 白老师说我? 白: 不是,说分析器,LR(k),包括我自己提出的角色反演算法,都是这个毛病。 wang: main cat 确实误导很多, 我: 哪家分析器只看 cat 不看 subcat?cat 算个球啊,太大太空太少。 白: 不是工程用的。@wei  wang: 同意李老师,subcat 太细也不是好事,但是解说容易懂, 我: 想做分析器,基本靠 cat,那是 CL 教科书玩具系统留下的后遗症。 最大的后遗症来自: S --》NP VP NP --》 DT JJ* NN+ VP --》 V VP --》 V NP 被这么灌输了一阵子,看自然语言就当儿戏了。所以才会有共识:lexicalist ,这可能是 NLP 领域这么多年最大的共识了。没有人不认为 不需要词典化。词典化的方案各个不同而已。 白: 这话分两截说,一是那么定义的问题要用那种系统去做,二是那么定义问题是不对的所以不该那么做。 wang: 我觉得CFG,自由太过了,加上cat 太粗 ,因此这个处理,很难跳出。加上词汇化,又太稀疏。词汇化n元开大了,稀疏问题相当严重。 白: cat是可自定义的,没有谁一定说非得NP,VP。关键是自定义work的,都要到词例化层级。 我: POS 的地位是阴错阳差弄出来的。 结果是大家误以为,必须做 POS,而且 assume POS 是个 solved problem,然后 在 POS 上做分析器,擦不完的屁股。 白: @wang 你这个n=5也是醉了。 wang: 我是语义码,同义词词林义项1400个,比几万,十万词构成规模,还是轻量级。 跳过POS我认为是个进步,但是后面的还是有很多问题要解决。 刘: 在SMT里面ngram的n=5甚至更多都不少见,现在的neural language model已经超过ngram了,rnn、lstm可以更好的利用远距离依赖。 wang: 刘老师晚上好! 刘: 你好!好久不见了 wang: 是啊,好久不见。白老师来大连,我不凑巧没见着,李老师太远 ,呵呵 白: 如果想要处理段子,还是激进一点好,太保守会消灭笑点的。 我: 觉得白老师有时也走火入魔,一天到晚想着段子,这个对做 real life NLP 是 “过度思维”。 白: @wei real life NLP并不是只有一种 我: 段子的事儿,可以启迪思维,但做的时候,就该放在一边。 白: 看应用场景 @刘群 处理WSD的RNN可以和处理句法的RNN流水。 我刚想说5-gram真是巧合,记得多年前你的学生和骆卫华同一天答辩那次,就是用的5-gram。 洪: 李维擂鼓佟佟佟, 分明书生老黄忠。 转战各群显神勇, 定军山找不轻松。 我: 最后一句湿不懂 @洪涛Tao 雷: @wei 老当益壮的意思 我: 哦 四大名著唯一没看下去的是《三国》, 不知道定军山与黄忠的实体关系,这个需要 IE 一下就好了,看 “三国图谱” 一目了然。 洪: @wei 你需要找你的定军山,具体地说,找你的 夏侯渊 。 我: 特佩服读破万卷书的人,譬如洪涛这样的简直就是神人,或人神。 我从小读书就慢,所以读书少,要是在西方的教育体系下,早就淘汰了。 看我女儿上课,那教科书参考书都比砖头还厚,都是一目十行的人才能对付。 我看一个句子,要读三遍,咀嚼五遍,然后进一步退三步地反刍。 洪: 老李今天的作业,看在一个陌生领域,如何迅速建图谱 我: 图谱的问题已经解决,就是工作量了。这是说的真心话,不是胡吹。 图谱的抽取挖掘,比起舆情真地不是一个量级的难度。 舆情都做的,回头做图谱,没有做不成的,不管啥 domain,你给钱,我就做。 白: 可以和郝总PK了 wang: 各位老师,我先下了,各位多聊,温馨提示:白老师也要注意休息!各位聊好 88! 洪: @wei 要不说你老黄忠。可能比老黄忠还老黄忠,因为都不用诸葛亮使激将法。 我: 陌生领域做图谱,关键是要有一个好的分析器。只有这样,domain 的 porting 才可以做得很薄很快。而 分析器 基本是不变的,现成的,那剩下还有啥难的? 你 parsing 做浅了,IE 图谱就必须做深,反之亦然,parsing deep 了,IE 就是薄薄的一层。 反正不管到那个领域,语言还是那个语言,文法还是那个文法,只有词汇(术语,ontologyy)才有最大的差异。 洪: 国内大家都晚安。我也赶紧跑,否则十有八九成为老李刀下的夏侯渊 我: 晚安晚安。 【相关】 词义消歧(WSD) 【置顶:立委科学网博客NLP博文一览(定期更新版)】
个人分类: 立委科普|3292 次阅读|1 个评论
泥沙龙笔记:语言处理没有文法就不好玩了
热度 1 liwei999 2015-7-5 20:56
查 :短信、微信推陈出新的表达,很多未必符合语法,也流行起来了 独 : 那就都是例外 北 : 例外太多了 , 规则就意义不大了 查 : 例外多了 , 就没必要语法了 雷 : 不符合语法的,原来是有的。这个就像幻肢, phantom 。 例外太多,我们记忆受不了 立委:例外是文法的有机成分。可枚举的例外是文法中词典化了的部分,不可枚举的例外形成的是小规则,自然更是文法的一部分(不能规则化的,不可能是不可枚举的,否则人脑也记不住)。文法就是一个大规则加小规则加个性例外的层级体系,这样看文法、组织和运用文法可以避免很多不毛之争。 毛 : 要是没有语法,整个理科工科就没法玩了。 雷 : 再比如,洋泾浜,还是有语法的 , 语法是最大可能的覆盖 。 大多数人不知道语法是什么,但可以告诉你一句话说的对不对 立委:我女儿在初中是学文法的。她最得意就是,她是全班文法最好的学生。画树 ,这边 叫 diagramming ,被认为是一个需要学生学习的技术, 她画得特熟。直到有一天 , 我给她看我的 parser , 她试了很多句子,稀奇古怪的,网上摘来的,自己瞎编的,有意为难它,可鲁棒性是我设计研发 parser的主要目标之一,兵来将挡,水来土屯,不怕。测试了一通以后,对老爸佩服得五体投地,说,我画不了那么好,有些句子画不了。 雷 : 这个是 english 课上教的 , 目的是使学生写的东西规范 立委:其实 你一点点教文法给机器,后来就会发现,它很多时候,超过了创造者对文句的文法分析能力,给你一些 nice surprises。因为 , 你教的东西 , 你可能忘记,但机器不会忘记。 独 : 中文自然语言处理往往以自己的特殊性来自表,并发展出了分层理论,但是严格来说,都是语言,只有复杂性的区别,没有特殊性的区别。 立委:同意。我对过分强调中文特殊性,不认同,而且也无益。中文并没有想象的那么特殊,中文的现象,大多数在西方语言也有表现。当然表现的比例可能不一样。譬如,常为人乐道的汉语的动宾复合词“吃饭”、“游泳”等,可以分离: 饭我吃过了,游了半个小时泳 ,等等。其实分离复合动词英语也有,不过不是动宾结构,但实质同样是在词典与句法的接口上,处理机制是一样的。英语短语动词就常常分离: take the coat off = take off the coat, 从语言处理工具的角度,基本需要的是同样的武器库。 白 : 我关于语法的想法: 1 、有而且在起作用,但不是书上那种; 2 、用于理解的语法和用于生成的语法不同,前者宽后者严; 3 、语法的限制是柔性的,局部突破不会把人憋死。 立委:点 2 是显然的,无需争论。 1 也基本是 common sense , 当然有文法在起作用,无论你是下意识与否,无论文法如何有弹性和模糊性。如果没文法,人说的话,怎么与随机单词发生器区分?【自注:这个说法有点极端,见博文《 儿童语言没有文法的问题 》】。书上的文法就是一个模型,任何模型都想逼近真实文法(语言共同体共同的那个核),但总不能完全达到。 第三点说的是,文法不是死规定 , 极端的例子就是,诗人的破格 poetic license , 不能因为局部的犯规就认为没有文法。其实破格之所以被解释为破了文法规矩,反证了文法的存在, 白 : 关于语法无用,可以这么理解:无论是自动机串烧还是自动机加计数器,都可以用等价的 RNN 从语料训练出来,中间不经过一个显性的语法表示环节。从语料直接到 RNN , RNN 的背后, “ 实质上 ” 存在一个语法。但是人和机器都不用关心 。 只有 RNN 的设计者略微关心一下就可以 独 : 对 , 是隐含语法的 立委:debug 如何 , 发现有错 , 如何 debug ? retraining ?人不关心怎么行 ? 如何维护提升系统的性能? 白 : 两件事,一个是通用机制实现的错误,这可以让不懂语法的人 debug ;另一个是训练结果错误,这要人为增补训练数据,这一块要懂点语法的人来做。 立委:说的是第二种。这类问题是 inc r emental 的提高问题 , 而增加语料 retraining 来应对,基本是 隔靴搔痒 retraining 要做好 , 谈何容易 , 这是开发统计 parser的致命缺点之一 symbolic 系统 , 如果多层而模块化, debug 是直截了当的, fine tuning , 与修汽车师傅类似。 白 : 把规则直接编译为 RNN , 路径是存在的 , 可以作为 RNN 的初始参数。之后再上语料,去覆盖规则照顾不到的部分。目前为止我还没看到自然语言需要超出有限自动机加计数器的范围 , 当然这个范围中有些是 CFG 处理不了的,回退到浅层。 立委:有限状态可以对付自然语言 , 没有疑问。规则擅长精度 , 也无疑义。精度可以接近人的水平,可以超过平庸的人。 至于覆盖面 , 那是时间的函数,但有一个长尾问题, d iminishing return , 因此 , 最后让统计兜底 , 还是有益的,弥补一下覆盖面。如果面对的是大数据,不要统计也无问题 , 漏了就漏 , 反正有大数据的冗余。 【置顶:立委科学网博客NLP博文一览(定期更新版)】
个人分类: 立委科普|4938 次阅读|2 个评论
中文处理的迷思之二:词类标注模块是句法分析的前提
热度 1 liwei999 2011-12-28 16:59
词类标注(Part-of-speech Tagging: POS)是汉语句法分析的前提么? 没有这回事。 如果说为了模块化开发的方便,中文处理系统先行词类标注,再行句法分析,这种类似于多数英语分析器的架构从工程上看确实有一定的道理,但是词类标注并非句法分析的前提。 点破这一迷思的最直接的例证就是完全可以设计一个跳过POS模块的中文句法分析系统,事实上笔者目前研发的中文系统就跳过了这个环节。 有问:没有词类,怎么可能施行句法分析? 回答是:谁说没有词类?词典里给出的任何类别标注都是一种“词类”。的确,没有这些“词典的类别”信息,句法分析就没有抽象度,就难以编写规则来parse千变万化的语句。 POS 模块的本义在于词类消歧,即根据上下文的条件标注唯一的一个语法词类,譬如把同一个“学习”在不同的上下文中分别标注为名词或动词。前面说过,这样做有工程上的便利,因为如果词类标注是准确的话,后续的句法分析规则就可以简化,是动词就走动词的规则,是名词就走名词的规则。但这只是问题的一个方面。 问题的另一面是,汉语中的词类歧义特别严重(语法学界甚至曾经有云:词无定类,入句而后定),不但很多词都可以是名词或动词,而且动词和形容词的界限也很模糊。三大类实词在汉语中如此界限不分明,这曾经被认为是中文信息处理寸步难行的最大障碍。歧义如此严重的语言如果实行两步走的架构,有可能陷入错误放大(error propagation)的怪圈,即,词类区分的错误进一步造成句法分析的灾难。这是因为有些词类区分的条件在局限于 local context 的 POS阶段尚未到位,POS 模块过早地标注了错误的词类。 根据 keep ambiguity untouched 的经验法则,遵循 adaptive development 的基本原则,跳过 POS 的环节,让句法分析直接建立在词典信息的基础之上,是解决上述矛盾的一个有效方法。具体来说就是,只利用词典里面的静态类别信息来做分析,无须倚赖专有的POS模块先行消歧。如果一个词既可以做名词,又可以做动词,那就把两个类别同时标注到这个词上(另一种有效的做法是,只标逻辑动词,不标名词,因为差不多所有的词典动词都可活用为名词,给逻辑类动词在词典标注名词基本增加不了新的信息,这些选项都是系统内的协调的事儿)。编写句法规则的时候,对于兼类词(譬如动名兼类词 “学习”)与单纯词(譬如纯名词“桌子”)根据条件的宽松分别对待即可。 需要说明的是,笔者并不反对先POS后Parser的中文处理策略,只是指出POS并非Parser的先决条件,还有一种句法直接建立在词典之上的一步走的策略。顺着这个思路,一步半的策略也许更好。所谓一步半,就是做一个简单的 POS 模块(算是半步)把词类区分中比较大路容易的现象标注好,并不求对所有词类施行标注。 【 中文处理的迷思之一:切词特有论 】 【 中文处理的迷思之二:词类标注是句法分析的前提 】 【 中文NLP迷思之三:中文处理的长足进步有待于汉语语法的理论突破 】 【置顶:立委科学网博客NLP博文一览(定期更新版)】
个人分类: 立委科普|6824 次阅读|1 个评论
[转载]python optparse 模块使用, 及解决中文出错的过程
yaozongzhuan 2011-8-2 23:45
使用命令行时,如果要添加选项的话,python 2.3里新增加了一个模块叫optparse,也是专门来处理命令行选项的。 from optparse import OptionParser parser = OptionParser() parser.add_option("-p", "--pdbk", action="store_true", dest="pdcl", default=False, help="write pdbk data to oracle db") parser.add_option("-z", "--zdbk", action="store_true", dest="zdcl", default=False, help="write zdbk data to oracle db") (options, args) = parser.parse_args() if options.pdcl==True: print 'pdcl is true' if options.zdcl==True: print 'zdcl is true' add_option用来加入选项,action是有store,store_true,store_false等,dest是存储的变量,default是缺省值,help是帮助提示 最后通过parse_args()函数的解析,获得选项,如options.pdcl的值。 基本使用流程: 》1.產生一個 optparse.OptionParser 的物件。可以在產生時將"程式的命令列說明" (usage) 做為參數,交給 OptionParser 的建構子: 1 2 3 from optparse import OptionParser MSG_USAGE = "myprog arg1 " optParser = OptionParser(MSG_USAGE) 》2.呼叫 OptionParser.add_option() 加入接受的 option: 1 2 3 4 5 optParser.add_option( "-f" , "--file" , action = "store" , type = "string" , dest = "fileName" ) 參數 action 有許多種類,預設是 "store",所以即使省略也無妨,其它的 action 種類在下面會繼續說明。 若有一個以上的 option,重覆上述的方式加入(注意:以下省略了 action 參數): 1 2 3 4 optParser.add_option( "-s" , "--someopt" , type = "string" , dest = "someopt" ) 》3.呼叫 OptionParser.parse_args() 進行解讀。如果沒有傳入參數, OptionParser 預設會以 sys.argv 為對象進行解讀。OptionParser.parse_args() 會傳回一個 tuple,由 optparse.Values 和 一個 list 所組成。下例傳入一個假造的參數列: 1 2 3 4 5 6 7 fakeArgs = options, args = optParser.parse_args(fakeArgs) print options.fileName print options.someopt print args 最後會得到的輸出結果: 1 2 3 thefile.txt xyz 這是一個簡單的範例,說明了 OptionParser 的一般使用方式。透過這個例子,可以看到如果為程式加入 option, 並且在程式中取得 option argument 和 positional argument。OptionParser.parse_args() 還有許多用法,下面會說明一部份。 為程式加入 flag option: 許多的 Unix 命令擁有 "-v", "-q" 的 option,代表"提供詳細訊息"或是"不顯示訊息"。要做到這一點,只要在程式中加入下列的 option : 1 2 3 parser.add_option( "-v" , action= "store_true" , dest= "verbose" ) parser.add_option( "-q" , action= "store_false" , dest= "verbose" ) opts, args = parser.parse_args() 第一個 add_option() 加入了一個 "-v" 的 option;如果命令列參數中出現了 "-v",則 opts.verbose 將會是 True;相反的,第二個 add_option() 加入了一個 "-q" option;如果命令列參數中出現了 "-q",則 opts.verbose 將會是 False,這兩者並不相悖,程式可以設計成:當收到 "-v" 時,顯示詳細訊息;當收到 "-q" 時,顯示概略訊息,或完全不顯示;當兩者都沒有收到,則顯示一般的訊息。 設定 option 的預設值: 上述的例子都假設命令例會收到預期中的 option,那麼如果沒有 option 時,接收到的 option 值會是什麼呢?答案是 None!如果想為 option 提供預設值,只要在 OptionParser.parse_args()中指定參數 default 就行了: 1 2 3 parser.add_option( "-v" , action= "store_true" , dest= "verbose" , default = True) parser.add_option( "-q" , action= "store_false" , dest= "verbose" ) opts, args = parser.parse_args() 上述的程式碼為程式加入了兩個 option,當 "-v" 沒有出現時, opts.verbose 預設值為 True;當 "-q" 被指定時, opts.verbose 被設定為 False,和上一個例子有點不同。再看下一個例子: 1 2 parser.add_option( "-v" , action= "store_true" , dest= "verbose" , default=False) parser.add_option( "-q" , action= "store_false" , dest= "verbose" , default=True) opts.verbose 的預設值會是什麼?答案是 True,最後一個指定到同一個目標的 option 預設值會被採用。 一般的 option 亦可加入預設值: 1 parser.add_option( "-f" , action= "store" , dest= "fileName" , default = "defaultConfig.txt" ) 為程式加入說明: 標準的 Unix 命令大多有著 "-h", "--help" 的 option,會將使用說明印出來。在 OptionParser.parse_args() 中指定 "help" 參數,並指定說明的字串,就可以為這個 option 加入說明了: 1 2 3 4 5 parser.add_option( "-v" , action= "store_true" , dest= "verbose" , default=False, help= "make lots of noise " ) 當程式收到 "-h" 或 "--help",交給 OptionParser 解讀時,會自動印出說明內容,而忽略其它的 argument: 1 2 3 4 5 6 7 8 9 usage: yourscript arg1 arg2 options: -h, --help show this help message and exit -v, --verbose make lots of noise -q, --quiet be vewwy quiet (I 'm hunting wabbits) -fFILE, --file=FILE write output to FILE -mMODE, --mode=MODE interaction mode: one of 'novice' , 'intermediate' , 'expert' 還記得一開始提到交給 OptionParser 建構子的參數 MSG_USAGE 嗎? optparse 套件對 usage 訊息也提供了一些支援。在 usage 中使用 "%prog" 關鍵字, OptionParser 會自動將其代換為程式名,即 sys.args : 1 usage = "usage: %prog arg1 arg2" 如果程式名為 "myprog",則出現在 help 訊息中的 usage 就會是: 1 usage = "usage: myprog arg1 arg2" 如果OptionParser 建構子沒有收到任何參數,則會自動產生一個 usage 訊息: 1 "usage: %prog " 前提是程式沒有 positional argument。甭擔心 option 在 help 訊息中排列的方式, OptionParser 會搞定一切,如同前面程式所示。 python 使用OptionParser的时候使用中文出错的解决过程 今天在使用OptionParser的时候,在填写帮助信息的时候使用了中文,却发现报了一系列的错误 代码如下 #!/usr/bin/env python #coding:UTF-8 import ConfigParser,sys try: from optparse import OptionParser except ImportError: try: from optik import OptionParser except ImportError: raise ImportError, ‘Requires Python 2.3 or the Optik option parsing library.’ parser = OptionParser() parser.add_option(”-f”,”–file”,dest=”name”, help=”帮助信息”,metavar=”FILE”) parser.add_option(”-q”,”–quit”, action =”store_false”,dest=”verbose”,default=”True”, help=”帮助信息”) (options,args) = parser.parse_args() 错误信息 File “get-parser-cn.py”, line 23, in module (options,args) = parser.parse_args() File “/usr/lib/python2.5/optparse.py”, line 1387, in parse_args stop = self._process_args(largs, rargs, values) File “/usr/lib/python2.5/optparse.py”, line 1431, in _process_args self._process_short_opts(rargs, values) File “/usr/lib/python2.5/optparse.py”, line 1538, in _process_short_opts option.process(opt, value, values, self) File “/usr/lib/python2.5/optparse.py”, line 774, in process self.action, self.dest, opt, value, values, parser) File “/usr/lib/python2.5/optparse.py”, line 796, in take_action parser.print_help() File “/usr/lib/python2.5/optparse.py”, line 1657, in print_help file.write(self.format_help().encode(encoding, “replace”)) UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 124: ordinal not in range(128) 和 @smallfish9 同学 讨论了一番,并搜索了一些资料后,找到了解决方案如下 import sys reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入 ,可以注释掉来试试,会提示没有这个setdefaultencoding方法的 #!/usr/bin/env python #coding:UTF-8 import ConfigParser,sys reload(sys) print sys.getdefaultencoding() sys.setdefaultencoding(’utf-8′) try: from optparse import OptionParser except ImportError: try: from optik import OptionParser except ImportError: raise ImportError, ‘Requires Python 2.3 or the Optik option parsing library.’ parser = OptionParser() parser.add_option(”-f”,”–file”,dest=”name”, help=”帮助信息”,metavar=”FILE”) parser.add_option(”-q”,”–quit”, action =”store_false”,dest=”verbose”,default=”True”, help=”帮助信息”) (options,args) = parser.parse_args() 再进行 python get-parser-cn.py -h 的时候,可爱的中文就出来了 今天在使用OptionParser的时候,在填写帮助信息的时候使用了中文,却发现报了一系列的错误 代码如下 #!/usr/bin/env python #coding:UTF-8 import sys from optparse import OptionParser parser = OptionParser() parser.add_option(”-f”,”–file”,dest=”name”,help=”帮助信息”,metavar=”FILE”) (options,args) = parser.parse_args() 错误信息 File “get-parser-cn.py”, line 23, in module (options,args) = parser.parse_args() File “/usr/lib/python2.5/optparse.py”, line 1387, in parse_args stop = self._process_args(largs, rargs, values) File “/usr/lib/python2.5/optparse.py”, line 1431, in _process_args self._process_short_opts(rargs, values) File “/usr/lib/python2.5/optparse.py”, line 1538, in _process_short_opts option.process(opt, value, values, self) File “/usr/lib/python2.5/optparse.py”, line 774, in process self.action, self.dest, opt, value, values, parser) File “/usr/lib/python2.5/optparse.py”, line 796, in take_action parser.print_help() File “/usr/lib/python2.5/optparse.py”, line 1657, in print_help file.write(self.format_help().encode(encoding, “replace”)) UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 124: ordinal not in range(128) 和 @smallfish9 同学 讨论了一番,并搜索了一些资料后,找到了解决方案如下 import sys reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入 ,可以注释掉来试试,会提示没有这个setdefaultencoding方法的 完整的代码 #!/usr/bin/env python #coding:UTF-8 import sys from optparse import OptionParser reload(sys) print sys.getdefaultencoding() sys.setdefaultencoding(’utf-8′) parser = OptionParser() parser.add_option(”-f”,”–file”,dest=”name”, help=”帮助信息”,metavar=”FILE”) (options,args) = parser.parse_args() 再进行 python get-parser-cn.py -h 的时候,可爱的中文就出来了
个人分类: Python|7690 次阅读|0 个评论
【立委科普:语法结构树之美】
热度 2 liwei999 2011-6-4 20:04
【立委科普:语法结构树之美】
我们知道,语句呈现的是线性的字符串,而语句 结构却是二维的。我们之所以能够理解语句的意思,是因为我们的大脑语言处理中枢能够把线性语句解构(decode)成二维的结构:语法学家常常用类似下列的上下颠倒的树形图来表达解构的结果(所谓 parsing)。 上面这个树形图叫作依从关系树形图(dependency tree,常常用来表达词或词组之间的逻辑语义关系,与此对应的还有一种句法树,叫短语结构树 phrase structure tree,更适合表达语句单位之间的边界与层次关系)。直观地说,所谓理解了一句话,其实就是明白了两种意义:(1)节点的意义(词汇意义);(2)节点之间的关系意义(逻辑语义)。譬如上面这个例子,在我们的自动语句分析中有大小六个节点:【Tonight】 【I】 【am going to enjoy】 【the 【song】 Hero】 【again】,分解为爷爷到孙儿三个层次,其中的逻辑语义是:有一个将来时态的行为【am going to enjoy】,结构上是老爷爷,他有两个亲生儿子,两个远房侄子。长子是其逻辑主语(Actor) 【I】,此子是其逻辑宾语(Undergoer)【the song Hero】,父子三人是语句的主干(主谓宾,叫做 argument structure),构成语句意义的核心。 两个远房侄子,一个是表达时间的状语(adverbial)【Tonight】,另一个表达频次的状语(adverbial)【again】。最后,还有一个孙子辈的节点【song】,他是次子的修饰语(modifier,是同位语修饰语),说明【Hero】的类别。 从句法关系角度来看,依从关系遵从一个原则:老子可以有n(n=0)个儿子(图上用下箭头表示),而儿子只能有一个老子:如果有一个以上的老子,证明有结构歧义,说明语义没有最终确定,语言解构(decoding)没有最终完成。虽然一个老子可以有任意多的下辈传人,其亲生儿子是有数量限制的,一般最多不超过三个,大儿子是主语,次子是宾语,小儿子是补足语。比如在句子 “I gave a book to her” 中,动词 gave 就有三个亲儿子:主语 【I】, 宾语【a book】,补足语 【to her】. 很多动词爷爷只有两个儿子(主语和宾语,譬如 John loves Mary),有的只有一个儿子(主语,譬如 John left)。至于远房侄子,从结构上是可有可无的,在数量上也是没有限量的。他们的存在随机性很强,表达的是伴随一个行为的边缘意义,譬如时间、地点、原因、结果、条件等等。 自然语言理解(Natural Language Understanding)的关键就是要模拟人的理解机制,研制一套解构系统(parser),输入的是语句,输出的是语法结构树。在这样的结构树的基础上,很多语言应用的奇迹可以出现,譬如机器翻译,信息抽取,自动文摘,智能搜索,等等。 在结束本文前,再提供一些比较复杂一些的语句实例。我把今天上网看到的一段英文输入给我们研制的parser,其输出的语法结构树如下(未经任何人工编辑,分析难免有小错)。 说明:细心的读者会发现下列结构树中,有的儿子有两个老子,有的短语之间互为父子,这些都违反了依存关系的原则。其实不然。依存关系的原则针对的是句法关系,而句法后面的逻辑关系有时候与句法关系一致,有时候不一致。不一致的时候就会出现两个老子,一个是与句法关系一致的老子,一个是没有相应的显性句法关系的老子。最典型的情形是所谓的隐性(逻辑)主语或宾语。 譬如第一个图示中的右边那棵结构树中,代词「I」就有两个老子:其句法老子是谓语动词「have learned」,它还有一个非谓语动词(ING形式)的隐性的逻辑老子「(From) reading」,也做它的逻辑主语 (who was reading? I)。再如第二个图示中的语法结构树中,定语从句的代表动词「were demonstrating」的句法老子是其所修饰的名词短语「students」,但逻辑上该名词短语却是定语从句动词「were demonstrating」的主语(actor)。有些纯粹的句法分析器(parser)只输出句法关系树,而我们研制的parser更进一步,深入到真正的逻辑语义层次。这样的深层分析为自然语言理解提供了更为坚实的基础,因为显性和隐性的关系全部解构,语义更为完整。 我们每天面对的就是这些树木构成的语言丛林。在我的眼中,它们形态各异,婀娜多姿,变化多端而不离其宗(“语法”)。如果爱因斯坦在时空万物中看到了造物主的美,如果门捷列夫在千姿百态的物质后面看到了元素表的简洁,语言学家则是在千变万化的语言现象中看到了逻辑结构之美。这种美的体验伴随着我们的汗水,鼓励我们为铲平语言壁垒而愚公移山,造福人类。 后记:When I showed the above trees to my daughter today, she was amazed, pretty! She asked, is this what you made the machine to do in diagramming sentences? Yes. Wow, incredible. I don't think I can diagram the sentences as nice as these. Can some day the machine be smarter than you the creator? Is the machine learning by itself? I said, it is not self-learning at this point and the self-learning system is too research oriented to put into a real life system now. But I do observe from time to time that the machine we made for parsing sometimes generate results of very complicated sentences way beyond our expectation, better than most human learners at times. This is because I encode the linguistics knowledge piece by piece, and machine is super good at memory. Once taught, it remembers every piece of knowledge we programmed into the system. Over the years of the development cycle, the accumulation of the knowledge is incredibly powerful. We humans are easy to forget things and knowledge, but machine has no such problems. In this sense, it is not impossible that a machine can beat his creator in practical performance of a given task. 回答: I don't think tree is the way my mind thinks 1窃以为,句法树迄今仍是大脑黑箱作业的最好的模拟和理论 2 does not really matter 作者: 立委 (*) 日期: 06/03/2011 04:30:20 As long as subtree matching is a handy and generalized way of info extraction. Tree is not the goal but a means to an end. The practical end is to extract knowledge or facts or sentiments from language. In practice, our goal is not to simulate the human comprehension per se , the practical goal is: Quote 在这样的结构树的基础上,很多语言应用的奇迹可以出现,譬如机器翻译,信息抽取,自动文摘,智能搜索,等等。 【相关博文】 《泥沙龙笔记:漫谈自动句法分析和树形图表达》 【 科普小品:文法里的父子原则 】 【立委科普:语法结构树之美(之二)】 《新智元:有了deep parsing,信息抽取就是个玩儿》 泥沙龙笔记:parsing 是引擎的核武器,再论NLP与搜索 乔氏 X 杠杠理论 以及各式树形图表达法 【 立委随笔:创造着是美丽的 】 【 科研笔记:开天辟地的感觉真好 】 【立委科普:美梦成真的通俗版解说】 【征文参赛:美梦成真】 【立委科普:自然语言parsers是揭示语言奥秘的LIGO式探测仪】 【置顶:立委科学网博客NLP博文一览(定期更新版)】
个人分类: 立委科普|11081 次阅读|3 个评论
Survey of Parser Usage
rxn 2010-5-8 13:48
今天看到Hal Daume lll的一篇博文,就是对是否使用parser进行了调查(当然不包括shallow parsing),于是就投了一票,投票结果是这样子的:
个人分类: 学习心得|3302 次阅读|0 个评论
《立委随笔:语言自动分析的两个路子》
liwei999 2010-4-17 12:42
以前断续写过一些随笔。 (899 bytes) Posted by: 立委 Date: September 22, 2008 12:18AM 不外是两个路子,基于语法规则的路子,基于统计的机器学习(ML)路子,或者是二者的某种结合。不过,语法的路子并不大用乔姆斯基的转换生成语法。除了教授在实验室做玩具系统外,应用系统中最多用最熟练的是基于模式匹配的有限状态自动机(FSA)的formalism,而不是常提到的上下文自由语法。 自然语言理解(NLU)的核心是自动句法分析(parsing). 这个领域的发展使得 parsing 这样一个繁复的的任务逐渐细化成由浅及深的很多子任务,从词类识别(Part-of-speech tagging),基本短语抱团(phrase chunking), 到句法主谓宾关系(SVO parsing), 语义角色标注(Role Labeling)等等。这就为系统的模块化创造了条件,有利于软件系统的开发和维护。通常的做法是为每个子任务编制模式匹配规则,构成一个一环套一环的系列(pipeline structure), 前一个模块的输出就是下一个模块的输入, 搭积木一样构筑语言理解的大厦(via some form of cascaded FSAs)。 随着硬件的飞速发展,parsing 已经可以处理海量数据(terabyte 量级),应用型开发不再是梦想了。 【置顶:立委科学网博客NLP博文一览(定期更新版)】
个人分类: 立委科普|7583 次阅读|2 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-14 09:34

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部