Day 118 — NLP 基础 图解
📊 NLP 处理流水线
┌─────────────────────────────────────────────────────────────────────┐
│ NLP 处理流水线 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 原始文本 │───→│ 分词 │───→│ 去停用词 │───→│ 特征提取 │ │
│ │ │ │ jieba │ │ │ │ TF-IDF │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ │ 分类/预测 │←───│ 训练模型 │←───│ 向量化 │ │
│ │ │ │ │ NB/SVM/LR│ │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │
│ │ │
│ └──→ ┌──────────┐ │
│ │ 输出结果 │ │
│ │ 类别标签 │ │
│ └──────────┘ │
└─────────────────────────────────────────────────────────────────────┘
📊 TF-IDF 计算流程
┌────────────────────────────────────────────────────────────┐
│ TF-IDF 计算过程 │
├────────────────────────────────────────────────────────────┤
│ │
│ 文档 D: "机器学习是人工智能的重要方法" │
│ │
│ Step 1: 分词 │
│ ┌────┬────┬────┬────┬────┬────┬────┐ │
│ │机器│学习│是 │人工│智能│的 │重要│方法│ │
│ └────┴────┴────┴────┴────┴────┴────┘ │
│ │
│ Step 2: 计算 TF(词频) │
│ ┌──────────────────────────────────────┐ │
│ │ TF("机器") = 1/8 = 0.125 │ │
│ │ TF("学习") = 1/8 = 0.125 │ │
│ │ TF("是") = 1/8 = 0.125 ← 低区分度 │ │
│ └──────────────────────────────────────┘ │
│ │
│ Step 3: 计算 IDF(逆文档频率) │
│ ┌──────────────────────────────────────┐ │
│ │ IDF("机器") = log(4/3) = 0.288 ← 高 │ │
│ │ IDF("学习") = log(4/3) = 0.288 ← 高 │ │
│ │ IDF("是") = log(4/4) = 0.000 ← 低 │ │
│ └──────────────────────────────────────┘ │
│ │
│ Step 4: TF × IDF │
│ ┌──────────────────────────────────────┐ │
│ │ TF-IDF("机器") = 0.125 × 0.288 = 0.036 │
│ │ TF-IDF("是") = 0.125 × 0.000 = 0.000 ← 无信息量! │
│ └──────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────┘
📊 稀疏向量 vs 稠密向量
TF-IDF 稀疏向量(维度 = 词典大小 ≈ 10000+)
┌─────────────────────────────────────────────────────────────┐
│ [0.0, 0.0, 0.0, 0.036, 0.0, 0.0, 0.0, 0.0, ..., 0.0] │
│ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ │
│ └──┴──┴──┘ └──┴──┴──┘ │ │
│ 全是 0 几个非零值 最后也是 0 │
│ │
│ 特点: 高维、稀疏、无语义关系 │
└─────────────────────────────────────────────────────────────┘
Word Embedding 稠密向量(维度 = 100~300)
┌─────────────────────────────────────────────────────────────┐
│ [0.23, -0.15, 0.87, 0.42, -0.33, 0.91, 0.12, ...] │
│ ↑ ↑ ↑ ↑ ↑ ↑ ↑ │
│ 每个维度都有意义! │
│ │
│ 特点: 低维、稠密、包含语义信息 │
│ "国王" - "男人" + "女人" ≈ "女王" │
└─────────────────────────────────────────────────────────────┘
📊 Word2Vec 训练架构
┌─────────────────────────────────────────────────────────────┐
│ Word2Vec 两种架构 │
├─────────────────────────┬───────────────────────────────────┤
│ CBOW (连续词袋) │ Skip-gram │
├─────────────────────────┼───────────────────────────────────┤
│ │ │
│ 上下文 → 预测目标词 │ 目标词 → 预测上下文 │
│ │ │
│ ┌─────┐ │ ┌─────┐ │
│ │ "我" │──┐ │ │ │──→ "我" │
│ └─────┘ │ │ │ │ │
│ ┌─────┐ ├──→[预测] ──→ "学习" │ │ │
│ │ "在" │──┤ │ │"学习"│──→ "在" │
│ └─────┘ │ │ │ │ │
│ ┌─────┐ │ │ │ │──→ "NLP" │
│ │"NLP"│──┘ │ └─────┘ │
│ └─────┘ │ │
│ │ │
│ ✅ 训练速度快 │ ✅ 效果更好 │
│ ✅ 频繁词效果好 │ ✅ 罕见词效果好 │
│ ❌ 罕见词效果差 │ ❌ 训练较慢 │
└─────────────────────────┴───────────────────────────────────┘
📊 jieba 分词模式对比
输入: "南京市长江大桥"
精确模式 (cut):
┌─────┬──────────┐
│南京市│ 长江大桥 │
└─────┴──────────┘
→ 最精确,无冗余词
全模式 (cut_all):
┌─────┬───┬──┬──┬──┬──────────┬──┐
│南京市│南京│市长│长江│大桥│ 长江大桥 │桥│
└─────┴───┴──┴──┴──┴──────────┴──┘
→ 所有可能组合,有冗余
搜索引擎模式 (cut_for_search):
┌─────┬────┬──┬────┬──────────┬──┐
│南京市│南京│市长│长江│ 长江大桥 │大桥│
└─────┴────┴──┴────┴──────────┴──┘
→ 兼顾召回和精确