月度归档:2011年12月

初学者报道(3) CRF 中文分词解码过程理解

Deep Learning Specialization on Coursera

好久没有来写文章了,这段时间我研究了一下CRF,也找人请教过,下面写下自己的一些理解,在网络上也找过CRF的资料,大多为英文,对于解码的描述,就说用viterbe 实现,如何实现,却很少提及,以下为我的理解,如有错误欢迎指正,这样可以帮助我理解,先行谢过!

一,标记问题解决分词:就是将 词语开始和结束的字标记出来,就能对一个句子完成分词,假设使用两个标记B (开始),E(结束)对句子进行处理,如:“民主是普世价值”,民B主E是B普B世E价B值E, 这样标记明确,分词结果就明确了。

二,如何找到最好的标记结果:知道如何用标记的方式解决分词,那么怎么为一个句子找到一个最好的标记序列呢,CRF为这样的问题提供了一个解决方案,对于输入序列X1,X2...Xn(对于分词,就是那个句子),求这个输入序列条件下 某个 标记序列(Y1,Y2...Yn)的概率 极值。

三,解码过程:

这里用一个例子来说明,对于CRF的原理,我不做详述,我是半吊子,怕解释不好,只说一下我理解的解码过程。

CRF的公式:P(y|x,λ)=Σj λjFj(y,x)/Z(x)     //这里的j都是下标

先说问题:

使用4标记,B-开始,O-单独成词,M-词语中间的字,E-结束,

特征:一元特征,V-1 当前字的前一个字,V0当前字,V1当前字的后一个字

二元特征,各标记间的转移特征

句子如下:

民   主   是   普   世   价   值

B     B    B    B   B    B    B

O    O   O    O   O    O     O

M   M   M   M   M   M   M

E     E    E    E    E    E     E

Viterbe解码就是在以上由标记组成的 数组中 搜索一条 最优的路径。

对于每一列的每一个标记,我们都要计算到达该标记的分数,这个分数由三部分组成,它本身的一元特征权重W,它前面一个字标记的 路径分数PreScore,前面一个字标记到当前标记转移特征权重TransW,

1. 计算第一列的分数(score),对于,‘民’来说,我们要算 B,O,M,E的Score,因为是第一列,所以PreSocre和TransW都是0,就不用计算,只需要计算自己的一元特征的权重:

对于标记,B,我们计算它的Score,记为S1B=W1B=w(null,民,B)+w(民,B)+w(民,B,主)  //这些特征的意思是: (null,民,B),当前字为 ‘民’标记为B,前面一个字为空,(民,B):当前字为‘民’,标记为B,(民,B,主):当前字为'民',标记为B,当前字的后一个字为‘主’。特征的权重都是在训练时得到的。

对于标记,O,M,E,一样要计算W1O,W1M,W1E,从而得到分数S1O,S1M,S1E

2.对于第二列,首先要计算是每个标记的 一元权重W2B,W2O,W2M,W2E.

对于B,到达该标记的最大分数为:S2B=Max((v(BB)+S1B),(v(OB)+S1O),(v(MB)+S1M),(v(EB)+S1E))+W2B,其中v(BB)等为B到B的转移特征的权重。这个也是由训练得到的。同样对于第二列的O,M,E也要计算S2O,S2M,S2E

3.一直计算到最后一列,‘值’字的所有标记,得到S7B,S7O,S7M,S7E.比较这四个值中的最大值,即为最优路径的分数,然后以该值的标记点为始点 回溯得到最优路径(这里在计算过程中,要记录到达该标记的前一个标记,用于回溯)

终于写好!:)

 

专业老友痛批立委《迷思》系列搅乱NLP秩序,立委固执己见

Deep Learning Specialization on Coursera

G 是资深同行专业老友很多年了,常与立委有专业内外的交流。都是过来人,激烈交锋、碰撞出火是常有的事儿。

昨天给他邮去《迷思》系列三则,他即打电话说:“好家伙,你这是惟恐天下不乱啊。看了《迷思》,我就气不打一处来。你这是对中文NLP全盘否定啊,危言耸听,狂放颠覆性言论。偏激,严重偏激,而且误导。虽然我知道你在说什么,你想说什么,对于刚入门的新人,你的《迷思》有误导。”
听到他气不打一处来,我特别兴奋:“你尽管批判,砸砖。我为我说的话负责,每一个论点都是多年琢磨和经验以后的自然流露,绝对可以站住。对于年轻人,他们被各种’迷思‘误导很多了,我最多是矫枉过正,是对迷思的反弹,绝对不是误导。”
现剪辑摘录批判与回应,为历史留下足迹 。内行看门道,外行看热闹,欢迎围观。
2011/12/28 G

