机器学习-词向量转换实战 从零构建中文情感分析系统文本预处理、词向量与分类实战本文将完整演示一个中文情感分析系统的构建流程涵盖数据预处理、中文分词、停用词过滤、词向量转换、模型训练与评估等核心环节。二、数据预处理让计算机“看懂”中文2.1 原始数据读取首先我们需要准备两类数据好评和差评的评论文本每行一条评论。使用 Pandas 读取数据import pandas as pd cp_content pd.read_table(差评.txt, encodinggbk) yzpj_content pd.read_table(优质评价.txt, encodinggbk)2.2 中文分词jieba的核心作用与英文不同中文文本是连续的字符序列没有天然的空格分隔。要让计算机理解中文第一步就是分词——把连续的文本敲碎变成一块块有意义的积木。jieba是目前最流行的 Python 中文分词库之一对初学者非常友好。使用jieba.lcut()可以对每条评论进行精准分词import jieba cp_segments [] contents cp_content.content.values.tolist() for content in contents: results jieba.lcut(content) if len(results) 1: # 过滤无效短评论 cp_segments.append(results)分词的质量直接影响后续所有环节的效果——分词错误会在后续的处理链条中被不断放大。2.3 停用词过滤去除“噪音”中文中有大量无实际意义的词如“的”、“了”、“是”、“在”等。这些词在文本中频繁出现但信息量极低如果不加处理会干扰模型学习真正有意义的特征。停用词过滤的核心代码如下pythonstopwords pd.read_csv(StopwordsCN.txt, encodingutf8, enginepython) def drop_stopwords(contents, stopwords): segments_clean [] for content in contents: line_clean [word for word in content if word not in stopwords] if line_clean: segments_clean.append(line_clean) return segments_clean常用的中文停用词表包括哈工大停用词表、四川大学停用词表等。三、词向量转换把文字变成数字这是整个流程中最关键的一步。机器学习算法只能处理数值数据因此需要将文本转换为数值向量。3.1 词袋模型Bag of Words词袋模型的核心思想非常朴素不管词在句子里的顺序只统计每个词出现了多少次。它将文本视为一个“装满词的袋子”通过词汇的出现频率来描述文本特征。例如对于“dog cat fish”和“dog cat cat”两条文本词袋模型会统计dog: 1次 / 1次cat: 1次 / 2次fish: 1次 / 0次3.2 CountVectorizer一键向量化CountVectorizer是 scikit-learn 中用于将文本转换为词频矩阵的核心工具。它的工作流程分为三个步骤文本预处理 → 构建词汇表 → 生成词频矩阵。基本用法如下pythonfrom sklearn.feature_extraction.text import CountVectorizer 将分词结果用空格连接成字符串CountVectorizer要求 words [ .join(text) for text in x_train] 初始化向量化器 vec CountVectorizer( max_features4000, # 最多保留4000个特征词 lowercaseFalse, # 中文不需要转小写 ngram_range(1, 3) # 提取1-3个连续词的组合 ) 拟合并转换 x_train_vec vec.fit_transform(words)3.3 关键参数解析max_features控制保留的最大特征数量。设置过大容易过拟合设置过小可能丢失重要信息。ngram_range决定提取词的连续组合范围。(1,2)表示既提取单个词也提取相邻两个词的组合。例如“质量很好”可以拆分为“质量”、“很好”和“质量很好”三个特征能更好地捕捉短语级别的语义。lowercase对中文必须设为False因为中文没有大小写概念。重要提醒CountVectorizer默认按空格分词因此中文文本必须先经过jieba分词并用空格连接成“词1 词2 词3”的格式否则CountVectorizer会把整条句子当作一个词。3.4 输出解读fit_transform()返回的是一个稀疏矩阵只记录非零值以节省存储空间。通过toarray()可以查看完整的词频矩阵——每一行代表一条文本每一列代表一个词汇数值代表该词在文本中的出现次数。print(cv_fit) # 稀疏矩阵 print(cv.get_feature_names_out()) # 所有特征词 print(cv_fit.toarray()) # 完整的词频矩阵四、模型训练与评估完成向量化后就可以使用机器学习模型进行分类了。朴素贝叶斯MultinomialNB是文本分类中常用且高效的算法。from sklearn.naive_bayes import MultinomialNB from sklearn.model_selection import train_test_split from sklearn import metrics 划分训练集和测试集 x_train, x_test, y_train, y_test train_test_split( features, labels, test_size0.2, random_state42 ) 训练模型 classifier MultinomialNB(alpha0.1) classifier.fit(x_train_vec, y_train) 预测与评估 predictions classifier.predict(x_test_vec) print(metrics.classification_report(y_test, predictions))五、完整技术路线总结一个完整的中文情感分析系统通常遵循以下技术路线步骤工具/方法作用中文分词jieba将连续文本切分为词语停用词过滤停用词表去除无意义的高频词文本向量化CountVectorizer / TfidfVectorizer将文本转为数值特征数据平衡SMOTE可选处理类别不平衡问题模型训练朴素贝叶斯 / SVM训练分类器模型评估classification_report评估模型效果六、常见问题与注意事项1. 中文编码问题读取中文文本时必须确保编码正确通常为UTF-8或GBK否则会出现乱码或报错。2. 数据不平衡如果好评和差评数量差距悬殊模型会偏向多数类。可以通过过采样SMOTE或欠采样来处理。3. 特征数量选择max_features并非越大越好。过多的特征会导致维度灾难和过拟合一般建议通过交叉验证来确定最优值。4. 模型过拟合训练集准确率很高但测试集表现差说明模型过拟合了。可以通过增加训练数据、减少特征数量、调整正则化参数等方式改善。七、最后从原始的中文评论文本到可用的情感分类模型核心路径可以概括为文本 → 分词 → 去停用词 → 向量化 → 分类。每一步都有其不可替代的作用——分词决定了语义单元的质量停用词过滤去除了噪音向量化让机器“理解”了文本分类器则完成了最终的判断。CountVectorizer作为scikit-learn中经典的文本特征提取工具以其简单直观、高效实用的特点在文本分类、情感分析等任务中被广泛应用。