自然语言处理(NLP)的基本概念 (未完待续)

由于工作需要,俺近期一直在学习自然语言处理相关的技术。主要是看英文资料,包括经典书籍,论文,网页博客之类。不得不说,俺感觉这个领域有点黑啊! 因为没有很好的快速入门资料,要么你得慢慢啃二三百页的书,要么就是看看论文里说的天花乱坠,各种基本概念直接用,啥也看不懂。中文资料少,英文资料看得又慢。在这个老板今天要你学新技术明天就得出设计图的坑爹时代,哪有时间啃砖头啊?这是要把俺们这种零基础的人往绝路上逼啊!


所以在俺痛苦挣扎之后,决定要帮助可怜的同行们开辟一条活路,把俺学习的东西总结一下,以后好应付老板那厮们。不过丑话说在前头,俺学的是英文语言的处理,对中文的不熟,所以这里讲的概念都是以英文为基础的,纯是因为工作需要,鸟人们别说俺不爱国啥的,跟那没关系。


废话少说,直接进入正题:


1. 分词 (Tokenization)

NLP里最基础的概念了,一切都从这里开始。Token就是符号,包括单词和标点两种。Tokenization就是把一句话或者一段话分解成单个的单词和标点。比如说:

I hate my boss.

这句话,分词之后就成了:

['I', 'hate', 'my', 'boss', '.']

这样一个五元数组。注意最后的句点也算啊。


2. 词干提取 (Stemming)

把各种词形统一到一个基础词形。英文单词有各种单数,复数,时态等等变化,比如:

run 就有 run, runs, running, ran; take 有 take, takes, taking, taken, took 等等不同的形态。洋鬼子懒,能用现成的词就不发明新词了,哪像我们苦逼的,啊不是,勤劳的老祖宗仓颉任劳任怨,绝不偷懒。所以给你一句洋文,你的处理程序要处理其中各种单词的各种可能形态,这明显是坑爹。为了让我们码农的日子好过一点,我们就发明了一个简单粗暴的方法:

不管你句子里的词是什么形态,老子的字典里就一种形态:基本型,老子没时间考虑什么过去式,单复数,就那鸟老板给的那点工资还让我考虑什么形态?开玩笑!爱谁谁全都得给我归到基本型!怎么做?简单,英文单词的形态变化不都是加个词缀什么的吗?词缀不就是那么些个吗?什么s, es,ed, d, ing的,搞个列表把所有词缀都加进来,然后不管什么单词,只要是以这些词缀结尾的,统统给我删掉就行了。什么?这种方法有漏洞?像took, takes这种词会误操作成took,tak? 那我就不管了,除非老板给涨工资,就这么着吧。NLTK里讲了两个做Stemming的软件(Stemmer): Porter Stemmer 和 Lancaster Stemmer。看看实例吧,这个是nltk给的例子:

原句是:

"""DENNIS: Listen, strange women lying in ponds distributing swords... is no basis for a system of government.  Supreme executive power derives from... a mandate from the masses, not from some farcical aquatic ceremony."""


乱七八糟的一堆句子, 就当是单词的集合好了,不用考虑句子含义.

Porter Stemmer 做的结果是:

['DENNI', ':', 'Listen', ',', 'strang', 'women', 'lie', 'in', 'pond','distribut', 'sword', 'is', 'no', 'basi', 'for', 'a', 'system', 'of', 'govern','.', 'Suprem', 'execut', 'power', 'deriv', 'from', 'a', 'mandat', 'from','the', 'mass', ',', 'not', 'from', 'some', 'farcic', 'aquat', 'ceremoni', '.']

不怎么样啊, 人名Dennis都给人家砍了个s,  strange 也处理成了strang, lying倒是正确处理成了lie,还算有点用。

再来看看 Lancaster Stemmer吧:

这个更牛,den是什么?dennis的爱称?这个俺得研究一下。listen直接成了list, women成了wom, 一塌糊涂啊。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章