← 返回 Day 118 正文

Day 118 · 图解

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):
  ┌─────┬────┬──┬────┬──────────┬──┐
  │南京市│南京│市长│长江│  长江大桥  │大桥│
  └─────┴────┴──┴────┴──────────┴──┘
  → 兼顾召回和精确