[NLPCamp]文本预处理常用技术介绍

[NLPCamp]文本预处理常用技术介绍

版权声明:本文章来自贪心学院《NLP训练营》的学员。

原文链接: 简单随风:文本预处理常用技术介绍

--- “致力于培养下一代AI人才”


自然语言处理简介

自然语言处理,顾名思义,就是使用计算机对语言文字进行处理的相关技术以及应用。

Natural language processing (NLP) is a field of computer science, artificial intelligence and computational linguistics concerned with the interactions between computers and human (natural) languages, and, in particular, concerned with programming computers to fruitfully process large natural language corpora.

早在20世纪50年代,自然语言处理就被提起,但直到20世纪80年代前,自然语言处理的系统大多仅支持有限的词汇并需要大量的人工编写的规则。到了80年代,机器计算能力的飞速提升以及机器学习算法的出现,为自然语言处理领域带来了变革。隐马可夫模型的使用,以及越来越多的基于统计模型的研究,使得系统拥有了更强的对未知输入的处理能力。如今,研究更多的集中于无监督学习或者语义监督学习,比较成功的便是自动翻译系统。近几年,大数据时代的到来,以及深度学习算法的广泛应用,又为自然语言处理带来了新的突破。

在nlp工程中,文本预处理的流程通常包含以下步骤:获取原始文本、分词、文本清洗、标准化、特征提取、建模等。下面我们会分步骤,分别对每一个步骤的常用方法和常用库进行介绍。

1.文本获取

既然如今主流研究使用机器学习或者统计模型的技术,那么一个首要问题就是,如何获取大量的数据?无论是统计还是机器学习,其准确率都建立在样本的好坏上,样本空间是否足够大,样本分布是否足够均匀,这些都将影响算法的最终结果。 获取语料库,一个方法就是去网络上寻找一些第三方提供的语料库,出名的开放语料库比如wiki。但事实上,很多情况中所研究或开发的系统往往是应用于某种特定的领域,这些开放语料库经常无法满足我们的需求。这种时候就需要使用另一种方法,使用爬虫去主动的获取想要的信息。可以使用如 pyspider、 scrapy等python框架非常轻松地编写出自己需要的爬虫,从而让机器自动地去获取大量数据,从而继续我们的研究。

2.分词

中英文在分词上,由于语言的特殊性导致分词的思路也会不一样。大多数情况下,英文直接使用空格就可以进行分词,例如:


但是在中文上,由于语法更为复杂,我们通常会使用 jieba等第三方库进行分词的操作,例如:


还有些时候,可能我们需要处理某些垂直领域的文本,例如医疗、法律等领域,我们可能需要更垂直的词库。这时候,我们可以考虑第三方词库,例如 清华大学开源词库或者其他人分享的 开源词库等。这时候我们可能需要自己设计分词的算法,具体方法可参考我之前的文章 《分词工具的实现》。


3.文本清洗

由于大多数情况下,我们准备好的文本里都有很多无用的部分,例如爬取来的一些html代码,css标签等。或者我们去除不需要用的标点符号、停用词等,我们需要分步骤去清洗。下面是一些常用的清洗方法:

去除标点符号

英文转换为小写

数字归一化

停用词库/低频词库

停用词库:我们可以直接在搜索引擎上搜索“停用词库”或“english stop words list”,能找到很多停用词库。例如:


低频次库:我们可以使用Counter等库获取所有句子中所有词的词频,通过筛选词频获得低频词库。例如:

获取停用词库和低频词库后,将词库中的词语删除

去除不必要的标签

这一块在实际工作中需要灵活的使用,例如使用re库对文本做正则删除、替换,利用json库去解析json数据,又或者使用规则对文本进行相应的处理。

4.标准化

通常我们需要用到词形还原(Lemmatization)和词干提取(Stemming) 首先来看一下两者的区别 Stemming:

打印结果: 'wolv'

Lemmatization:

打印结果: 'wolf'

5.特征提取

通常会采用TF-IDF、Word2Vec、CountVectorizer等方式实现对文本特征的提取。在这里只简单讲解一下几个方法的概念,之后会在其他文章中详细讲解几种方法的区别。

TF-IDF

词语由t表示,文档由d表示,语料库由D表示。词频TF(t,,d)是词语t在文档d中出现的次数。文件频率DF(t,D)是包含词语的文档的个数。如果我们只使用词频来衡量重要性,很容易过度强调在文档中经常出现而并没有包含太多与文档有关的信息的词语,比如“a”,“the”以及“of”。如果一个词语经常出现在语料库中,它意味着它并没有携带特定的文档的特殊信息。

Word2Vec

Word2vec是一个Estimator,它采用一系列代表文档的词语来训练word2vecmodel。该模型将每个词语映射到一个固定大小的向量。word2vecmodel使用文档中每个词语的平均数来将文档转换为向量,然后这个向量可以作为预测的特征,来计算文档相似度计算等等。

Countvectorizer

Countvectorizer和Countvectorizermodel旨在通过计数来将一个文档转换为向量。当不存在先验字典时,Countvectorizer可作为Estimator来提取词汇,并生成一个Countvectorizermodel。该模型产生文档关于词语的稀疏表示,其表示可以传递给其他算法如LDA。

6.其他

以上步骤只是在理想情况下,我们对文本进行预处理时需要经过的一些步骤,在实际工作场景中,可能还会需要一些其他的处理方式,例如因为用户在实际情况下,经常会出现拼写错误,所以我们要进行拼写校正(spell correction)等,spell correction就要涉及到文本距离计算等知识,就不在这做过多的展开。

希望本篇文章能对nlp初学者们提供一定的帮助,有疑问的同学可在下方留言,我会不断对文章内容进行更新和优化,谢谢!

代做工资流水公司武汉开房贷收入证明菏泽车贷银行流水 报价大连银行对公流水办理哈尔滨制作薪资流水单常德查询个人流水石家庄个人银行流水办理温州流水样本太原打印离职证明烟台打印日常消费流水桂林企业银行流水价格南通做企业对公流水开封代做车贷流水南阳银行流水账费用烟台企业贷流水代做徐州流水单多少钱邯郸办公司银行流水揭阳银行对公流水制作宜春代做贷款银行流水赣州车贷银行流水 费用赣州查对公账户流水无锡工资流水代做昆明办理房贷收入证明天津办理个人工资流水无锡打印入职工资流水包头打房贷收入证明舟山转账银行流水开具九江入职流水样本贵阳签证工资流水代做开封背调银行流水打印常州房贷工资流水 代开香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化