The third one is more to the point - 严格说起来,这不能算是迷思,而应该算是放之四海而皆准的“多余的话”
Frankly, the first two are 标题党 to me. Most "supporting evidence" is wrong.
Well, I think I know what you were trying to say. But to most people I believe you are misleading.
No, I was not misleading, this is 矫枉过正 on purpose.  
At least I think you should explain a bit more, and carefully pick up your examples.
Take one example. Tokenizing Peoples Republic of China is routinely done by regular expression (rule based) based on capitalization, apostrophe and proposition (symbolic evidences), but NOT using dictionary.
that is not the point.  yes, maybe I should have chosen a non-Name example ("interest rate" 利率 is a better example for both Chinese and English), but the point is that closed compounding can (and should) be looked up by lexicons rather than using rules.
What you are referring to I guess is named entity recognition. Even that chinese and English could be significantly different.
No I was not talking about NE, that is a special topic by itself.  I consider that to be a low-level, solved problem, and do not plan to re-invent the wheel.  I will just pick an off-shelf API to use for NE, tolerating its imperfection.
I wouldn't be surprised if you don't do tokenization, as you can well combine that in overall parsing. But to applications like Baidu search, tokenization is the end of text processing and is a must-have.
Chunking of words into phrases (syntax) are by nature no different from chunking of morphemes (characters) into words (morphology).  Parsing with no "word segmentation" is thus possible.  

In existing apps like search engines, no big players are using parsing and deep NLP, yet (they will: only a time issue), so lexical features from large lexicons may not be necessary.  As a result, they may prefer to adopt a light-weight tokenization without lexicons.  That is a different case from what I am addressing here.   NLP discussed in my post series assumes the need for developing a parser as its core. 
Your attack to tagging is also misleading. You basically say if a word has two categories, just tag it both without further processing. That is tagging already.
That is not (POS) tagging in the traditional sense: the traditional sense of tagging is deterministic and relies on context.  Lexical feature assignment from lexical lookup is not tagging in the traditional sense.  If you want to change the definition, then that is off the topic.
What others do is merely one step forward, saying tag-a has 90% correct while tag-b 10% chance. I did rule based parser before and I find that is really helpful (at least in terms of speed). I try the high chance first. If it making sense, I just take it. If not, I come back trying the other. Let me know if you don't do something like that.
Parsing can go a long way without context-based POS tagging.  But note that at the end I proposed 一步半 approach, i.e. I can do limited, simple context-based tagging for convenience' sake.  The later development is adaptive and in principle does not rely on tagging.
Note here I am not talking about 兼语词 which is essentially another unique tag with its own properties. I know this is not 100% accurate but I see it in chinese something like 动名词 in English.
In fact, I do not see that as 兼语词, but for the sake of explanation of the phenomena, I used that term (logically equivalent, but to elaborate on that clearly requires too much space).  In my actual system, 学习 is a verb, only a verb (or logical verb).  
Then this touches grammar theory. While we may not really need a new theory, we do need to have a working theory with consistency. You may have a good one in mind. But to most people it is not the case. For example, I see you are deeply influenced by 中心词 and dependency. But not everyone even aware of that, not to mention if they agree with. Till now there is no serious competition, as really no large scale success story yet. We need to wait and see which 学派 eventually casts a bigger shadow.
Good to be criticized.  But I had a point to make there.
【相关博文】

本文引用地址:http://blog.sciencenet.cn/home.php?mod=space&uid=362400&do=blog&id=523458

欢迎大家试用信息学科数字化知识服务网络平台

Deep Learning Specialization on Coursera

 

各位同学、老师、网友,大家好,由中科院自动化所综合信息中心承担、国家科技部支持的自动化学科数字化知识服务网络平台已经上线。网站地址是:http://autoinnovation.ia.ac.cn/,欢迎大家使用,并且给我们提出意见和建议。

     下面是平台使用过程中的几点注意事项:(1)初次使用时,如果您的浏览器没有安装silverlight插件,请您按提示下载安装该插件;(2)如果您在使用中遇到一些小问题,可以查看网站的帮助文件3该平台框架实际为数据库检索系统,因此您输入检索词后,需要等待下拉菜单出现相应检索词,选中相应检索词,之后在点击搜索按钮,如下图所示

  

  1 检索说明示意图

   平台旨在挖掘、分析和展现我国自动化领域(包括部分计算机、通信的交叉领域)自1960年以来的学术发展情况。我们力求展现出国内自动化领域学术活动的立体全景,对领域内的文献、学者、机构、以及研究方向、方法、理论和工具等,做了全方位的关联分析。为了更好地展现知识,我们在精心设计页面布局的基础上,使用了SilverlightAjax等技术进行网站开发;为了让展现出来的知识更加精确,我们在数据处理中使用了包括命名实体识别与排歧、文本聚类在内的多种数据挖掘技术。

