|||
curtesy of http://www.python-course.eu/text_classification_python.php
很久以来,主流 NLP (Natural Language Processing)就在这样的一袋子词里面做文章,有时候也确实做出了蛮漂亮的文章,都是用的基于统计的机器学习。这一袋子词何时有用,何时失效,有什么神奇和奥妙,又有什么陷阱和软肋?这些以前写过系列博文(见篇末【相关博文】)不同角度论过。这是革命的根本问题,涉及两条路线的是是非非,甚至会遭遇类似宗教战争一样的偏执,但为后学计,怎样论也不嫌多,兼听则明。
NLP中为什么叫一袋子词(bag of words,BOW)?机器学习的袋子里装的什么词?
NLP的对象是自然语言文本(speech 不论),具体说来,根据任务的不同,这个对象是语料库(corpus)、文章(document)或帖子(post),都是有上下文(discourse)的text,作为NLP系统的输入。对于输入的text,首先是断词(tokenization)。断词以后,有两条路可走,一条路是一句一句去做句法结构分析(parsing),另一条路就是这一袋子词的分析,又叫基于关键词(keywords)的分析。所以,一袋子词是相对于语言结构(linguistic structure)而言的。换句话说,一袋子词就是要绕过句法,把输入文字打散成词,然后通过统计模型,来完成指定的语言处理任务。
第一个问题就是,为什么一袋子词也叫做关键词?这是因为这个袋子里面的词并不是输入文本的全部词的集合,通常的做法是要剔除一些对于统计模型没有意义的词,所谓停止词(stop words),就是那些使用频率特别高的功能词之类,譬如连词,介词,冠词,感叹词等。剔除了停止词后的词,一般叫做关键词。
接下来的问题是,排除了停止词,信息不是损失了么?是的,信息损失了。作为功能词的停止词,对于自然语言句法很重要,它们往往是语言文句的重要连接组织(connecting tissues),是显性的语言形式(explicit linguistic form),与词序(word order)一起帮助构成合乎文法的语言结构,对于分析理解语言相当关键。然而,由于一袋子词的方法的立足点就是要绕过语言结构,因此它无法利用功能词的结构信息,结构是没用的。不仅如此,对于这类方法,高频的功能词不仅没用,还有干扰作用,影响统计模型的功效。只有忍痛割爱了。
第三个问题是,语言文句是通过词及其句法结构表达意义的,排除了结构,只用词,怎么能做语言的自动处理呢?两条腿走路,现在成了一条腿,怎么能走稳?
好问题,也是核心问题,要细谈可以给你谈三天。
简单的回答是,是的,一条腿走路确实走不稳,遇到上坡或爬山,也许寸步难行。但是并非所有的NLP任务都是爬山那么难,一条腿用得好,也可以走很远的路。而且一条腿也有一条腿的好处。好处之一是简单,只要一个断词一个过滤,就出来一条腿了,而建造第二条结构的腿则须花苦功夫(即 parser,事实上,对于不少统计专家,即便花了力气也很难造出一个靠谱的 parser 来,因为语言学并非他们所长,自己写语言文法对他们比登天还难,退而求其次,理论上可以用万能的机器学习去学习人的文法知识,但反映这些知识的句法树训练库又远远不足,很难奏效)。第二个好处是,反正只有一条腿,也就不用协调两条腿走路了,研究探索发现,在统计模型内部,即便有了 parser,加入了结构,要想协调好词和结构达到最佳效果,殊为不易。
需要强调的是,一袋子词模型(关键词模型)是简单的,因为简单,也带来了一系列额外的好处:鲁棒、highly scalable、移植性强。既然撇开了结构,文本之间的区别只剩下用词的不同,系统自然鲁棒起来,较易容忍输入文本的错误和混杂。第二,模型单纯,有快速实现的算法,容易 scale up 到大数据上。好处之三是移植性强,表现在,如果任务合适,移植到特定领域或其他的语言,算法甚至 feature design 都可以基本保持不变,只需要变换训练集重新训练即可达到类似的效果。必须承认,这些都是实实在在的好处,前提是这套方法对于某项NLP任务是合适和有效的。
那么什么是一袋子词比较拿手的NLP任务呢?公认有效的任务有至少有两大类,一类是 document classification(文件分类),另一类是 (corpus-based) word clustering(词的聚类)。前者基于有监督的机器学习(supervised machine learning),分类预先定义好,并反映在大量的标注了类别的数据里(训练集),用得合适具有广泛的应用;后者是无监督的机器学习(unsupervised machine learning),因为无监督,效果和用场都有限制,但是作为词典习得(lexicon acquisition)或作为半自动的人机合作,仍然具有相当的价值。考察这两类任务,容易发现他们的共同特点就是处理对象的单位较大,前者是文件,后者更大,是针对整个语料库。处理对象大意味着口袋大,里面装的词多。这时候,用词的频率分布,所谓关键词密度(keyword density),就为解决任务提供了统计上靠谱的保障。这里的道理就在,无论是文章,还是语料库(文章集),作为语言表达的载体,它们的用词都有一种自然的语义相谐性(semantic coherence),绝不是词汇的随机集合。充分利用这些语义相谐的统计性,可以为粗线条的NLP任务分类或聚合,提供隐含的语义支持。如果把语言现象比作森林(文章或语料库)和树木(文句或帖子),可以说,关键词模型擅长从森林看趋势,而不擅长对每棵树条分缕析。
有了上述对一袋子词作用原理的理解,就为回答和理解下列问题做好了准备。什么是一袋子词手段的软肋,关键词模型何时失效?答案有两方面,这两点也是相互关联的。一是当处理单位很小的时候,譬如短消息或句子,袋子里没多少词,可数的几粒米做不成餐,巧妇难为无米之炊。二是当语言现象需要深入的语义分析的时候,所谓细线条的任务,譬如抽取舆情背后的理由,具体事件或关系等。因此我们说,短消息占压倒多数的社交媒体是关键词模型的命门。社交媒体本身尽管是大数据,但它是由一条条消息(posts)组成的,而在移动互联网时代,社交媒体的短消息趋向越来越明显,反映舆情和新闻事件最快最主要的短消息平台Twitter 和微博等应运而生。其中的每一条短消息都是相对独立的处理单位,表达的是网民的碎片化舆情或事件关系的报道。这些短消息平均十几个词长,除去停止词后,根本就没有具有统计意义的足够量的数据点,要做舆情分类或数据挖掘自然捉襟见肘,不足采信。结论就是机器学习面对社交媒体无所依托,难有作为。
最后需要为关键词模型及其倡导和实践者说句公道话。一袋子词里面没有句法结构,这是一个重大缺失,搞关键词模型的机器学习学者不是不清楚,也不是无作为。作为之一就是用所谓 ngram 来模拟句法,事实上 ngrams 分布被广泛应用于关键词模型。只有当 n=1 的时候,才能说该模型彻底放弃了句法,把语言现象完全看成是一袋子词的集合,这通常被认为是关键词模型的baseline,后备(backoff)或缺省(default)模型。很多模型是 bigram (n=2)和 trigram (n=3)的,不过 n>3 的模型也极少见,因为 n 越大,数据就越稀疏,对于有限的训练集,已经没有统计意义了。ngram 到底是什么东西,为什么说它是对句法结构的逼近?(批评者可以说它是对句法的拙劣模拟,但无论如何总比完全不理句法好,ngram 至少承认了句法在语义求解中难以舍弃的功用。) ngam 中的“gram”指的就是词,这些词本来是完全打散装进袋子的,ngram (n>1) 加入以后,训练集中的n词的序列也被作为复合单位加进了统计模型,因此袋子里面就不仅仅是一个个的词了,也包含了潜在的词组,而这些词组里面可能隐含的句法结构关系也就被隐性代入了模型。这就是为什么关键词模型在过去的30年间能够走得那么远的主要原因,因为语言的句法结构被间接地表达了。譬如在 bigram 模型里,短消息 I love iPhone 里面的两个 bigrams 序列片段 [I love] 和 [love iPhone],前者反映了主谓结构关系,后者反映了动宾结构关系。很显然,这种用相邻词的组合来近似表达可能的句法关系,有先天的严重局限,它无法反映嵌套结构(embedded structures),更无法捕捉长距离的句法关系(embedded or long-distance relationships)。因此,对于 NLP 中的细线条的任务,ngram 模型无法匹敌以 parsing 为支持的系统。
一袋子词的主流方法面对社交媒体捉襟见肘,结构分析是必由之路 2015-11-24
一切声称用机器学习做社会媒体舆情挖掘的系统,都值得怀疑 2015-11-21
《泥沙龙笔记:铿锵众人行,parsing 可以颠覆关键词吗?》
泥沙龙笔记: parsing vs. classification and IE
泥沙龙笔记:parsing 是引擎的核武器,再论NLP与搜索
没有语言学的 CL 走不远
Comparison of Pros and Cons of Two NLP Approaches
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-21 21:58
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社