NLP小白入门篇:莫愁前路,一文读懂语料预处理

2020 年 8 月 1 日 机器之心
机器之心原创

编辑:陈萍

自然语言处理是 AI 皇冠上的明珠,而语料预处理是自然语言处理的基础。


机器能跟人类交流吗?能像人类一样理解文本吗?这是大家对人工智能最初的想象。如今,NLP 技术可以充当人类和机器之间沟通的桥梁。环顾周围的生活,我们随时可以享受到 NLP 技术带来的便利,语音识别、机器翻译、问答系统等等。

这些技术看起来高深莫测,实则都有章可循。当你了解算法的底层原理后,你可能会恍然大悟,嗨!这也不是很难理解嘛。

现在你可以跟随本文,初探 NLP 技术的地基(语料预处理)是如何构建起来的。在之后的文章中,我们将循序渐进地介绍 NLP 中的特征提取以及最新算法解读。

语料,顾名思义就是我们平时所说的文本,带有文字描述性的文本都可以归类于语料。但这种原始文本无法直接用来训练模型,需要进行前期预处理。

语料预处理方法主要包括数据清洗、分词、词性标注、去停用词等。

语料清洗

语料清洗即保留语料中有用的数据,删除噪音数据。常见的清洗方式有:人工去重、对齐、删除、标注等。

以下面的文本为例。该文本不仅包含中文字符,还包括数字、英文字符、标点等非常规字符,这些都是无意义的信息,需要进行清洗。


像上述情况,清洗的方法主要是通过正则表达式。 可以编写简短的 Python 小脚本来解决,代码如下:


清洗后的结果:


除了上述需要清洗的形式以外,噪音数据还包括文本重复、错误、缺失、异常等。清洗的方法包括手动处理,或者通过开发小工具、写个简短的小程序,这些方式都可以进行数据清洗。

分词

数据清洗完,就可以进行下一步工序:文本分词。文本分词,即将文本分成一个一个的词语。常用的分词方法有基于规则的、基于统计的分词方法,而统计的样本内容来自于一些标准的语料库。

例如这个句子:「小明住在朝阳区」,我们期望语料库统计后分词的结果是:「小明 / 住在 / 朝阳 / 区」,而不是「小明 / 住在 / 朝 / 阳区」。那么如何做到这一点呢?

从统计的角度,可以通过条件概率分布来解决。对于一个新的句子,我们可以通过计算各种分词方法对应的联合分布概率,找到最大概率对应的分词方法,即为最优分词。

到目前为止,研究者已经开发出许多分词实用小工具,这些工具使用都很简单。如果你对分词没有特殊需求,你可以直接使用这些分词工具。

多种分词工具一览。

词性标注

词性标注指为分词结果中的每个词标注正确的词性,即确定每个词是名词、动词、形容词或其他词性的过程。

词性标注有多个重要作用。

第一,消除歧义。一些词在不同语境或不同用法时表示不同的意思。比如在这两个句子「这只狗狗的名字叫开心」和「我今天很开心」中,「开心」就代表了不同的含义。我们可以通过词性标注进行区分。

第二,强化基于单词的特征。还是以上句为例,如果不进行词性标注,两个「开心」会被认为是同义词,词频为 2,这会在后续分析中引入误差。

此外,词性标注还具有标准化、词形还原,以及有效移除停用词的作用。

常用的词性标注方法有基于规则的、基于统计的算法,比如:最大熵词性标注、HMM 词性标注等。

接下来,我们看一个词性标注示例。大家也可以自己尝试:http://ictclas.nlpir.org/nlpir/


去停用词

我们人类在接受消息时,都会滤除无效信息,筛选有用信息。对于自然语言来说,去停用词是一种很明智的操作。

一篇文本,不管是中文还是英文,都有用来起连接作用的连词、虚词、语气词等无意义的词,比如「的」、「吧」、「但是」等等。这些词没有具体的含义,只是起到衔接句子以及增强语气的作用。这些词对文本分析也没有任何帮助,因此我们需要对分词后的数据做停用词处理。

但是我们应该谨慎决定该去除哪类停用词。

下图列出了一些常用的停用词表,你可以参照需求,选择要去除的停用词。


词频统计

词频统计即统计分词后文本的词频,目的是找出对文本影响最大的词汇,是文本挖掘的重要手段。统计这些词出现的频率可以帮助我们了解文章重点强调了什么,进而方便后续构建模型。

