入门手册:浅谈自然语言处理!
作者头像
  • 区块界
  • 2021-09-06 13:00:09 17

自然语言处理(NLP)的应用范围极其广泛。例如,机器可以自动判断电子邮件是否为垃圾邮件,分析评论的情感倾向,以及根据用户的查询内容进行个性化搜索结果展示。

对我来说,自然语言处理是数据科学中最引人入胜的领域之一。机器能够以相当高的准确率理解文本内容,这一点既令人着迷又有些令人恐惧。

那么,这项技术是如何实现的呢?本文将介绍自然语言处理的基本概念,并重点讲解Python中常用的nltk库。

请注意:要运行下面的示例,你需要安装nltk库。如果尚未安装,只需在命令行中运行pip install nltk,然后在Python环境中执行nltk.download(),再继续阅读。

在处理文本或句子时,首先需要进行简化处理,这可以通过词语切分(tokenization)和词形还原(lemmatization)来完成。词语切分即将文本拆分成单词或单词组合,而词形还原则是将某些单词转换为其基本形式,例如将复数单词转为单数,将动词转换为其基础形态等。在进行这些操作之前,还需要清除掉所有没有实际信息价值的词汇,也就是所谓的停用词。

接下来,我们通过一个具体的例子来更好地理解这一过程。

在进行词语切分时,选择合适的ngram很重要。ngram是指在每次词语切分时想要处理的单词数量。通常情况下,这个数字等于1。然而,在某些特定场景下,比如在商业评论网站上进行情感分析时,可能会遇到像“不开心”或“不喜欢”这样的短语,这时候就需要考虑增加ngram的数量,以确保分析结果不受影响。

在进行词语切分时,还需要考虑标点符号。一般而言,标点符号往往被视为无用信息,应予以删除。但在某些情况下,如文本中包含有意义的数字时,则需要保留这些标点符号或数字。

下面的代码展示了如何使用正则表达式标记符RegexpTokenizer进行词语切分。对于不熟悉正则表达式的人来说,正则表达式是一种由字符组成的模式,用于定义文本匹配规则。根据传递给RegexpTokenizer函数的参数不同,它可以按照指定的方式拆分文本。在正则表达式中,w+表示匹配长度至少为1的所有单词字符,同时忽略空格和非单词字符(即标点符号)。

这段代码产生的令牌列表为:tokens = ['Rome', 'was', 'founded', 'in', '753BC', 'by', 'its', 'first', 'king', 'Romulus']

可以看到,标点符号已经被成功移除。接下来,我们需要清除掉停用词。幸运的是,nltk库中包含了多种语言的停用词列表。不过,根据具体需求,你可能需要自定义这些停用词列表。例如,对于电影或音乐数据库的分析,你可能希望保留一些特定的词汇,因为在这些场景下,这些词汇确实具有重要意义。

经过停用词清理后,新的令牌列表为:clean_tokens = ['Rome', 'founded', '753BC', 'first', 'king', 'Romulus']

这样,我们从原本的10个单词减少至6个单词,现在就来到了词形还原的环节。我们已经尝试了两种具有相同目的的对象:WordNetLemmatizer和PorterStemmer。PorterStemmer的效果更为显著,因为它不仅处理复数和派生词,还对共轭动词进行简化,并将所有单词转换为小写。

下面是使用WordNetLemmatizer进行词形还原的示例:

最后的输出结果为:['rome', 'found', '753bc', 'first', 'king', 'romulu']

可以看到,这并没有对单词进行太多改动,因为WordNetLemmatizer主要对复数单词和少数其他情况有效,在当前情境下没有起到实际作用。相比之下,PorterStemmer将复数和派生词进行了简化,并将所有单词转换为小写:

以下是使用PorterStemmer进行简化后的结果:

最终输出为:['rome', 'found', '753bc', 'first', 'king', 'romulu']

在这个过程中,原本的大写单词全部变为小写,这在很多情况下是有意义的,因为大小写并不影响单词的实际含义。此外,"found"变成了"find",而"Romulus"失去了最后一个字母,可能是因为PorterStemmer将其视为复数单词。

这两种词形还原方法各有优劣,具体选择哪一种取决于实际应用场景。

在构建模型之前,有许多不同的方法可以从文本中提取和组织单词,这些只是其中的一部分。为了确保模型的准确性,在将文本输入机器学习模型之前,必须对其进行预处理,使其尽可能简洁。当处理大量文本数据时,可以使用sklearn库中的CountVectorizer、TfidfVectorizer或HashingVectorizer等工具,将原始文本转换为令牌计数矩阵,以便进行后续的模型训练。

    本文来源:图灵汇
责任编辑: : 区块界
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
自然语言入门手册处理
    下一篇