Python机器学习NLP自然语言处理基本操作之京东评论分类
在自然语言处理(NLP)领域,我们需要对文本数据进行分类,以便更好地分析和理解。本篇教程将演示如何使用 Python 机器学习库和自然语言处理技术对京东评论进行分类。
1. 数据收集
首先,我们需要收集京东评论数据。可以通过爬虫或者购买第三方数据来获取。这里我们选择使用开源数据,即从 Kaggle 网站上下载的电子商务评论数据,该数据包含 20 个类别,共 438732 条评论。
2. 数据预处理
在进行自然语言处理之前,需要对数据进行预处理。数据预处理包括以下步骤:
2.1. 读取数据
我们使用 pandas 库来读取数据,并观察一些数据样本。
import pandas as pd
df = pd.read_csv('reviews.csv')
print(df.head())
2.2. 数据清洗
清洗数据是指去除无用的信息、处理缺失值、处理重复数据等。例如,我们可以去除评论中的标点符号、数字、英文停用词等。
import re
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
def preprocessing(text):
text = re.sub('[^a-zA-Z]',' ',text) #去除标点、数字等
text = text.lower() # 转换为小写
words = text.split() # 提取每个单词
words = [w for w in words if not w in set(stopwords.words('english'))] #去除英文常用词
return ' '.join(words)
df['review'] = df['review'].apply(preprocessing)
print(df.head())
2.3. 分词
切割文本句子为单词,因为机器学习、自然语言处理都是基于字词来处理得。 这里我们使用 nltk 分词工具。
from nltk.tokenize import word_tokenize
df['tokenized_review'] = df['review'].apply(word_tokenize)
print(df.head())
2.4. 词性还原
对于英语文本,我们通常使用停用词、词干提取、词形还原等技术来进行文本预处理。其中词形还原将单词还原为词根形式的词汇。
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
def lemmatize_words(words):
return [lemmatizer.lemmatize(word) for word in words]
df['lemmatized_review'] = df['tokenized_review'].apply(lemmatize_words)
print(df.head())
3. 特征工程
在特征工程步骤中,我们将可供机器学习算法使用的数据从文本形式转换为数值类型。
3.1. 词袋模型
词袋模型(Bag of Words,BoW)是自然语言处理中一种常见的文本表示方法。它通过对文档中出现的单词计数,将文档表示成向量形式。
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
X = cv.fit_transform(df['review'])
print(X.shape)
3.2. TF-IDF 模型
TF-IDF(Term frequency-inverse document frequency,词频-逆文件频率)是另一种文本表示方法。它通过单词在文档中的频率和该单词在所有文档中的频率的比重,来计算单词的重要性。该模型可以更好地关注那些在少数文档中出现但具有较高重要性的单词。
from sklearn.feature_extraction.text import TfidfVectorizer
tf = TfidfVectorizer()
X = tf.fit_transform(df['review'])
print(X.shape)
4. 机器学习模型
在进行机器学习模型训练之前,我们需要将数据分为训练集和测试集。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, df['category'], test_size=0.2, random_state=42)
4.1. 朴素贝叶斯分类器
朴素贝叶斯分类器(Naive Bayes Classifier)是一种常用的文本分类算法。它假设每个单词与其他单词没有关联,并估计每个单词出现在不同类别下的概率,然后根据每个单词在特定文档中出现的计数推测文档的分类。
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
nb = MultinomialNB()
nb.fit(X_train, y_train)
y_pred = nb.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)*100
print("Naive Bayes accuracy: ", accuracy)
4.2. 支持向量机
支持向量机(Support Vector Machine,SVM)是一种二元分类器。它将文档向量空间映射到高维空间,然后寻找能将数据分割为不同类别的超平面。
from sklearn.svm import SVC
svm = SVC(kernel='linear')
svm.fit(X_train, y_train)
y_pred = svm.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)*100
print("SVM accuracy: ", accuracy)
示例
下面是使用本教程的代码示例。
示例1:预测一条新评论的类别
new_review = preprocessing('It is a good product.')
new_review = tf.transform([new_review])
print(svm.predict(new_review))
示例2:对一段文本进行分类并输出准确率
text = 'This is a good book. I would recommend it to anyone.'
text = preprocessing(text)
text = tf.transform([text])
y_pred = svm.predict(text)[0]
accuracy = int(svm.predict_proba(text).max()*100)
print('Predicted category:', y_pred, 'Accuracy:', accuracy, '%')
以上就是本教程的全部内容。通过使用 Python 机器学习库和自然语言处理技术,我们可以对文本数据进行分类,并且取得了不错的预测准确率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python机器学习NLP自然语言处理基本操作之京东评论分类 - Python技术站