阶段一 · NLP 基础与文本表示

NLP 全景图:从规则到深度学习

一句话总结

NLP(自然语言处理)是让机器理解人类语言的技术领域.
对骂检测和意图识别,本质上是其中最成熟的"文本分类"任务--不需要前沿研究,工程做好就能落地.

NLP 是什么

自然语言处理(Natural Language Processing,NLP)是人工智能的一个子领域,核心目标是让计算机能够处理,理解和生成人类语言.

如果把 AI 比作一个人:
计算机视觉 = "眼睛",
语音识别 = "耳朵",
NLP = "大脑中的语言区", 负责理解文字含义,判断情绪,提取意图.

后端开发日常其实已经接触过 NLP 的应用场景:

  • 搜索引擎的查询理解(分词,同义词扩展)
  • 内容审核系统(违规文本检测--和对骂检测同类)
  • 智能客服的意图分流("查余额" → 余额查询接口)
  • ChatGPT/Claude 这类大语言模型(LLM)

技术演进:三代范式

NLP 的发展可以清晰地分为三个阶段,每个阶段的核心差异在于**"规则从哪来"**:

flowchart LR A["规则时代  
1950-2000"] -->|"数据驱动"| B["统计学习时代
2000-2018"] B -->|"预训练革命"| C["深度学习时代
2018-至今"]

规则时代:人工编写规则

早期 NLP 靠语言学家手写规则. 比如做情感分析:

if 文本包含("傻逼", "滚", "你妈") → 判定为辱骂
if 文本包含("哈哈", "不错", "赞") → 判定为正面

业务冷启动阶段也会用到这种方式--用关键词 + 正则先跑一版 baseline,能覆盖最明显的对骂场景.

规则方法的天花板

规则系统最大的问题是覆盖不全 + 维护成本爆炸. "你这个人真有意思"到底是夸还是骂? "我服了"是认输还是讽刺? 语言的歧义性让规则迅速失控.

统计学习时代:从数据中学规则

核心思路转变:不再手写规则,而是给机器大量标注好的数据,让它自己学出规则(模式).

规则时代 = 硬编码 if-else.
统计学习 = 给系统一堆请求日志和正确响应, 让系统自己学出路由规则.

这个阶段的代表技术:

技术 类比理解 适用场景
朴素贝叶斯(Naive Bayes) 根据词频统计概率 垃圾邮件过滤
SVM 支持向量机 找一条线把两类数据分开 文本分类
CRF 条件随机场 考虑上下文的序列标注 命名实体识别,分词
TF-IDF + LogisticRegression 词频加权 + 逻辑回归分类 各种文本分类 baseline

后面会用到的 FastText 就属于这个阶段的巅峰之作--训练快(几分钟),效果好(很多场景能到 90%+),部署极简.

深度学习时代:预训练 + 微调

2018 年 BERT 的出现是分水岭. 核心范式变成:

  1. 预训练(Pre-training):在海量无标注文本上学习语言的通用表示(就像一个人先读了几万本书)
  2. 微调(Fine-tuning):在特定任务数据上做少量训练,让通用模型适配具体场景

预训练 = 招一个有 10 年经验的高级工程师.
微调 = 花一周让他熟悉业务代码.
比从零培养应届生(从头训练)快得多,效果也好得多.

这个范式的威力在于:不需要海量标注数据,几百到几千条就能微调出不错的效果.

NLP 任务分类:任务定位

NLP 的任务种类很多,核心可以按输入 → 输出的关系分为四大类:

类型 输入 输出 典型任务 业务对应
序列分类 一段文本 一个类别标签 情感分析,垃圾过滤 对骂检测,意图识别
序列标注 一段文本 每个 token 一个标签 命名实体识别,分词 -
序列生成 一段文本 另一段文本 翻译,摘要,对话 大模型劝架回复
文本匹配 两段文本 相似度/是否蕴含 问答匹配,重复检测 -

好消息

对骂检测和管理指令识别都属于序列分类,这是 NLP 中最成熟,资料最多,上手最快的任务类型. 不需要碰序列生成那些复杂的东西.

系统架构定位

回到"小模型前置 + 大模型按需"架构,每个组件在 NLP 技术栈中的位置:

flowchart TD A["群聊消息流"] --> B["文本预处理  
分词/清洗"] B --> C{"小模型层
(本学习路线重点)"} C -->|"辱骂概率 > 阈值"| D["触发干预"] C -->|"管理指令"| E["解析为结构化动作
禁言/踢人/警告"] C -->|"语义模糊/需要上下文"| F["大模型层
GPT/Claude"] F --> G["生成劝架回复
或复杂判断"] style C fill:#dbeafe,stroke:#3b82f6 style F fill:#fef3c7,stroke:#f59e0b
组件 NLP 任务 技术选型 延迟要求
对骂检测 文本分类(二分类/多标签) BERT-tiny / FastText < 10ms
情绪强度评估 回归 / 多分类 轻量 BERT 变体 < 10ms
管理指令识别 意图分类(Intent Classification) Few-shot / 规则 < 5ms
复杂语义判断 自然语言推理 大模型 API 1-3s
劝架回复生成 对话生成 大模型 API 2-5s

核心术语速查

后续笔记中会反复出现这些概念,先建立索引:

术语 一句话解释 后端类比
Token 文本被切分后的最小单元(词/子词) HTTP 请求被路由解析成的路径段
Embedding 把 token 映射为固定维度的数字向量 把字符串 ID 映射成内存中的结构体
模型(Model) 一个接收输入,产生输出的函数,参数通过训练学得 一个有状态的函数,配置通过调参优化
训练(Training) 喂数据给模型,让它自动调整参数以减小预测误差 类似压测后根据指标调整限流阈值
推理(Inference) 训练好的模型接收新输入,给出预测 部署后的服务处理线上请求
微调(Fine-tuning) 在预训练模型基础上,用少量领域数据继续训练 fork 一个开源项目后做定制修改
损失函数(Loss) 衡量模型预测与真实答案之间差距的指标 类似监控中的错误率指标
过拟合(Overfitting) 模型在训练数据上很好,但泛化到新数据时表现差 单元测试全绿但线上翻车--测试没覆盖真实场景

机器学习流水线概览

不管用什么模型,NLP 项目的工程流程是固定的. 把它类比成一个数据处理 pipeline:

flowchart LR A["数据收集"] --> B["数据标注"] B --> C["特征工程/预处理"] C --> D["模型训练"] D --> E["评估验证"] E -->|"不达标"| C E -->|"达标"| F["导出部署"] F --> G["线上推理"] G --> H["监控+回收"] H -->|"新数据"| B
步骤 做什么 角色定位
数据收集 从群聊日志中采集消息 主力(Go 服务采集)
数据标注 标记"对骂/正常/阴阳怪气" 设计标注规范 + 工具
特征工程 文本清洗,分词,向量化 了解原理,Python 脚本执行
模型训练 选模型,调参,跑训练循环 掌握流程,能独立操作
评估验证 看 P/R/F1 指标,分析 bad case 能读懂指标,定位问题
导出部署 ONNX 导出 → 推理服务 主力(后端强项)
线上推理 Go gRPC 调用推理服务 主力
监控回收 收集线上 bad case,回流标注 主力(数据飞轮)

工程师的优势

机器学习项目中,模型训练只占 20% 的工作量.
数据管道,部署,监控,持续迭代占了 80%--这些全是工程师的主场.
很多 ML 项目失败不是因为模型不好,而是工程基建太差.

这个阶段不需要学的

明确边界,避免掉入"从头学数学"的陷阱:

  • 不需要:线性代数推导,反向传播数学证明,论文精读
  • 不需要:从零实现神经网络(用框架即可)
  • 不需要:强化学习(任务是分类,不是决策)
  • 不需要:生成模型原理(大模型部分直接调 API)
  • 需要:理解每个组件在做什么(直觉层面)
  • 需要:能跑通训练 + 部署全流程
  • 需要:能读懂评估指标,知道什么时候模型"够用"

快速回顾

  • NLP 三代范式:规则 → 统计学习 → 预训练+微调,每代解决上一代的覆盖率和维护成本问题
  • 任务定位:序列分类--NLP 中最成熟的任务类型,FastText 到 BERT 都能做
  • 系统架构:小模型(分类)前置过滤 + 大模型(生成)按需兜底
  • 工程占比 80%:数据管道,部署,监控是项目成功的关键,也是工程师的主场
  • 学习策略:先建直觉,再跑流程,不纠结数学推导

动手练习

  1. 安装 Python 环境:推荐 conda/miniconda,确认 pip install transformers torch 能成功
  2. 体验 NLP pipeline:跑一行代码感受效果 from transformers import pipeline; classifier = pipeline("sentiment-analysis"); print(classifier("你这个人真有意思"))
  3. 收集种子数据:收集 20 条群聊对骂样本和 20 条正常对话样本,保存为 CSV(text, label 两列)--这是后续所有实验的种子数据