尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

机器学习-词向量转换2

机器学习-词向量转换2 在上篇中我们完成了中文文本的清洗、分词、向量化将原始文本转化为固定维度的词频矩阵。接下来要解决的核心问题是如何让机器从这些数字中学会判断情感倾向本文是系列的下篇聚焦于分类模型的构建、训练、评估与部署涵盖朴素贝叶斯家族、数据不平衡处理、防止数据泄漏、模型评估指标与生产环境部署。四、文本分类模型从特征到预测有了词频矩阵通常非常稀疏我们需要一个能读懂这些数字模式的模型。4.1 三种主流文本分类模型对比模型原理优点适用场景逻辑回归通过 sigmoid 函数将线性加权和映射到概率区间计算高效、可解释性强文本特征高维稀疏时的首选朴素贝叶斯基于贝叶斯定理与特征条件独立假设对高维稀疏数据表现稳定训练速度极快垃圾邮件过滤、情感分析支持向量机寻找最大化间隔的超平面在高维文本特征空间中鲁棒性好分类边界复杂的场景逻辑回归的辨析虽然名字带回归但本质是分类模型。通过引入多项式特征或核技巧可以处理非线性边界。4.2 朴素贝叶斯的概率基础朴素贝叶斯是一类基于贝叶斯定理和特征条件独立假设的生成式分类器。将联合概率拆为单个词概率的乘积参数估计量从指数级降到线性级。为什么这个假设朴素但有效实际文本中单词非常和好经常一起出现不独立。但条件独立假设把联合概率拆成了单个词概率的乘积。尽管这个假设常常不成立但它极大地减少了参数数量并且在分类决策中只需要比较各类别的相对大小独立假设带来的偏差往往在各类别中方向一致最终仍能给出较好的排序。 这就是它朴素但实用的原因牺牲精确性换取计算可行性和可接受的排序性能。4.3 特征类型决定模型变体在 scikit-learn 中朴素贝叶斯因特征分布假设不同而衍生出多种变体变体特征类型适用场景高斯朴素贝叶斯连续型特征服从正态分布身高、温度、灰度值多项式朴素贝叶斯离散计数特征非负整数文本词频、TF-IDF 值伯努利朴素贝叶斯二值型特征0 或 1词是否出现短文本分类核心辨析词频矩阵CountVectorizer 输出的值是整数0, 1, 2, ...属于离散计数数据。高斯贝叶斯假设特征服从正态分布强行代入会导致模型错误地计算概率。✅结论文本情感分析中词袋模型得到的是离散计数矩阵多项式朴素贝叶斯是最直接匹配的选项。Pythonfrom sklearn.naive_bayes import MultinomialNB model MultinomialNB(alpha1.0) # alpha 为拉普拉斯平滑参数 model.fit(X_train_vec, y_train)4.4 补充朴素贝叶斯——处理不平衡数据在情感分析中好评和差评数量往往不均衡例如好评占 90%。普通的多项式朴素贝叶斯会偏向先验概率大的类别好评导致差评少数类的召回率很低。补充朴素贝叶斯ComplementNB的核心思想对每个类别不再计算属于该类的概率而是计算样本不属于该类即属于其它所有类别的补集的概率然后选择补集概率最小的类别作为预测结果。Pythonfrom sklearn.naive_bayes import ComplementNB model ComplementNB(alpha1.0) model.fit(X_train_vec, y_train)为什么补集策略能改善不平衡多数类好评样本量大补集估计即不属于差评的样本非常稳定能更可靠地捕捉差评的独特特征。实验表明在处理文本分类不平衡数据集时ComplementNB 通常优于 MultinomialNB。五、数据不平衡问题的处理当差评数据仅 32 条、好评数据 12677 条比例约 1:396时直接训练会导致模型只要预测为好评就能达到 99.75% 准确率完全丧失识别差评的能力。5.1 核心影响模型对少数类差评的召回率极低甚至趋近于0。虽然整体准确率很高但业务目标发现差评完全失败。应关注精确率、召回率、F1-score尤其对少数类。5.2 三种主流解决策略对比策略方法优点缺点过采样随机复制少数类或使用SMOTE合成新样本简单不丢失多数类信息容易过拟合SMOTE可能在少数类稀疏时生成噪声欠采样随机丢弃多数类样本训练更快缓解过拟合丢弃大量多数类样本丢失重要信息调整类别权重在损失函数中为少数类错误赋予更高惩罚不改变样本分布实现简单需手动调整参数5.3 实操建议由于差评只有32条过采样SMOTE或调整类别权重是合理选择。欠采样会丢掉大量好评太过浪费。⚠️关键注意不要对测试集做任何重采样测试集必须保持原始分布。调整权重与过/欠采样不能同时滥用通常只选一种。评估指标要全面即使少数类F1-score高也要看多数类的性能是否严重下降。为什么SMOTE比简单复制更好简单复制只是重复相同的样本模型会记住这些样本的“噪声”导致泛化能力差。SMOTE在少数类样本之间插值生成的新样本更接近真实分布。但前提是少数类样本不是孤立点否则SMOTE会产生不合理样本。六、防止数据泄漏——训练集与测试集的隔离这是整个预处理流程中最容易犯错的一步也是面试和考试的高频考点。6.1 数据泄漏的定义与危害数据泄漏是指模型在训练过程中以任何方式“偷看”了本应仅在测试阶段才能接触到的信息从而使测试集无法公正地反映模型对未知数据的真实泛化能力。6.2 文本分类中的数据泄漏如果先对整个数据集进行词向量化词库的列数是根据全部数据的词频构建的。此时测试集中的词语会影响到词库的列数特征数量导致测试集特征污染训练集。做法操作结果❌错误先对整个数据集做fit_transform再切分测试集特征污染训练集评估虚高✅正确先切分再用训练集fit构建词库训练集和测试集完全隔离6.3 核心原则数据切分必须发生在任何与“特征”相关的统计计算之前对训练集调用fit或fit_transform对测试集和新数据只能调用transform绝对不能再调用fitpython# ✅ 正确做法 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test train_test_split(texts, labels, test_size0.3) vectorizer CountVectorizer() X_train_vec vectorizer.fit_transform(X_train) # 训练集fittransform X_test_vec vectorizer.transform(X_test) # 测试集只transform验证方法训练集和测试集向量矩阵的列数必须相同都是max_features的值。七、模型评估准确率、召回率、F1-score分类报告会为每个类别输出三项核心指标。7.1 核心评估指标指标定义公式关注点精确率Precision在所有被预测为“好评”的样本中真正是好评的比例TP / (TP FP)关注误报率召回率Recall在所有真正的“好评”中模型成功找出了多少TP / (TP FN)关注漏报率F1-score精确率和召回率的调和平均数2 × (P × R) / (P R)综合指标7.2 情感分析中的对称性在情感分析任务中差评和好评的重要性是对称的。不像医疗系统更关注召回阳性病例误判一条好评为差评和误判一条差评为好评对用户体验的伤害相当。⚠️关键辨析不要只看“准确率Accuracy”。如果数据集有90%是好评一个“永远预测好评”的模型也能达到90%准确率但它完全无法识别差评。必须结合精确率、召回率、F1-score综合评估特别是少数类的召回率。7.3 过拟合诊断对比训练集与测试集的表现情况训练集准确率测试集准确率诊断正常95%93%泛化能力良好差异在1~3个百分点内属正常过拟合95%70%模型记住了训练集噪声泛化能力差欠拟合60%58%模型尚未学到足够特征八、新样本预测与部署8.1 两个模型都要保存在部署时必须同时保存和加载两个模型模型作用文件vectorizer词库转换器将新文本转换为词向量vectorizer.pklclassifier分类器对词向量进行预测classifier.pkl⚠️ 单独加载分类器而忘记加载vectorizer会导致无法转换新样本。pythonimport joblib 保存 joblib.dump(vectorizer, vectorizer.pkl) joblib.dump(classifier, classifier.pkl) 加载 vectorizer joblib.load(vectorizer.pkl) classifier joblib.load(classifier.pkl)8.2 新样本的完整预测流程python# 1. 新评论预处理与训练时完全一致 def preprocess(text): words jieba.lcut(text) return .join(words) processed preprocess(new_review) 2. 使用训练好的vectorizer进行transform不能fit X_new vectorizer.transform([processed]) 3. 预测 prediction classifier.predict(X_new)[0] probability classifier.predict_proba(X_new)[0]关键点新样本必须走完全相同的预处理和transform流程否则特征空间不一致会导致预测失败。如果新文本中有训练集没有的词这些词会被忽略不会出现在向量中。预测阶段绝对不能再调用fit否则会建立新的词库导致特征维度不一致。8.3 部署注意事项注意事项说明环境一致性确保生产环境中的分词库版本与训练时一致否则分词结果可能不同预处理一致性新输入必须走完全相同的预处理流程不可省略任何步骤模型版本管理记录模型版本便于回滚和对比容器化部署推荐使用Docker确保环境一致性和可移植性
返回列表