本课目标

用两条技术路线完成影评情感分析:传统 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 基线 + 预训练模型微调是当下的主流组合。

动手练习

  1. 跑通两条路线,记录准确率与训练耗时对比
  2. 查看 TF-IDF 权重最高的正/负向词——验证模型学到的是语义还是噪音