找回密码
 立即注册
搜索

机器如何了解人类的言语:自然言语处理入门


点击上方关注,All in AI中国

作者:Emma Grimaldi




自然言语处理(NLP)的运用是无止境的。例如机器将对电子邮件能否为渣滓邮件停止分类,分析回复能否正面的还是负面的,以及搜索引擎根据查询内容辨认人员类型以相应地自定义呼应。

自然言语处理对我来说是最吸引人的数据迷信范畴之一。机器可以以一定的准确度了解文本内容的理想令人着迷,有时甚至是可怕的。

但是这在实际中如何操作?这篇文章引见了自然言语处理基础上的概念,并重点引见了在Python中运用的nltk包。

留意:要运转下面的示例,你需求安装nltk库。假如没有,只需在你的shell中运转pip install nltk,然后在你的记事本中运转nltk.download(),然后再末尾。

无论文本或句子被送入机器,都需求先停止简化,这可以经过词语切分(tokenization)和词形还原(lemmatization)来完成。这些复杂的单词意味着非常简单:词语切分意味着我们根据详细状况将文本拆分为单词或分组单词。词形还原意味着我们将一些单词转换为它们的根词,即复数单词变为单数单词,共轭动词变为基础动词,依此类推。在这些操作之前,我们还肃清了一切不带有实践信息的单词,即所谓的停用词。

让我们看看下面的句子,经过一个例子来了解这一切意味着什么。


ngrams的词语切分和词形还原的示例



在词语切分文本时,重要的是相应地选择ngram。它是指定我们在每次词语切分想要多少个单词,在大多数状况下(如上例所示),此数字等于1。但假如在商业回复网站上运转心情分析,能够是文本能够包含"不开心"或"不喜欢"这样的陈述,并且不希望这些词语传达文章内容的负面心情。在这种状况下,你能够需求思索添加ngram并查看它对分析的影响。

在词语切分时还需求思索其他事项,例如标点符号。大多数时分,你能够想丢弃任何标点符号,由于它不包含任何信息,除非文本中有意义的数字。在这种状况下,你能够需求思索保留标点符号或文本中包含的可以在任何地方拆分的数字。

在下面显示的代码中,运用了正则表达式标记符RegexpTokenizer。对于那些不熟习正则表达式的人来说,在方式言语实际中,它是一个定义形式的字符序列,并且取决于在RegexpTokenizer函数中传递的参数,它将根据该参数拆分文本。在正则表达式中,\w +字面意思是将长度大于或等于1的一切单词字符分组,丢弃空格(并因此标记单个单词)和一切非单词字符,即标点符号。




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

一末尾还不错,我们发现令牌中的标点符号消逝了!如今我们必须从令牌中消弭停用词:侥幸的是,对于许多不同的言语,nltk中包含一个停用词列表。但是,根据单个案例,你能够需求自定义此单词列表。例如,本文在默许状况下包含在这样的列表中,假如你正在分析电影或音乐数据库,能够希望保留它,由于在这种状况下,它的确会发生变化(例如Helpand和 Help!,这是两部不同的电影)。


丢弃文本中的停用词



新的令牌列表是:

clean_tokens = ['Rome', 'founded', '753BC', 'first', 'king', 'Romulus']

我们从10个单词减少到6个单词,如今终于到了复习的时分了!到目前为止,曾经测试了两个具有相反目的的对象:WordNetLemmatizer和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)将原始文本转换为令牌计数矩阵以训练测模型。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

大神点评4

无花只因寒 2018-12-13 18:14:49 显示全部楼层
分享了
回复

使用道具 举报

坏男孩zz 2018-12-13 19:57:43 显示全部楼层
分享了
回复

使用道具 举报

专食好嘢 2018-12-13 20:54:18 显示全部楼层
分享了
回复

使用道具 举报

想知道楼主的感受,怎么样?
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies