首页 > 编程知识 正文

自然语言处理怎么入门(nlp自然语言处理入门)

时间:2023-05-06 13:16:50 阅读:99753 作者:2558

点击上面的,全在AI中国

作者:伊格登马尔迪

NLP的应用是无穷无尽的。例如,机器会将电子邮件分类为垃圾邮件,分析评论是正面的还是负面的,搜索引擎会根据查询内容识别人员类型,从而定制相应的回复。

自然语言处理对我来说是最有吸引力的数据科学领域之一。机器能够以一定的准确度理解文本内容的事实令人着迷,有时甚至是可怕的。

但是这在实践中是如何运作的呢?本文介绍了基于自然语言处理的概念,并重点介绍了Python中使用的nltk包。

注意:要运行以下示例,您需要安装nltk库。如果没有,只需在shell中运行pip install nltk,然后在记事本中运行nltk.download(),然后重新启动。

无论是文本还是句子送入机器,都需要先进行简化,可以通过记号化和引理化来完成。这些复杂的词的意思很简单:分词就是我们根据具体情况把文本拆分成词或者组词。形简是指我们把一些词转换成它们的词根,即复数变成单数,共轭动词变成基本动词,等等。在这些操作之前,我们也清除了所有没有实际信息的词,也就是所谓的停止词。

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

ngrams中的分词和词形缩减示例

当分词文本时,相应地选择ngram是很重要的。它指定了我们在每个分词中想要多少个单词。在大多数情况下(如上例所示),这个数字等于1。但是,如果你在商业评论网站上运行情绪分析,可能是文字中可能包含‘不开心’或‘不喜欢’这样的语句,你不希望这些词语传达文章内容的负面情绪。在这种情况下,您可能需要考虑增加ngram,看看它对分析的影响。

分词时还有其他需要考虑的东西,比如标点符号。大多数情况下,您可能希望丢弃任何标点符号,因为它不包含任何信息,除非文本中有有意义的数字。在这种情况下,您可能需要考虑保留文本中包含的标点符号或数字,这些符号或数字可以在任何地方拆分。

在下面显示的代码中,使用了正则表达式标记正则表达式。对于那些不熟悉正则表达式的人来说,在形式语言理论中,它是定义模式的字符序列,它取决于在RegexpTokenizer函数中传递的参数,根据这些参数,它将拆分文本。在正则表达式中,w字面意思是将长度大于或等于1的所有单词字符分组,丢弃空格(从而标记单个单词)和所有非单词字符,即标点符号。

此代码生成的令牌列表为:令牌=['罗马',' was ',' found ',' in ',' 753bc ',' by ',' its ',' first ',' happy future ',' Romulus']

一开始还不错,我们发现令牌里的标点符号不见了!现在我们必须从标记中删除停止词:幸运的是,对于许多不同的语言,nltk包含一个停止词列表。但是,根据单个案例,您可能需要自定义此单词列表。例如,本文默认包含在此列表中。如果您正在分析电影或音乐数据库,您可能希望保留它,因为在这种情况下,它确实会改变(例如帮助和帮助!这是两部不同的电影)。

丢弃文本中的停止词

的新令牌列表为:

clean _ token=['罗马','建国','公元前753年','第一','幸福的未来','罗慕路斯']

我们从10个字缩减到6个字,现在终于到了复习的时候了!到目前为止,已经测试了两个目的相同的对象:WordNetLemmatizer和PorterStemmer,后者肯定比前者更残酷,如下例所示。

使用WordNetLemmatizer进行形态恢复的示例

最后一个列表理解的输出是:

['罗马','发现','公元前753年','第一'快乐

的未来', 'romulu']

这什么也没有改变!这是因为WordNetLemmatizer只对复数单词和其他一些内容起作用,在这种特殊情况下,没有任何单词实际上被词形转化。另一方面,PorterStemmer转换复数和派生词,共轭动词并使所有单词变成小写,如下所示:

PorterStemmer的简化示例。

列表理解的输出是:['rome', 'found', '753bc', 'first', '快乐的未来', 'romulu']

在这种情况下,不再有大写单词,这对我们来说没问题,因为仅仅根据小写或大写区分相同的单词是没有意义的,它们具有相同的含义。创建的found已被改为find,甚至Romulus也丢失了名字的最后一个字母,可能是因为PorterStemmer认为这是一个复数单词。

这些词形还原函数是非常不同的,根据具体情况,一个将比另一个更合适。

在建模之前,有许多不同的方法可以从文本中收集和组织单词,这些只是可用选项的一小部分。在将文本输入机器学习模型之前,对所有文字进行清洁都是必要的,以尽可能地简化它。hdsdg在预测模型中分析大量单词时,在完成上述步骤后,你很可能会依赖于sklearn方法(如CountVectorizer,TfidfVectorizer或HashingVectorizer)将原始文本转换为令牌计数矩阵以训练测模型。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。