比如我们可以统计四大名著之一《红楼梦》中词频在前 28 的词语,结果如下:


从上图可以看到,《红楼梦》中哪个人物的篇幅最多,哪个人物曹雪芹更注重。即使我们不是红学专家,但是从统计词频中也可以分析出一些关键信息。

「万丈高楼平地起」,对于自然语言处理这座摩天大厦来说,了解底层的实现原理,或许能够帮助你更好地理解其构建过程。

在后续的文章中,我们将持续输出关于 NLP 算法的其他内容。敬请期待!

机器之心联合旷视科技开设线上公开课:零基础入门旷视天元MegEngine,通过6次课程帮助开发者入门深度学习开发。


8月4日,旷视研究院深度学习框架研究员刘清一将带来等二课,主要介绍数据预处理、模型搭建与调参等相关概念。欢迎大家入群学习。


© THE END 

转载请联系本公众号获得授权

投稿或寻求报道:content@jiqizhixin.com

登录查看更多
2

相关内容

将一个汉字序列切分成一个一个单独的词
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
212+阅读 · 2020年4月26日
专知会员服务
103+阅读 · 2020年3月12日
专知会员服务
199+阅读 · 2020年3月6日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
入门 | 一步步教你构建 NLP pipeline
机器学习算法与Python学习
5+阅读 · 2019年2月15日
自然语言处理NLP快速入门
专知
20+阅读 · 2018年10月8日
中文NLP用什么?中文自然语言处理的完整机器处理流程
人工智能头条
61+阅读 · 2018年9月5日
自然语言处理(NLP)知识结构总结
AI100
51+阅读 · 2018年8月17日
文本数据分析(一):基本框架
论智
6+阅读 · 2018年4月9日
干货 | 自然语言处理(5)之英文文本挖掘预处理流程
机器学习算法与Python学习
7+阅读 · 2018年4月5日
教你用Python进行自然语言处理(附代码)
数据派THU
6+阅读 · 2018年3月28日
自然语言处理(4)之中文文本挖掘流程详解(小白入门必读)
机器学习算法与Python学习
5+阅读 · 2017年12月22日
干货 | 自然语言处理(1)之聊一聊分词原理
机器学习算法与Python学习
5+阅读 · 2017年12月7日
Python NLP 入门教程
开源中国
14+阅读 · 2017年10月1日
Arxiv
26+阅读 · 2019年3月5日
Arxiv
22+阅读 · 2018年8月30日
Arxiv
5+阅读 · 2018年5月5日
Arxiv
4+阅读 · 2018年3月22日
Arxiv
5+阅读 · 2018年1月30日
Arxiv
5+阅读 · 2015年9月14日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
212+阅读 · 2020年4月26日
专知会员服务
103+阅读 · 2020年3月12日
专知会员服务
199+阅读 · 2020年3月6日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
相关资讯
入门 | 一步步教你构建 NLP pipeline
机器学习算法与Python学习
5+阅读 · 2019年2月15日
自然语言处理NLP快速入门
专知
20+阅读 · 2018年10月8日
中文NLP用什么?中文自然语言处理的完整机器处理流程
人工智能头条
61+阅读 · 2018年9月5日
自然语言处理(NLP)知识结构总结
AI100
51+阅读 · 2018年8月17日
文本数据分析(一):基本框架
论智
6+阅读 · 2018年4月9日
干货 | 自然语言处理(5)之英文文本挖掘预处理流程
机器学习算法与Python学习
7+阅读 · 2018年4月5日
教你用Python进行自然语言处理(附代码)
数据派THU
6+阅读 · 2018年3月28日
自然语言处理(4)之中文文本挖掘流程详解(小白入门必读)
机器学习算法与Python学习
5+阅读 · 2017年12月22日
干货 | 自然语言处理(1)之聊一聊分词原理
机器学习算法与Python学习
5+阅读 · 2017年12月7日
Python NLP 入门教程
开源中国
14+阅读 · 2017年10月1日
相关论文
Arxiv
26+阅读 · 2019年3月5日
Arxiv
22+阅读 · 2018年8月30日
Arxiv
5+阅读 · 2018年5月5日
Arxiv
4+阅读 · 2018年3月22日
Arxiv
5+阅读 · 2018年1月30日
Arxiv
5+阅读 · 2015年9月14日
Top
微信扫码咨询专知VIP会员