自然语言处理(NLP)是计算机科学和人工智能领域, 与计算机和人类(自然)语言之间的相互作用有关, 尤其是如何对计算机进行编程以处理和分析大量自然语言数据。这是机器学习的一个分支, 它涉及分析任何文本并处理预测分析。
Scikit学习是针对Python编程语言的免费软件机器学习库。 Scikit-learn主要用Python编写, 一些核心算法用Cython编写以实现性能。 Cython是Python编程语言的超集, 旨在通过主要用Python编写的代码来提供类似于C的性能。
让我们了解文本处理和NLP流程所涉及的各个步骤。
该算法可以轻松应用于其他任何类型的文本, 例如将书籍分类为”
浪漫”
, “
摩擦”
, 但现在, 让我们使用餐厅评论审查负面或正面反馈的数据集。
涉及的步骤:
第1步:导入数据集并将定界符设置为”
\ t”
, 因为列被分隔为制表符空间。评论及其类别(0或1)没有用其他任何符号分隔, 但带有制表符空格, 因为大多数其他符号是评论(例如, 价格为$, …。!等), 算法可能会将它们用作分隔符, 这会在输出中导致奇怪的行为(例如错误, 奇怪的输出)。
# Importing Libraries
import numpy as np
import pandas as pd # Import dataset
dataset = pd.read_csv( 'Restaurant_Reviews.tsv' , delimiter = '\t' )
要下载使用的Restaurant_Reviews.tsv数据集, 请单击这里.
第2步:文字清理或预处理
删除标点符号:在给定的文本中, 标点符号没有太大的帮助, 如果包含的话, 它们只会增加我们将在最后一步中创建的词袋的大小, 并降低算法的效率。
抽干:扎根词
文章图片
将每个单词都转换成小写:例如, 在不同情况下使用相同的单词(例如” 好” 和” 好” )是没有用的。
# library to clean data
import re # Natural Language Tool Kit
import nltk nltk.download( 'stopwords' )# to remove stopword
from nltk.corpus import stopwords# for Stemming propose
from nltk.stem.porter import PorterStemmer# Initialize empty array
# to append clean text
corpus = [] # 1000 (reviews) rows to clean
for i in range ( 0 , 1000 ): # column : "Review", row ith
review = re.sub( '[^a-zA-Z]' , ' ' , dataset[ 'Review' ][i]) # convert all cases to lower cases
review = review.lower() # split to array(default delimiter is " ")
review = review.split() # creating PorterStemmer object to
# take main stem of each word
ps = PorterStemmer() # loop for stemming each word
# in string array at ith row
review = [ps.stem(word) for word in review
if not word in set (stopwords.words( 'english' ))] # rejoin all string array elements
# to create back into a string
review = ' ' .join(review)# append each string to create
# array of clean text
corpus.append(review)
例子:在应用上述代码之前和之后(评论=> 之前, 语料库=> 之后)
文章图片
第三步: 代币化, 涉及从正文中拆分句子和单词。
步骤4:通过稀疏矩阵制作单词袋
- 取数据集中评论的所有不同单词, 而无需重复单词。
- 每个单词一列, 因此会有很多列。
- 行是评论
- 如果评论数据集中的行中有单词, 则单词计数将在单词列下的单词袋行中存在。
Input : "dam good steak", "good food good servic"
Output :
为此, 我们需要CountVectorizer类,来自sklearn.feature_extraction.text。
我们还可以设置最大数量的功能(通过属性” max_features” 提供最大帮助的最大数量的功能)。对语料库进行训练, 然后对语料库” .fit_transform(corpus)” 应用相同的转换, 然后将其转换为数组。如果评论是肯定的还是否定的, 那么答案在dataset [:, 1]的第二列中:所有行和第一列(从零开始索引)。
# Creating the Bag of Words model
from sklearn.feature_extraction.text import CountVectorizer# To extract max 1500 feature.
# "max_features" is attribute to
# experiment with to get better results
cv = CountVectorizer(max_features = 1500 ) # X contains corpus (dependent variable)
X = cv.fit_transform(corpus).toarray() # y contains answers if review
# is positive or negative
y = dataset.iloc[:, 1 ].values
要使用的数据集的描述:用\ t分隔的列(制表符空间)第一列是关于人的评论的第二列中, 0代表负面评论, 1代表正面评论
文章图片
步骤5:
将语料库分为训练和测试集。为此, 我们需要sklearn.cross_validation中的class train_test_split。可以拆分为70/30或80/20或85/15或75/25, 这里我通过” test_size” 选择75/25。
X是单词袋, y是0或1(正数或负数)。
# Splitting the dataset into
# the Training set and Test set
from sklearn.cross_validation import train_test_split# experiment with "test_size"
# to get better results
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25 )
步骤6:拟合预测模型(此处为随机森林)
- 由于Random fored是sklearn.ensemble的集成模型(由许多树组成), 因此请导入RandomForestClassifier类
- 具有501树或” n_estimators” , 且标准为” 熵”
- 通过.fit()方法使用属性X_train和y_train拟合模型
# Fitting Random Forest Classification
# to the Training set
from sklearn.ensemble import RandomForestClassifier# n_estimators can be said as number of
# trees, experiment with n_estimators
# to get better results
model = RandomForestClassifier(n_estimators = 501 , criterion = 'entropy' )model.fit(X_train, y_train)
步骤7:通过使用带有属性X_test的.predict()方法对最终结果进行定价
# Predicting the Test set results
y_pred = model.predict(X_test)y_pred
文章图片
注意:随机森林的准确度为72%(在使用不同测试大小进行的实验中可能会有所不同, 此处= 0.25)。
步骤8:为了知道准确性, 需要混淆矩阵。
混淆矩阵是2X2矩阵。
TRUE POSITIVE:测量正确识别的实际阳性的比例。 TRUE NEGATIVE:测量未正确识别的实际阳性的比例。假阳性:衡量正确识别的实际阴性的比例。假阴性:测量未正确识别的实际阴性的比例。注意 :
正确或错误表示分配的类别是正确还是不正确, 而肯定或否定的是指分配给肯定或否定类别
文章图片
# Making the Confusion Matrix
from sklearn.metrics import confusion_matrixcm = confusion_matrix(y_test, y_pred)cm
文章图片
【Python | NLP餐厅评论分析】首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。
推荐阅读
- Python – Tkinter选择颜色对话框
- Python嵌套字典介绍和用法示例
- 算法班2021版
- 优启通PE工具箱[VIP] v3.7.2022.0106 官方22年1月版
- docker containerd cri-o 添加 crun runtime
- #yyds干货盘点#kubernetes入门基础-pod的概念以及相关操作
- #yyds干货盘点#最新版Nginx安装教程来了,快来看看
- 服务器去除秘钥连接,账号迷马连接
- AirNet笔记1