词向量是稠密实数向量,使语义相近词在空间中距离更近;常用模型有Word2Vec、GloVe和FastText,各具优势;中文任务推荐Chinese-Word-Vectors并注意分词与归一化;句子表示需超越简单平均,可用TF-IDF加权、Doc2Vec或BERT微调;文本分类应注重数据清洗、特征工程、模型选择及合理评估,避免分词不一致、OOV处理不当等常见错误。

词向量:让机器真正“理解”词语含义
词向量不是简单的编号或独热编码,而是把每个词映射成一个稠密的实数向量,使得语义相近的词在向量空间中距离更近。比如“国王”和“王后”向量夹角小,“苹果”和“香蕉”靠近,而“苹果”和“坦克”则远离。
常用预训练词向量包括Word2Vec(Google)、GloVe(Stanford)和FastText(Facebook)。它们各有侧重:Word2Vec擅长捕捉局部上下文关系;GloVe在全局共现统计上更稳定;FastText能处理未登录词(OOV),通过子词(subword)拼接生成词向量。
实际使用建议:
- 小项目或中文场景可直接加载Chinese-Word-Vectors(如SGNS、w2v.baidu-news-zh)
- 用gensim加载.bin或.text格式模型,注意中文需提前分词(推荐jieba或pkuseg)
- 避免直接用原始向量做分类——应先做归一化,或取句中所有词向量的加权平均(如TF-IDF加权)
从词向量到句子表示:不止是简单平均
把一句话变成一个向量,是文本分类前的关键一步。单纯对词向量取算术平均会丢失语序和结构信息,效果有限。
立即学习“Python免费学习笔记(深入)”;
更实用的做法有:
- TF-IDF加权平均:高频但通用的词(如“的”“了”)权重低,专业或区分性强的词权重高
- Doc2Vec:直接学习段落/文档级向量,适合短文本(如评论、标题),训练时需标注段落ID
- 预训练语言模型微调:用BERT、RoBERTa等提取[CLS]向量,或对最后一层隐状态做池化(推荐mean pooling而非max)
注意:若用BERT类模型,别忘了用对应分词器(如BertTokenizer)处理中文,且要截断补长到统一长度(如64或128)。
文本分类实战:三步搭建有效模型
不依赖深度框架也能快速验证效果。以新闻分类(体育/财经/娱乐)为例:
- 数据准备:清洗标点、去停用词(可用哈工大停用词表)、统一繁简(如opencc)、划分训练/验证/测试集(建议7:1.5:1.5)
- 特征构建:用TfidfVectorizer提取n-gram(1~2)特征,max_features设为10000~50000,避免维度爆炸
- 模型选择:初筛推荐LinearSVC或LogisticRegression(速度快、可解释性强);若效果瓶颈,再上LightGBM或微调BERT
评估时别只看准确率——类别不均衡时重点看宏平均F1(macro-F1),并画混淆矩阵定位误判类型(如“股市”常被错分为“体育”)。
进阶提示:避开常见坑点
很多效果差不是模型问题,而是细节没控住:
- 中文分词不一致:训练用jieba,预测时换hanlp → 向量对不上。务必固化分词器版本与参数
- 向量未对齐:Word2Vec词表外的词直接丢弃,导致句子向量稀疏。应设默认向量(如全零或随机正态)并记录OOV率
- 分类器输入未标准化:TF-IDF输出是稀疏矩阵,但某些模型(如MLP)需要dense array,记得调用toarray()
- 验证方式错误:用train_test_split随机切分,却没按label分层(stratify=y)→ 验证集缺某类样本










