本课目标
用两条技术路线完成影评情感分析:传统 TF-IDF + 逻辑回归做基线,Embedding + LSTM 做进阶,理解"词袋"与"序列"两种文本建模范式。
文本分类是 NLP 的 hello world,也是业务最常遇到的需求——评论情感、工单意图、垃圾识别。本讲走两条路线:第一条 5 分钟跑出 88% 准确率,第二条用深度学习推到 90%。踩完这两条路,你就知道"什么时候该用什么"。
核心内容
路线一:TF-IDF + 逻辑回归(永远先跑这个)
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
pipe = Pipeline([
('tfidf', TfidfVectorizer(max_features=20000, ngram_range=(1, 2))),
('clf', LogisticRegression(max_iter=1000, C=1.0)),
])
pipe.fit(train_texts, y_train)
TF-IDF 的思想:一个词在这篇文档里频繁出现、但在别的文档里少见 → 它对这篇文档很重要。ngram_range=(1,2) 把 "not good" 这种二元组也当特征——部分挽回词序信息,不用 LSTM 也能有一定上下文理解。
这条路线 5 分钟出结果,准确率 ~88%。永远先跑这个基线。所有复杂方案必须显著超越它才有存在价值。
路线二:Embedding + LSTM
model = keras.Sequential([
keras.layers.Embedding(vocab_size, 128, input_length=max_len),
keras.layers.LSTM(64, dropout=0.2),
keras.layers.Dense(1, activation='sigmoid'),
])
Embedding 层把每个词映射成 128 维稠密向量——"精彩"和"好看"的向量会自然相近。LSTM 按序读词并维护"记忆门",能捕捉"这部电影一点都不……好吧开头其实还行"这种长距离语义逆转。
两条路线的工程取舍
| TF-IDF + LR | Embedding + LSTM | |
|---|---|---|
| 训练成本 | 分钟级,CPU | 十倍起,最好有 GPU |
| 准确率上限 | ~88% | ~90%(需调参) |
| 可解释性 | 看系数就知哪个词关键 | 黑盒 |
| 适用场景 | 快速验证、小数据、合规 | 数据充足、追求上限 |
2026 年的实话:追求文本分类上限,直接微调小 BERT 通常优于手写 LSTM。但理解 LSTM 的序列思想是理解 Transformer 的必要台阶。工程上,TF-IDF 基线 + 预训练模型微调是当下的主流组合。
动手练习
- 跑通两条路线,记录准确率与训练耗时对比
- 查看 TF-IDF 权重最高的正/负向词——验证模型学到的是语义还是噪音