自然语言处理学习篇01——Basic Text Processing
来源:互联网 发布:10019 签名数据失败 编辑:程序博客网 时间:2024/05/21 13:53
前言:
自然语言处理(Natural Language Processing——NLP)广泛应用于语音识别、机器翻译、自动问答等领域。早期的自然语言处理技术是基于“词性”和“语法”的,到了70年代走到了尽头,取而代之的是基于“数理统计”的方法。NLP的历史可以参考《数学之美》(吴军 著)一书。
本系列跟随斯坦福Dan Jurafsky教授和Christopher Manning助理教授来学习NLP的具体知识。其中包括word and sentence tokenization(单词和语句分割)、text classification(文本分类)sentiment analysis(情感分析)等,probality(概率论)、statistics(统计学)、machine learning(机器学习)的基础理论,以及一些基础算法如n-gram language modeling(n阶语言模型)、naive bayes and maxent classifiers、 Hidden Markov Models(隐含马尔可夫模型)等内容。
斯坦福NLP课程网址https://www.coursera.org/course/nlp
(本人英语水平有限,如有纰漏,欢迎拍砖)
第一章:Basic Text Processing
- Regular Expression
- Word Tokenization
- Word Normalization and Stemming
- Sentence Segmentation
1.1 Regular Expressions(正则表达式)
直观地想,假如我们想要从一大段文本中找到某个词,会面临什么样的问题?word形式的问题,比如说woodchuck(土拨鼠),其出现的形式还可能是woodchucks/Woodchuck/Woodchucks。这就需要我们通过一些“规则"进行处理,Regular Expressins就是这样的一些规则。
1.2 Word Tokenization
对于每一个NLP任务来说,首先要做的就是text normalization(文本标准化)工作,其中又包括以下三个方面的内容:
1. Segmenting/tokenizing words in running text(切分单词)
2. Normalizing word formats(归一化单词格式)
3. Segmenting sentences in running text(切分句子)
本篇讲述第一方面。在这方面中,Jurafsky教授对于单词计数上的一些问题尚未下最后的定论,只是说明各种情况各种理解都可以认为是正确的。下面来看具体讲解。
1.2.1 How many words?
对于给定的一句话,该如何数这句话的单词个数。
我们在生活中说话不可能一次正确,往往带有Fragments(单词碎片)pauses(停顿)或者重复等等,如下面这句话。
I do uh main- mainly business data processing.
其中带有uh语气词,main - mainly停顿和重复,这都会对”数词“造成困扰。
这里介绍几个定义Lemma、Wordform、Type、Token、N、V和|V|
例1:Seuss's cat in the hat is different from other cats!
Lemma(词元):如cat 和 cats具有相同的词元。
Wordform(词形):cat 和cats是两种不同的词形。
Type:单词的个数,不计重复的单词
Token:总单词个数,计算重复的单词(简单理解就是单词间的空格数+1)
例2:they lay back on the San Francisco grass and looked at the stars and their
上句中,假如把San Francisco拆开算,当做两个单词,那么就有15 tokens,倘若算为一个,就是14 tokens而上句中the和and都出现了两次,因此有13types或者12types,倘若再把they和their当做一个,则为11types,这些都依赖于具体的规则。
N:token数
V:词汇集合,|V| 则代表词汇量
上图分别展示了三个语料库中的N和|V|(中间一行貌似是统计莎士比亚作品中的单词和词汇量)
1.2.2 Issues in Tokenization (切词中的各种问题)
在语言中有很多习以为常的形式如 连写、引号、dot、dash等
如下面的几种情形:
what're, I'm, isn't ----------------> 这种情况好处理,拆分为what are, I am, is not.
Hewlett-Packard -----------------> 拆成Hewlett Packard可以吗?(问号代表没有定论)
Lowercase -----------------> lower-case lowercase lower case ?
San Francisco -----------------> one token or two?
m.p.h., PhD. -----------------> ??
不仅是英语,其他语言也有各种问题。如法语中L'ensenble ----> one token or two? 德语中的名词复合词是没有分割符的,如:Lebensversicherungsgesellschaftsangestellter(小白表示完全不懂什么意思)。汉语和日语字与字之间也是连在一起的。
下面介绍一下汉语的切词.
汉语的切词(word tokenization in Chinese)又称为Word Segmentation。汉语中每个词由n个字构成,n的平均值2.4,即每个词大概有2.4个字组成。
汉语切词采用”Maximum Matching"(最大匹配)算法,过程如下:
事先有一张汉语词汇表,以及一个句子。
Step 1. 起始指针指向句子的开头。
Step 2. 找到词汇表中匹配的最大的单词,设置一个分隔。
Step 3. 指针跳到分隔后,继续执行Step 2.循环。
例:莎拉波娃现在居住在美国东南部的弗罗里达。
莎拉波娃 现在 居住 在 美国 东南部 的 佛罗里达
当然,还有更先进的probabilistic segmentation algorithms (我直译为“概率分割法”,估计后面会讲到),效果更好。
1.3 Word Normalization and Stemming(单词归一化和词干)
1.3.1 Normalization(归一化)
我们需要normalize单词的形式,比如说在IR(信息检索)中,indexed text(索引)和query terms(查询条目)必须有相同的形式,像U.S.A和USA。
我们经常会需要隐式地定义一些单词的等价形式,方法通常是把句号去掉,比如说上面的U.S.A和USA。
当然我们也会遇到“输入的单词”和“想要搜索的单词”不等价的情况(antisymmetirc expansion),比如说输入“window”而搜索“window或者windows”,输入“windows”搜索“Windows,windows,window”,这使得搜索变得很负责,所以我们还是尽可能使用等价(symmetric expansion)的和简单的扩展方法。
1.3.2 Case folding(小写化)
在一些应用比如说IR中,我们通常需要把所有单词都转为小写形式,因为大多数用户都倾向于使用小写。但也存在一些例外,比如,当我们在句子中间遇到大些字母如General Motors,Fed(Federal Reserve Bank)或者SAIL(Stanford Artificial Intelligence Lab),我们很可能想要保持住它原有的大些形式。
对于sentiment analysis(情感分析),MT(机器翻译)和Information extraction(信息提取)中,大小写很关键,比如说US和us完全不同。
1.3.3 Lemmatization(单词的变形)
通常我们也会使用变形来把单词变成其基本形式,如:
am, are, is -> be
car, cars, car's, cars' -> car
the boy's cars are different colors -> the boy car be different color
因此一般来说,lemmatization的任务就是找到一个准确的字典上有的单词的形式。
1.3.4 Morphology(词法)
Morphology是研究Morphemes(词素——构成单词的最小单元)的。
Stems(词根)
Affixes(词缀)
如stems这个单词中,’stem‘是词根,末尾的's'是词缀。
1.3.5 Stemming
Stemming即把单词的形式删除词缀,转化为其词根的过程,如
automate(s), automatic, automation -> automat
for example compressed and compression are bothaccepted as equivalent to compress -> forexampl compress and compress ar both accept as equival to compress
1.3.6 Porter's algorithm(波特算法,英语中最常见的stemming方法)
如上图所示,当动词+ing时要把ing省去。
1.3.7 实践
在linux系统或者mac的终端敲入如下代码,寻找符合条件的以ing结尾的单词,shakes.txt是所使用的文本文件,读者可自行寻找一个英语文档当作待处理的文本。
tr -sc 'A-Za-z' '\n' < shakes.txt | tr 'A-Z' 'a-z' | grep 'ing$' | sort | uniq -c | sort -n -r | less
非字母转为换行 待处理文本 | 大写字母转为小写 | 寻找所有结尾为ing的单词 | 排序 | 相同的合并并计数 | 按照个数排序 | 显示
显示效果如下图所示:
1.4 Sentence Segmentation(句子分割)
关于句子分割,我们都知道一些约定俗成的规则。
首先,感叹号!和问号?是明显的句子结尾,而 . 则不一定,比如说.02%、4.3等情况。因此,我们需要建立一个binary classifier(二元分类器)对句号 . 进行处理,典型的方法是Decision Tree(决策树),如下图判断一个单词是不是到了句子的末尾(E-O-S)。
上面的决策树很简单,假如想要使判断更加准确,就需要引入更多的特性,设置更多的if-then-else语句,相应的决策树也更加复杂。
对features进行分类,除了决策树,还有其他分类器,如Logistic regression(逻辑回归)、SVM、Neural Nets(神经网络)等等,以后会讲到。
- 自然语言处理学习篇01——Basic Text Processing
- Stanford自然语言处理笔记1 -basic text processing
- 斯坦福大学自然语言处理第二课“文本处理基础(Basic Text Processing)”
- standford自然语言处理第二课“文本处理基础(Basic Text Processing)”
- Note1: Basic Text Processing
- stanford第二课“文本处理基础(Basic Text Processing)”
- 自然语言处理学习篇02——Edit Distance
- 自然语言处理学习篇03——Language Models
- 自然语言处理与深度学习—引言
- 《Natural Language Processing》斯坦福视频学习笔记——2.text processing
- 自然语言处理(Natural language processing) 1
- 统计自然语言处理基础学习笔记(2)——语料库
- 自然语言处理学习感悟——感觉自己好笨
- python自然语言处理学习笔记2——基础语句
- python自然语言处理学习笔记3——词频统计
- python自然语言处理学习笔记4——条件
- python自然语言处理学习笔记5——载入语料库
- python自然语言处理学习笔记1—install NLTK
- WEB-QTP随想录—老婆的泡菜
- Mac OS X地址簿编程指南
- VC操作word
- WEB-QTP随想录—老婆的淘宝
- ubuntu vi上下左右键无法使用?
- 自然语言处理学习篇01——Basic Text Processing
- tomcat resin apache Nginx
- char
- WEB-QTP随想录—跟长辈的通话
- Model 1和Model 2
- 区分JavaScript中的undefined,null和NaN
- WEB-QTP随想录—关于照相机
- Windows下Cygwin环境的Hadoop安装(0)- 序言及步骤索引
- WEB-QTP随想录—自行车的事故