第二章: 数据预处理和标注
1.数据获取
从数据的来源来看,数据通常分为来自开放域和来自封闭域,但是所谓的开放和封闭也并不绝对。
相对而言,来自专用平台的数据比较规范,而公众网络平台特别是社交平台上的数据还有较多的噪声和非规范语言现象,因此需要花费更多的时间进行数据预处理和清洗。
数据获取的一般方法
通过使用Python的urllib2库可以下载一个链接所包含的数据。
一般的评论网站能够访问的数据量有所限制,一般来说需要进行注册登录才能够继续进行,这时候也能够使用爬虫对网站进行模拟登录,主要思路是分析人工登录网页时的信息流走向,然后通过爬虫模拟人工登录的过程。
python模拟豆瓣登录实战:https://www.cnblogs.com/jinxiao-pu/p/6670672.html
python模拟登录的一般方法:https://www.cnblogs.com/chenxiaohan/p/7654667.html
使用python进行网站数据抓取的时候,要注意网站的Robot协议,该协议规定了该网站什么数据可以进行抓取,什么数据不行。
下载之后的网页数据一般都有较好的结构,可以通过Python的beautiful soup工具包对下载的网页进行解析。
得到网页的数据之后要进行数据清理,对于豆瓣评论抓取来说,要删除噪声还有过短的评论:
- 噪声处理:通过python的langdetect包帮助识别语言,删除不需要的语言数据。还有一些不需要的链接和用户名等等,都要根据规律进行删除。
- 繁体字转换:可以借助开源工具包OpeCC或者其他工具包完成。
- 删除过短的评论:对于英文,因为有空格的帮助可以直接统计,对于中文,可以进行分词后再统计词汇数目。通常删除词汇数量少于某个设定阈值的评论等等。
- 标签对应:不同网站上提供的标签类别和我们所希望使用的分类器不尽相同,所以需要进行标签或者类别对应,比如说把打分机制的标签统一为好、中、坏等等。
2.数据预处理
数据获取完成后要对文本进行进一步的预处理:
- 词条化:也就是我们平常说的分词。
- 去停用词:主要指功能词,通常指在文档中频繁出现的介词、助词、语气词、连词等等,带有极少的信息,但出现频率很高,对于文本区分没有实质意义,为了提高效率,一般在文本表示时就自动将这些词过滤掉,具体实现中通常建一个停用词表,在特征抽取的时候直接删除停用词表中的词。
- 词形规范化:一般争对西方语言词各种形态的处理,一般通过规则或者正则表达式实现。其中波特词干提取算法被广泛应用。python的NLT工具包也提供了该算法的调度函数。该算法的详细描述:http://snowball.tartarus.org/algorithms/english/stemmer.html
3.数据标注
数据标注是有监督机器学习的基础,针对不同的数据挖掘任务,数据标注的规范标准和复杂程度都不一样。针对电子病历的分析任务,需要标注出病历中每一个实体的边界和类型。
具体标注时,一般来说需要开发一个标注工具,除了需要标注出所有实体的边界还有它们的关系。开发一个方便好用的标注工具是标注大规模数据的基本保障。
4.基本工具
无论是前面的数据预处理,数据标注,还是后面将要讲到的一些数据挖掘方法,通常需要用到很多基础性的技术还有方法,比如说分词、句法分析、词性标注和语块分析等。以下对部分技术和方法做简要介绍。
汉语自动分词与词性标注
关于汉语自动分词方法,从早期的基于词典的分词方法(最大匹配方法、最短路径分词方法),到基于n元语法(n-gram)的统计切分方法,再到后来的由字构词的汉语分词方法。
其中,由字构词是汉语分词研究的一种标志性创新方法:句子中的任何一个单位在词中的位置只有4种可能:B(begin),M(middle),E(end),S(single)。BE都是成对出现的。在这样的情况下,汉语分词问题转化为序列标注问题,可以借助大规模训练样本分类器完成分词任务。在实际应用中人们也尝试把这个方法融合起来以达到更好的效果。
词性标注指自动为句子中得每个词打上词性类别标签。标注名词动词形容词等等,词性标注是句法分析的前提和基础,词性信息是文本表示的重要特征,对命名实体识别,关系抽取和文本情感分析等都具有重要帮助。
词性标注是一个典型的序列标注问题,所以说词性标注与自动分词联系紧密,在很多模型内都将两个任务集合成一体完成,比如说基于隐马尔可夫模型的自动分词方法。
句法分析
句法分析包括短语结构分析和依存关系分析。短语结构分析通过自动分析句子的短语结构输出句子的句法结构树。依存关系则是自动分析出词汇之间的语义依存关系输出依存关系树。一个句子的短语结构树可以被一一对应转化为依存关系树。在NLP中,通常将短语结构分析工具称作句法分析器,把依存关系分析工作称为依存分析器。
一般的句法分析器是对一个完整的句子进行分析,获得句子完整的句法分析树,称为完全句法分析。但是一般的情况我们不需要得到完整的句法分析结果,只需要识别名词短语和动词短语等等,这样识别句子中特定类型短语的分析技术称为浅层句法分析。目前使用较多的浅层句法分析方法类似于由字构词,词位标记可以使用BEMS,也可以使用BIO。
n元语法模型
n元语法是传统的语言模型,基本思想是:
对于一个由l(l≥2)个基元(“基元”可以为字,词或短语等,为了表述方便,用“词”来通指)构成的字符串s=w1w2···wl, 其概率计算公式如下:
p(s) = p(w1) p(w2|w1) P(w3|w2w1)…p(wl|w1…wl-1)
为了简化计算的复杂性,假设当前词的概率只与前n-1个词有关,于是
p(s) ≈ p(w1) p(w2|w1) P(w3|w2)…p(wl|wl-1)
当n=1时,出现在i的词独立于前面已经出现的词,句子是由独立的词构成的序列,称为一元文法模型。
当=2时,出现在i的词wi的概率只和它前面一个词wi-1有关,称为二元文法模型,也称作一阶的马尔可夫链。
之后的以此类推。