该平台凝结了综合信息中心的老师、开发人员、以及多位学生的大量心血。无论是在前期设计、后台数据处理、还是前台网站开发,我们都本着精益求精的原则,团队内部经过多次尝试和试验,力求选择最佳方案。但是作为一个人员有限的开发团队,我们的思虑与广博的群体智慧相比还是有所逊色的。为此,我们热诚地欢迎各位老师、同学、工作人员向我们提出您宝贵的建议。我们欢迎大家从各个层面给我们提出意见和建议,您的意见和建议将是敦促我们进步和改进的最给力的源泉!

我们的联系方式是:

email: y.liu@ia.ac.cn

 新浪微博:http://weibo.com/autoinnovation

                 http://weibo.com/finallyly

如果您觉得方便,可以留下您的姓名和单位,我们将在我们的网站进行致谢!

数据共享计划:

同时,我们将与数据堂展开合作,开源部自然语言处理相关资源,期待大家的关注。欢迎大家就NLP资源的需求问题,以及文本挖掘的技术问题互相交流和探讨。

 

 

 

迷思之三:中文处理的长足进步有待于汉语语法的理论突破

Deep Learning Specialization on Coursera
严格说起来,这不能算是迷思,而应该算是放之四海而皆准的“多余的话”:任何学科的理论突破都可能引起应用层面的长足进步,不说也罢。其所以归类到这个迷思系列,是因为这样的高论在中文处理界常常甚嚣尘上,有严重误导青年学子的危害。其结果是喊了多年理论突破,理论并没有突破,反而造就了一批民科妄想家(只是指出这个现象而已,对事不对人,有对号入座者,后果自负)。单这个后果还不算要紧,要紧的是这一说法为应用家的无能提供了心理挡箭牌,使得他们多年来畏畏缩缩,裹足不前:不是我们无能,是汉语太“个别”了(国民党的败将的口头禅就是如此:不是国军无能,是中共太狡猾了)。
汉语语法与西文语法真地如此不同,以致现有的语言学理论对它束手无策或难以实行了么?这是一个可以永远争论下去,没有绝对答案的问题。然而从应用层面,我们可以回答的问题是:在西文的语言处理中所使用的各种形式化手段和机制(formalism, mechanism and devices)对于汉语是否适用?
立委集20年NLP经验,可以负责任地回答这个问题:西文处理的机制和手段对于中文处理大多是适用的、可行的,也许有不够用的时候,需要机制的拓展(not necessarily 理论的突破),但总体而言是用得不够,是不会用、不善用的问题。语法虽然因语言不同而不同,但NLP武器库里的轻重火器大多是独立于具体语言之上的(language independent)。俗话是语糙理不糙的:拉不出矢,不能怪茅坑。
拿英语处理与中文处理的比较为例。诚然,由于汉语比较灵活,语言表达对形式化手段倚赖较弱,总体而言处理起来确实比英语要难。英语表达的形式化手段除了功能词(介词等),还包括词尾(如:-ed,-ing,-s,-able,-er),汉语没有完全对应的词尾形式,只有一些功能小词(譬如:了,着,过,们),而且这些词还常常省略。尽管英语在欧洲语言里面词尾是非常少的了,但是别小看这几个词尾对于简化词法语法分析的作用。中文处理较少这种便利。回到功能词上看,譬如介词连词,虽然英语有的,汉语基本都有,但是汉语省略功能词的时候远远多于英语,这是有统计根据的,也符合我们日常的感觉:往坏里说,中国人比较偷懒,说话不严谨;往好里说是,中国人很懂低炭,能省则省,汉语很灵活。举一个例子,可见汉语的省略是普遍的:
(1)对于这件事,我的看法,我们应该听其自然。
(2)这件事我的看法应该听其自然。
上述句子(2)译成英语,省去功能词是难以想象的。
这种缺少形式化手段的所谓汉语的“意合”式表达方式确实使得中文的电脑处理比英语处理困难。
这只是问题的一个方面,是从量上考察,即汉语的表达比英语往往更省略,更不严谨,更需要上下文。问题的另一面是从难点的性质上来看,中文处理遇到的问题究竟有多少是英文处理中没有遇到过的?我的答案是:很少很少。很多歧义问题省略问题,英语同样存在,只是不如汉语那么普遍而已。既然问题的性质基本相同,处理问题的机制和手段就同样适用。逻辑的结论就是:英语处理领域积累的经验和手段在中文处理中大有可为。如果有核武器攻下了英语这个堡垒,就没有道理攻不下汉语。只要不做上帝(因为只有上帝才是完美的),就没有裹足不前静待理论突破的道理。
其实,真正做过西文处理也做过中文处理的同行应该不难认同上述看法。我说的是“真正”,对西文处理浅尝辄止的不算(浅尝辄止的包括NLP硕士课程中的语法形式化游戏:S: NP VP; NP: Det? Adj+ NN+ NN; VP: V NP?)。如果你比较深入地implement过一个英语分析器,针对的是大批量的真实语料,你会发现:英语的深入分析所遇到的难点需要调动很多手段,需要很细致的工作,而这些手段和工作也正是中文处理所需要的。我常常这样跟朋友说英语处理和中文处理的异同:如果你做硕士作业,导师给你一周做出一个语言处理系统能够处理50%以上的语言现象,在英语是可行的,在汉语是不可行的。因为你可以下载一个免费POS Tagger,在POS基础上编制一套粗糙的语法交差。然而,如果你要面对真实语料做一个比较适用的语言分析系统,如果英语需要开发N个月,调动 M 个手段,那么用同样的时间和手段,中文开发也大体可以到位。
中文处理有没有特有的难点,甚至难以踰越的障碍,需要不需要理论突破?回答是肯定的,但是很多难点是可以绕着走的,个别难以企及的问题是可以搁置的,因为上帝允许不完美的系统。无论如何,中文处理不能长足进步,是我们应用学家的耻辱和失败,而决不能嫁祸到理论家的头上。
处理尚未成功,同志仍需努力,立委与工匠同仁共勉。

