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

图灵汇官网

自然语言处理:从理论到实践

自然语言处理(NLP)的应用范围非常广泛。例如,机器可以通过分类垃圾邮件、判断邮件回复的情感倾向,以及根据查询内容识别人员类型来提供个性化的搜索结果。

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

那么,这些技术在实际中是如何运作的呢?本文将介绍自然语言处理的基本概念,并着重讲解如何在Python中使用nltk包实现这些功能。

注意: 要运行示例代码,你需要安装nltk库。如果尚未安装,只需在命令行中运行 pip install nltk,然后在Python环境中运行 nltk.download()

在处理文本时,首先需要进行简化,这可以通过词语切分(tokenization)和词形还原(lemmatization)来实现。词语切分即将文本拆分为单词或单词组合,而词形还原则是将单词转换为其基本形式,例如将复数单词转换为单数形式,将动词转换为基础形式等。此外,还需要去除所有不携带实际信息的停用词。

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

词语切分和词形还原示例

在词语切分过程中,选择合适的n-gram(通常为1)非常重要。n-gram指定了每次切分时包含的单词数量。在某些情况下,如情绪分析,可能需要考虑短语如“不开心”或“不喜欢”,这时就需要调整n-gram值。

在词语切分时,还需要考虑标点符号的处理。大多数情况下,标点符号不包含实际信息,但有时也可能需要保留。

下面的代码展示了如何使用正则表达式标记符RegexpTokenizer进行词语切分。

```python from nltk.tokenize import RegexpTokenizer

tokenizer = RegexpTokenizer(r'w+') tokens = tokenizer.tokenize(text) ```

这段代码生成的标记列表为:['Rome', 'was', 'founded', 'in', '753BC', 'by', 'its', 'first', 'king', 'Romulus']

可以看到,标点符号已经消失,这很好!现在我们需要移除停用词。nltk库中包含了许多语言的停用词列表,但有时需要根据具体情况进行定制。

移除停用词

在默认设置下,停用词列表中包括了一些通用词汇,但在某些特定场景下,如分析电影或音乐数据库,可能需要保留这些词汇。例如,“Help”和“Help!”代表两部不同的电影。

处理后的标记列表为:['Rome', 'founded', '753BC', 'first', 'king', 'Romulus']

经过处理,标记数量从10个减少到6个。

接下来,我们需要进行词形还原。我们尝试了两种工具:WordNetLemmatizer和PorterStemmer。WordNetLemmatizer主要适用于复数单词,而PorterStemmer则更为激进,可以将单词转换为基本形式,如动词原形等。

词形还原示例

使用WordNetLemmatizer进行词形还原:

```python from nltk.stem import WordNetLemmatizer

lemmatizer = WordNetLemmatizer() lemmatized_tokens = [lemmatizer.lemmatize(token) for token in tokens] ```

处理后的列表为:['rome', 'found', '753bc', 'first', 'king', 'romulu']

可以看出,WordNetLemmatizer在这次处理中没有做太多改动。相比之下,PorterStemmer则更加激进,将单词转换为更基础的形式,如将“found”变为“find”,将“Romulus”变为“romulu”。

总结

在将文本输入机器学习模型之前,需要对其进行清洗和预处理。这些步骤包括词语切分、词形还原和去除停用词。常用的工具如nltk和sklearn提供了多种方法来实现这些功能。通过这些步骤,我们可以更好地准备文本数据,从而提高模型的性能。

这些工具和技术为我们提供了强大的手段,以理解和处理大量的文本数据,从而推动自然语言处理的发展。

本文来源: 图灵汇 文章作者: 英特尔物联网