情感分析是自然语言处理领域的常见应用,能够通过算法自动判定文本的情感倾向,比如判断用户评论是正面、负面还是中性。使用Python构建情感分析模型不需要复杂的底层开发,借助成熟的第三方库就能快速实现核心功能。

一、环境准备与依赖安装
首先我们需要安装构建模型所需的第三方库,这些库覆盖了数据处理、特征提取和模型训练的全流程需求。执行以下命令完成安装:
# 安装核心依赖库 pip install numpy pandas scikit_learn jieba
其中numpy和pandas用于数据处理,scikit_learn提供机器学习模型和评估工具,jieba是中文分词工具,如果你处理的是英文文本可以替换为nltk库。
二、数据准备与预处理
情感分析模型的训练需要标注好的数据集,数据集通常包含文本内容和对应的情感标签。我们以中文评论数据为例,数据格式一般为两列,一列是评论文本,一列是情感标签,比如1代表正面,0代表负面。
1. 数据加载
使用pandas加载本地数据集,代码如下:
import pandas as pd
# 加载数据集,假设文件为csv格式,编码为utf-8
data = pd.read_csv("sentiment_data.csv", encoding="utf-8")
# 查看数据前5行
print(data.head())
2. 文本预处理
原始文本通常包含无用信息,需要进行清洗和分词处理,核心步骤包括去除特殊字符、去除停用词、中文分词:
import re
import jieba
# 加载停用词表,停用词表可以自行下载通用版本
with open("stopwords.txt", "r", encoding="utf-8") as f:
stopwords = set([line.strip() for line in f.readlines()])
def text_preprocess(text):
# 去除特殊字符和数字
text = re.sub(r"[^u4e00-u9fa5]", "", text)
# 中文分词
words = jieba.lcut(text)
# 去除停用词
words = [word for word in words if word not in stopwords and len(word) > 1]
return " ".join(words)
# 对数据集的文本列进行预处理
data["processed_text"] = data["text"].apply(text_preprocess)
三、特征提取
机器学习模型无法直接处理文本数据,需要将文本转换为数值特征,常用的特征提取方法是词袋模型或者TF-IDF。这里我们使用TF-IDF方法,它能更好地体现词语在文本中的重要性。
from sklearn.feature_extraction.text import TfidfVectorizer # 初始化TF-IDF向量器,设置最大特征数为5000 tfidf = TfidfVectorizer(max_features=5000) # 拟合训练数据并转换为特征矩阵 X = tfidf.fit_transform(data["processed_text"]) # 提取标签列 y = data["label"]
四、模型训练与评估
我们使用朴素贝叶斯模型作为基础分类器,它是文本分类场景下的常用模型,训练速度快且效果稳定。首先将数据集划分为训练集和测试集,再训练模型并评估效果。
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report
# 划分训练集和测试集,测试集占比20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化朴素贝叶斯模型
model = MultinomialNB()
# 训练模型
model.fit(X_train, y_train)
# 在测试集上预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy}")
# 输出分类报告
print(classification_report(y_test, y_pred))
五、模型保存与调用
训练好的模型可以保存到本地,后续需要使用时直接加载即可,不需要重新训练。我们使用joblib工具保存模型和TF-IDF向量器:
import joblib
# 保存模型
joblib.dump(model, "sentiment_model.pkl")
# 保存TF-IDF向量器
joblib.dump(tfidf, "tfidf_vectorizer.pkl")
# 加载模型进行预测
loaded_model = joblib.load("sentiment_model.pkl")
loaded_tfidf = joblib.load("tfidf_vectorizer.pkl")
# 测试新文本
new_text = "这个产品使用起来非常方便,质量也很好"
processed_new_text = text_preprocess(new_text)
new_feature = loaded_tfidf.transform([processed_new_text])
pred_result = loaded_model.predict(new_feature)
print(f"文本情感预测结果: {'正面' if pred_result[0] == 1 else '负面'}")
六、优化方向
基础模型的效果还有提升空间,你可以尝试以下优化方法:
- 更换更复杂的模型,比如支持向量机、随机森林,或者基于深度学习的BERT模型
- 扩充训练数据集的规模,增加更多场景下的标注数据
- 优化预处理流程,比如增加同义词替换、词性筛选等步骤
- 调整TF-IDF的参数,或者尝试词嵌入方法提取更优质的特征