中文处理的迷思之二:词类标注是句法分析的前提

Deep Learning Specialization on Coursera

词类标注(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 模块(算是半步)把词类区分中比较大路容易的现象标注好,并不求对所有词类施行标注。

中文处理的迷思之一:切词特有论

Deep Learning Specialization on Coursera
电脑的中文处理业界有很多广为流传似是而非的迷思。在今后的随笔系列中,准备提出来分别讨论。
迷思之一:切词是中文(或东方语言)处理特有的前提,因为中文书写不分词。
切词作为中文处理的一个先行环节,是为了模块化开发的方便,这一点不错。但它根本就不特有。
任何自然语言处理都有一个先行环节,叫 tokenization,就是把输入的字符串分解成为词汇单位:无论何种书面语,没有这个环节,辞典的词汇信息就无以附着,在词汇类别的基础上的有概括性的进一步句法语义分析就不能进行。中文切词不过是这个通用的 tokenization 的一个案例而已,没有什么“特有”的问题。
有说:中文书写不分词,汉字一个挨一个,词之间没有显性标识,而西文是用 space(空白键)来分词的,因此分词是中文处理的特有难题。
这话并不确切,语言学上错误更多。具体来说:
1 汉语词典的词,虽然以多字词为多数,但也有单字词,特别是那些常用的功能词(连词、介词、叹词等)。对于单字词,书面汉语显然是有显性标志的,其标志就是字与字的自然分界(如果以汉字作为语言学分析的最小单位,语言学上叫语素,其 tokenization 极其简单:每两个字节为一个汉字),无需 space.
2 现代汉语的多字词(如:中华人民共和国)是复合词,本质上与西文的复合词(e.g. People's Republic of China)没有区别,space 并不能解决复合词的分界问题。无论中西,复合词都主要靠查词典来解决,而不是靠自然分界(如 space)来解决(德语的名词复合词算是西文中的一个例外,封闭类复合词只要 space 就可以了,开放类复合词则需要进一步切词,叫 decompounding)。如果复合词的左边界或者右边界有歧义问题(譬如:“天下” 左右边界都可能歧义, e.g. 今天 下雨;英语复合副词 "in particular" 的右边界可能有歧义:e.g. in particular cases),无论中西,这种歧义都需要上下文的帮助才能解决。从手段上看,中文的多字词切词并无任何特别之处,英语 tokenization 用以识别复合词 People's Republic of China 和 in particular 的方法,同样适用于中文切词。

突然有一种紧迫感:再不上中文NLP,可能就错过时代机遇了

Deep Learning Specialization on Coursera
与业內老友的对话:在‘用’字上狠下功夫
耳边响起了林副主席关于系统开发的谆谆教导:
Quote
带着问题做,活做活用,做用结合,急用先做,立竿见影,在‘用’字上狠下功夫。
这是从与朋友的内部交流中得来的。赶的是编造名人名言的时髦。
~~~~~~~~~~~~
在我发文【坚持四项基本原则,开发鲁棒性NLP系统】以后,有业内资深老友表示非常有意思,建议我把NLP方面的博文系列汇集加工,可以考虑出书:
Quote
A good 经验之谈. Somehow it reminds me this --
带着问题学,活学活用,学用结合,急用先学,立竿见影,在‘用’字上狠下功夫。

You made a hidden preamble -- a given type of application in a given domain.

A recommendation: expand your blog a bit as a series, heading to a book.

My friend 吴军 did that quite successfully. Of course with statistics background. So he approached NLP from math perspective -- 数学之美 系列

You have very good thoughts and raw material. Just you need to put a bit more time to make your writing more approachable -- I am commenting on comments like "学习不了。" and "读起来鸭梨很大".

I know you said: "有时候想,也不能弄得太可读了,都是多年 的经验,后生想学的话,也该吃点苦头。:=)"

But as you already put in the efforts, why not make it more approachable?

The issue is, even if I am willing to 吃点苦头, I still don't know where to start 吃苦头, IF I have never built a real-life NLP system.

For example, 词汇主义 by itself is enough for an article. You need to mention its opponents and its history to put it into context. Then you need to give some examples.

文章千古事,网上涂鸦岂敢出书?这倒不是妄自菲薄,主要是出书太麻烦,跟不上这个时代。我回到:

吴军's series are super popular. When I first read one of his articles on the Google Blackboard, recommended by a friend, I was amazed how well he structured and carried the content. It is intriguing. (边注:当然,他那篇谈 Page Rank 的文章有偏颇,给年轻人一种印象,IT 事业的成功是由技术主宰的,而实际上技术永远是第二位的。对于所谓高技术企业,没有技术是万万不行的,但企业成功的关键却不是技术,这是显而易见的事实了。)For me, to be honest, I do not aim that high.  Never bothered polishing things to pursue perfection although I did make an effort to try to link my stuffs into a series for the convenience of cross reference inside the related series. There are missing links which I know I want to write about but which sort of depends on my mood or time slots.  I guess I am just not pressed and motivated to do the writing part.  Popularizing the technology is only a side effect of the blogging hobby at times.  The way I prove myself is to show that I will be able to build products worth of millions, or even hundreds of millions of dollars.

网上的文字都是随兴之所至,我从来不写命题作文,包括我自己的命题。有时候兴趣来了,就说自己下一篇打算写什么什么,算是自我命题,算是动了某个话题的心思。可是过了两天,一个叉打过去,没那个兴致和时间了,也就作罢。

赶上什么写什么,这就是上网的心态。平时打工已经够累了,上网绝不给自己增加负担。

So far I have been fairly straightforward on what I write about.  If there is readability issue, it is mainly due to my lack of time.  Young people should be able to benefit from my writings especially once they start getting their hands dirty in building up a system.

Your discussion is fun. You can see and appreciate things hidden behind my work more than other readers.  After all, you have published in THE CL and you have almost terminated the entire segmentation as a scientific area. Seriously, it is my view that there is not much to do there after your work on tokenization both in theory and practice.

I feel some urgency now for having to do Chinese NLP asap.  Not many people have been though that much as what I have been (luckily), so I am in a position to potentially build a much more powerful system to make an impact on Chinese NLP, and hopefully on the IT landscape as well.  But time passes fast . That is why my focus is on the Chinese processing now, day and night.  I am keeping my hands dirty also with a couple of European languages, but they are less challenging and exciting.

再说苹果爱疯的贴身小蜜 死日(Siri)

Deep Learning Specialization on Coursera

话说这苹果真是能折腾,一个技术课题硬是折腾成大众话题,弄得满世界都在谈论苹果爱疯的贴身小蜜 “死日”(Siri,没追踪来源,但瞧这名字起的),说是她无所不能,能听得懂主人的心思,自动打理各项事务,从天气预报,到提供股票信息,甚至做笔记。不服不行,人家就是把这个科幻世界的机器人功能产品化了,挑起了大众的好奇心。虽然毁誉参半,批评者与追星者一样多,还是为语言技术扬了名。这不,圣诞节到了,调查表明,美国青少年最喜欢的圣诞礼品有三:(1)礼物券,也就是钱,爱怎么花自己定当然好;(2)时装(爱美之心);(3)苹果产品(因为那是时髦的代名词)。

前些时候,与朋友谈到死日,我说它有三大来源:首先是语言技术,包括语音识别和文句分析。语音识别做了很多年了,据说技术相当成熟可用了(语音虽然是我的近邻了,但隔行如隔山,我就不评论了)。文句分析(这可是我的老本行)当然有难度,但是因为死日是目标制导,即从目标app反推自然语言的问句表达法,所以分析难度大为降低,基本上是 tractable 的(见《立委随笔:非常折服苹果的技术转化能力》)。第二个来源是当年 AskJeeves 借以扬名的 million-dollar idea (见《【 IT风云掌故:金点子起家的 AskJeeves 】》),巧妙运用预知的问题模板,用粗浅的文句分析技术对应上去,反问用户,从而做到不变应万变,克服机器理解的困难。最近有人问死日:Where can I park the car? 死日就反问道:you asked about park as in a public park, or parking for your vehicle? 虽然问句表明了这位贴身小蜜是绣花枕头,徒有其表,理解能力很有限,但是对于主人(用户)来说,在两个选项中肯定一个不过是举“口”之劳的事情。第三个来源就是所谓聊天系统,网上有不少类似的玩具(见【立委科普:问答系统的前生今世】 第一部分) ,他是当年面临绝路的老 AI 留下的两大遗产之一(另一个遗产是所谓专家系统)。

最近摆弄汉语自动分析,有老友批评得很到位:

Quote
俺斗胆评论一下,您的系统长项应该在于自然 语言理解

至于语法树,应该是小儿科。韩愈说“句读之不知,惑 之不解”。

语法树的作用在于“知句读”,而您的系统应该强调“解惑”。

俺感觉照现在的发展速度,一个能够真正通过图灵检验的系统应该离我们不远了。虽然现在已经有系统号称能通过,但是都是聊天系统,干的本身就是不着调的工作。离真正意义的图灵检验还有距离。

是小儿科,可是很多人弄不了这小儿科呢。
日期: 12/05/2011 13:41:30

从high level看,从100年后看,说小儿科也差不多。

但是你所谓的解惑,离开现实太远。

一般来说,机器擅长分析、抽取和挖掘,上升到预测和解惑还有很长的路,除非预测是挖掘的简单延伸,解惑就是回答黑白分明的问题。

"聊天系统,干的本身就是不着调的工作",一点儿不错,那是所谓 old AI 的残余。不过,即便如此,我在 苹果 Siri 中看到的三个来源(1.自然语言技术:语音和文字 2 Askjeeves 模板技术;3. 所谓 AI 聊天系统)中也看到了它的影子,它是有实用价值的,价值在于制造没有理解下的 "人工智能" 的假象。

昨天甜甜秀给我看:Dad, somebody asked Siri: what are you wearing? Guess how he replies?

Siri: “Aluminosilicate glass and stainless steel. Nice, huh?”

这种 trick,即便知道是假的,也让人感觉到设计者的一份幽默。

那天在苹果iPhone4s展示会上,临结束全场哄堂大笑,原来苹果经理最后问了一个问题:Who are you?

Siri 扭着细声答道:

I am your humble assistant.

面对难以实现的人工智能,来点儿幽默似的假的人工智能,也是一种智慧。

相关篇什:
《立委随笔:非常折服苹果的技术转化能力。。。》
《从新版iPhone发布,看苹果和微软技术转化能力的天壤之别》
科学网—【立委科普:问答系统的前生今世】
科学网—《立委随笔:人工“智能”》

坚持四项基本原则,开发鲁棒性NLP系统

Deep Learning Specialization on Coursera
以前说过,一个 real life 自然语言处理系统,其质量和可用度除了传统的 data quality 的衡量指标查准度(precision)和查全度(recall)外,还有更为重要的三大指标:海量处理能力(scalability), 深度(depth)和鲁棒性(robustness)。本文就简单谈一下鲁棒性。

为了取得语言处理的鲁棒性(robustness),一个行之有效的方法是实现四个形容词的所指:词汇主义(lexicalist); 自底而上(bottom-up); 调适性(adaptive);和数据制导(data-driven)。这四条是相互关联的,但各自重点和视角不同。系统设计和开发上贯彻这四项基本原则, 是取得坚固性的良好保证。有了坚固性,系统对于不同领域的语言,甚至对极不规范的社会媒体中的语言现象,都可以应对。这是很多实用系统的必要条件。

先说词汇主义策略。词汇主义的语言处理策略是学界和业界公认的一个有效的方法。具体说来就是在系统中增加词汇制导的个性规则的总量。自然语言的现象是如此复杂,几乎所有的规则都有例外,词汇制导是必由之路。从坚固性而言,更是如此。基本的事实是,语言现象中的所谓子语言(sublanguage),譬如专业用语,网络用语,青少年用语,他们之间的最大区别是在词汇以及词汇的用法上。一般来说,颗粒度大的普遍语法规则在各子语言中依然有效。因此,采用词汇主义策略,可以有效地解决子语言的分析问题,从而提高系统的鲁棒性。
自底而上的分析方法。这种方法对于自浅而深的管式系统最自然。系统从单词出发,一步一步形成越来越大的句法单位,同时解析句法成分之间的关系。其结果是自动识别(构建)出来的句法结构树。很多人都知道社会媒体的混乱性,这些语言充满了错别字和行话,语法错误也随处可见。错别字和行话由词汇主义策略去对付,语法错误则可以借助自底而上的分析方法。其中的道理就是,即便是充满了语法错误的社会媒体语言,其实并不是说这些不规范的语言完全不受语法规则的束缚,无章可循。事实绝不是如此,否则人也不可理解,达不到语言交流的目的。完全没有语法的“语言”可以想象成一个随机发生器,随机抽取字典或词典的条目发射出来,这样的字串与我们见到的最糟糕的社会媒体用语也是截然不同的。事实上,社会媒体类的不规范语言(degraded text)就好比一个躁动不安的逆反期青年嬉皮士,他们在多数时候是守法的,不过情绪不够稳定,不时会”突破”一下规章法律。具体到语句,其对应的情形就是,每句话里面的多数短语或从句是合法的,可是短语(或从句)之间常常会断了链子。这种情形对于自底而上的系统,并不构成大的威胁。因为系统会尽其所能,一步一步组合可以预测(解构)的短语和从句,直到断链的所在。这样一来,一个句子可能形成几个小的句法子树(sub-tree),子树之内的关系是明确的。朋友会问:既然有断链,既然子树没有形成一个完整的句法树来涵盖所分析的语句,就不能说系统真正鲁棒了,自然语言理解就有缺陷。抽象地说,这话不错。但是在实际使用中,问题远远不是想象的那样严重。其道理就是,语言分析并非目标,语言分析只是实现目标的一个手段和基础。对于多数应用型自然语言系统来说,目标是信息抽取(Information Extraction),是这些预先定义的抽取目标在支持应用(app)。抽取模块的屁股通常坐在分析的结构之上,典型的抽取规则 by nature 是基于子树匹配的,这是因为语句可以是繁复的,但是抽取的目标相对单纯,对于与目标不相关的结构,匹配规则无需cover。这样的子树匹配分两种情形,其一是抽取子树(subtree1)的规则完全匹配在语句分析的子树(subtree2)之内(i.e. subtree2 > subtree1),这种匹配不受断链的任何影响,因此最终抽取目标的质量不受损失。只有第二种情形,即抽取子树恰好坐落在分析语句的断链上,抽取不能完成,因而印象了抽取质量。值得强调的是,一般来说,情形2的出现概率远低于情形1,因此自底而上的分析基本保证了语言结构分析的鲁棒性,从而保障了最终目标信息抽取的达成。其实,对于 worst case scenario 的情形2,我们也不是没有办法补救。补救的办法就是在分析的后期把断链 patch 起来,虽然系统无法确知断链的句法关系的性质,但是patched过的断链形成了一个完整的句法树,为抽取模块的补救创造了条件。此话怎讲?具体说来就是,只要系统的设计和开发者坚持调适性开发抽取模块(adaptive extraction)的原则,部分抽取子树的规则完全可以建立在被patched的断链之上,从而在不规范的语句中达成抽取。其中的奥妙就是某样榜戏中所说的墙内损失墙外补,用到这里就是结构不足词汇补。展开来说就是,任何子树匹配不外乎check两种条件约束,一是节点之间的关系句法关系的条件(主谓,动宾,等等),另外就是节点本身的词汇条件(产品,组织,人,动物,等等)。这些抽取条件可以相互补充,句法关系的条件限制紧了,节点词汇的条件就可以放宽;反之亦然。即便对于完全合法规范的语句,由于语言分析器不可避免的缺陷而可能导致的断链(世界上除了上帝以外不存在完美的系统),以及词汇语义的模糊性,开发者为了兼顾查准率和查全率,也会在抽取子树的规则上有意平衡节点词汇的条件和句法关系的条件。如果预知系统要用于不规范的语言现象上,那么我们完全可以特制一些规则,利用强化词汇节点的条件来放宽对于节点句法关系的条件约束。其结果就是适调了patched的断链,依然达成抽取。说了一箩筐,总而言之,言而总之,对于语法不规范的语言现象,自底而上的分析策略是非常有效的,加上调适性开发,可以保证最终的抽取目标基本不受影响。
调适性上面已经提到,作为一个管式系统的开发原则,这一条很重要,它是克服错误放大(error propagation)的反制。理想化的系统,模块之间的接口是单纯明确的,铁路警察,各管一段,步步推进,天衣无缝。但是实际的系统,特别是自然语言系统,情况很不一样,良莠不齐,正误夹杂,后面的模块必须设计到有足够的容错能力,针对可能的偏差做调适才不至于一错再错,步步惊心。如果错误是 consistent/predictable 的,后面的模块可以矫枉过正,以毒攻毒,错错为正。还有一点就是歧义的保存(keeping ambiguity untouched)策略。很多时候,前面的模块往往条件不成熟,这时候尽可能保持歧义,运用系统内部的调适性开发在后面的模块处理歧义,往往是有效的。
最后,数据制导的开发原则,怎样强调都不过分。语言海洋无边无涯,多数语言学家好像一个爱玩水的孩子,跳进海洋往往坐井观天,乐不思蜀。见树木不见森林,一条路走到黑,是很多语言学家的天生缺陷。如果由着他们的性子来,系统的overhead越来越大,效果可能越来越小。数据制导是迫使语言学家回到现实,开发真正有现实和统计意义的系统的一个保证。这样的保证应该制度化,这牵涉到开发语料库(dev corpus)的选取,baseline 的建立和维护,unit testing 和
regression testing 等开发操作规范的制定以及 data quality QA 的配合。理想的数据制导还应该包括引入机器学习的方法,来筛选制约具有统计意义的语言现象反馈给语言学家。从稍微长远一点看,自动分类用户的数据反馈,实现某种程度的粗颗粒度的自学习,建立半自动人际交互式开发环境,这是手工开发和机器学习以长补短的很有意义的思路。
以上所述,每一条都是经验的总结,背后有成百上千的实例可以详加解说。不过,网文也不是科普投稿,没时间去细细具体解说了。做过的自然有同感和呼应,没做过的也许不明白,等做几年就自然明白了,又不是高精尖的火箭技术。

应该立法禁止分词研究 :=)

Deep Learning Specialization on Coursera

RE: 分词当然是第一关。这个没弄好,其他的免谈


现如今中文自动分析的瓶颈早已不是分词了
日期: 12/05/2011 15:43:43
半个世纪折腾进去无数的人力了。是 overdone,很大程度上是科研财主(sponsors)和科学家共同的失职。应该立法禁止分词研究(kidding :=)),至少是禁止用纳税人钱财做这个研究。海量词库可以解决分词的90%以上的问题。

统 计模型可以解决几个百分点。硬写规则或者 heuristics 也可以达到类似的效果。

再往上,多一个百分点少一个百分点又有什么关系?对于应用没有什么影响,as long as things can be patched and incrementally enhanced over time.

或者任其错误下去(上帝允许系统的不完美),或者在后面的句法分析中 patch。很多人夸大了管式系统的错误放大问题(所谓 error propagation in a pipeline system), 他们忽略了系统的容错能力(robustness through adaptive modules),这当然要看系统设计者的经验和智慧了。中文处理在分词之后,有人做了一些短语识别(譬如 Base NP 抱团)和专有名词识别(Named Entity Tagging),再往下就乏善可陈了。

深入不下去是目前的现状。我要做的就是镜子说的“点入”。先下去再说,做一个 end-to-end system,直接支持某个app,用到大数据(big data)上,让数据制导,让数据说话。先用上再说,至少尽快显示其初步的value,而不是十年磨一剑。