标准回答
一、最朴素:聚合成固定向量
文本分类需要把变长文本变成定长特征,最简单的是对句中所有词向量做聚合:
- 平均池化:所有词向量取均值,实现简单、效果尚可,是常见基线
- TF-IDF 加权平均:用 TF-IDF 给词加权,让信息量大的词主导句向量,弱化停用词
- 最大池化:逐维取最大值,突出最显著特征
二、进阶:交给神经网络建模
聚合会丢词序与局部结构,更强的做法是把词向量序列直接喂给网络:
- TextCNN:用不同宽度卷积核在词向量序列上滑动,捕捉 2-gram、3-gram 等局部短语特征,再池化分类,速度快、短文本效果好
- BiLSTM:双向建模序列依赖,适合较长、语序敏感的文本
- FastText:把词与 n-gram 向量平均后接 softmax,极快、强基线,工业冷启动常用
三、预训练与微调
可用 Word2Vec / GloVe / FastText 预训练词向量初始化 Embedding 层,小数据上能显著提升并加速收敛;数据充足时再随分类任务微调,让向量贴合本任务语义。
四、相比传统方法的优势
- 对比 one-hot / BoW:词向量是稠密低维表示,天然带语义泛化(近义词向量接近),缓解维度灾难与稀疏问题
- BoW 把每个词当独立符号,无法体现"好"和"棒"相近,词向量则可
五、局限
- 经典词向量是静态的,一词一向量,无法消歧多义词
- 长文本做平均会稀释关键信息、丢失结构
- 进阶方案改用 BERT 等上下文向量取句表示,能消歧并更好建模长程语义,是当前主流
常见误区
⚠️ 常见踩坑
误区一:以为对词向量做平均就够好——平均丢词序与局部结构,长文本尤其严重,应视任务上 TextCNN/BiLSTM 或上下文模型。误区二:小数据上还从零训 Embedding,浪费数据且不稳,应优先用预训练词向量初始化。误区三:把静态词向量当成能消歧的万能表示,多义词、反讽、否定等场景静态向量会失效,需要上下文向量。误区四:忽略 OOV 处理,未登录词直接丢弃或随机向量会损害效果。
追问
追问 1:Embedding 层在训练中要冻结还是微调?
追问 2:TextCNN 为什么对文本分类有效?
TextCNN 用不同宽度卷积核在词向量序列上滑动,等价于自动学习关键 n-gram(短语)特征,再用最大池化挑出最显著的,对"是否出现某类判别性短语"这种分类信号很敏感;它参数少、并行度高、训练快,在短文本分类上常逼近甚至超过更重的 RNN。
追问 3:什么时候该从词向量升级到 BERT?
当任务对多义消歧、否定/反讽、长程依赖敏感,或静态词向量方案精度触顶时,应升级到 BERT 等上下文向量:同词随上下文变化、天然消歧、语义更精准。代价是算力与延迟更高,对短文本、低延迟或资源受限场景,FastText/TextCNN 仍是高性价比选择。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习