【HCIE-AI】4.NLP 核心任务与技术演进学习笔记

第一章 NLP 四大核心任务

NLP 的任务可以归纳为四大类:文本分类、序列标注、信息抽取、文本生成 。 几乎所有实际应用(搜索引擎、客服机器人、翻译、写作助手)都是这四类的组合。

1.1 文本分类(Text Classification)

定义:给整段文本打一个类别标签。

  • 输入:一段文本
  • 输出:一个类别(有限集合中的一个)

典型应用

应用 输入 类别
情感分析 "这家餐厅的菜太好吃了!" 正面 / 负面 / 中性
垃圾邮件识别 一封邮件正文 垃圾 / 正常
意图识别 "帮我订一张明天去北京的机票" 订机票 / 查天气 / 闲聊
新闻分类 一篇新闻稿 体育 / 财经 / 科技 ...

例子

复制代码
输入: "这家餐厅的菜太好吃了!"  →  输出: 正面
输入: "快递三天了还没到,差评"  →  输出: 负面

评价指标

  • 准确率(Accuracy):预测对的占比(类别均衡时够用)
  • 精确率 / 召回率 / F1:类别不平衡时更可靠(垃圾邮件只占 1%,全猜"正常"准确率也有 99%)

本质 :把"整段文本"压缩成一个标签 ------ 需要抓住全局语义。

1.2 序列标注(Sequence Labeling)

定义:对文本中**每一个 token(字/词)**打一个标签。

与文本分类的区别

  • 分类:整段文本 → 1 个标签
  • 标注:N 个 token → N 个标签(逐词分类)

典型应用

应用 标签示例
中文分词 每个字标 B/M/E/S(词开始/中间/结束/单独成词)
词性标注 名词 / 动词 / 形容词 ...
命名实体识别 NER 人名 / 地名 / 机构名 / 时间

评价指标:与分类类似,但按"实体级"算(一个实体整体识别对才算对), 即精确率/召回率/F1 的实体版本。

本质:token 级分类 ------ 既要看每个词自身,又要看上下文。

1.3 信息抽取(Information Extraction)

定义 :从非结构化文本中抽取结构化信息,通常指三大子任务:

  1. 实体识别 :找出人名、地名、机构等(与序列标注重叠,通常用 NER 完成)
  2. 关系抽取:识别实体对之间的关系
  3. 事件抽取:识别"谁在何时何地做了什么"

例子(关系抽取 → 三元组)

复制代码
原文: "张三在阿里巴巴工作,担任算法工程师。"
三元组: (张三, 就职于, 阿里巴巴)
        (张三, 担任, 算法工程师)

三元组是构建知识图谱的基本单元。

与序列标注的关系

  • 实体识别 = 序列标注任务
  • 关系抽取 = 通常建模为"实体对分类"或"生成式"(直接生成三元组文本)

本质:把非结构化文本变成结构化数据(表格 / 图谱 / 数据库),供下游检索、问答使用。

1.4 文本生成(Text Generation)

定义 :根据输入(或无输入)生成一段新的文本

典型应用 :机器翻译、文本摘要、对话系统、写作辅助、代码生成。

核心原理:自回归(Autoregressive) 逐词预测下一个词,把上一步的输出作为下一步的输入:

复制代码
输入 [<BOS>]        → 预测 "I"
输入 [<BOS>, I]     → 预测 "love"
输入 [<BOS>, I, love] → 预测 "you"
输入 [...I love you]  → 预测 <EOS>,停止

生成策略

  • 贪心:每步取概率最高的词(快但可能平庸)
  • 束搜索(Beam Search):每步保留 top-k 条路径,全局更优(翻译常用)
  • 采样:按概率分布随机抽(有创造性,对话/写作常用),温度 T 控制随机程度

评价指标:BLEU(翻译)、ROUGE(摘要)------与参考文本的 n-gram 重合度。

本质:学习"给定前文,下一个词的概率分布",是四大任务里唯一真正"产出新内容"的。

1.5 四大任务对比总表

任务 输入 输出 本质 典型应用 代表模型
文本分类 一段文本 一个类别 全局语义 → 标签 情感分析、意图识别 TextCNN、BERT
序列标注 一段文本 每个 token 一个标签 token 级分类 分词、NER、词性标注 BiLSTM+CRF、BERT+CRF
信息抽取 一段文本 结构化三元组 实体 + 关系识别 知识图谱构建 管道式 / 生成式大模型
文本生成 文本 / 指令 一段新文本 逐词预测下一个词 翻译、摘要、对话 RNN、Transformer、GPT

一条记忆线:分类是"整体打标",标注是"逐个打标",抽取是"挖出结构", 生成是"写出新文"。前三个是"理解类",最后一个是"生成类"。


第二章 技术演进史

核心问题始终是三个:

  1. 怎么表示文本(词表示)
  2. 怎么建模序列(模型结构)
  3. 怎么应用到任务(使用范式)

三代技术分别给出了不同的答案。


2.1 第一代:规则 + n-gram 统计时代(1950s ~ 1990s)

2.1.1 核心思想

不追求"理解",只做统计 :从大规模语料中统计词与词的共现频率, 用频率估计概率,用概率做预测。

2.1.2 语言模型(Language Model)概念

语言模型回答:一句话出现的概率是多少?

复制代码
P(我今天很开心) = ?

按链式法则拆解:
P(w1) × P(w2|w1) × P(w3|w1,w2) × ... × P(wn|w1...w_{n-1})

即: P(我) × P(今天|我) × P(很|我今天) × P(开心|我今天很)

问题:条件太长,"我今天很"这种前缀在语料里可能一次都没出现过, 概率没法算。于是引入 n-gram。

2.1.3 n-gram 原理

马尔可夫假设 :一个词只依赖它前面的 n-1 个词,忽略更早的历史。

模型 假设 计算
一元 unigram 词与词独立 P(w_i)
二元 bigram 只依赖前 1 个词 P(w_i | w_{i-1})
三元 trigram 只依赖前 2 个词 P(w_i | w_{i-2}, w_{i-1})

计算例子(二元)

复制代码
P(学习 | 我爱) = count("我爱学习") / count("我爱")

假设语料中:
  "我爱" 出现 100 次
  "我爱学习" 出现 30 次
则 P(学习 | 我爱) = 30 / 100 = 0.3

整句概率(二元模型下):

复制代码
P(我爱学习) = P(我) × P(爱|我) × P(学习|爱)

平滑处理(关键细节): 如果某个 n-gram 在语料中从未出现,概率为 0,会导致整句概率乘成 0。 解决办法是"平滑"------给未见过的组合留一点概率:

复制代码
加一平滑: P = (count + 1) / (N + V)   # V 为词表大小
2.1.4 当时的任务做法
  • 文本分类:词袋模型(Bag of Words)------把文本变成"词出现次数"的向量, 再用 TF-IDF 加权(抑制"的、了"等高频无意义词),然后算相似度或直接做统计判断。
  • 机器翻译:基于短语的统计机器翻译,查"短语翻译表" + 调序模型。
2.1.5 局限
  1. 数据稀疏:n 越大,组合越多,语料越不够用("n=5 基本没法用")
  2. 无长距离依赖:只看到前 n-1 个词,跨句、跨段信息完全丢失
  3. 无语义:只有表面统计,不知道"苹果"和"水果"相关

2.2 第二代:机器学习时代(浅层模型,1990s ~ 2010s)

2.2.1 核心变化

从"纯统计公式"升级为"人工特征 + 学习算法":

复制代码
特征工程(人设计)→ 特征向量 → 学习算法(自动学特征到标签的映射)→ 预测
2.2.2 代表模型
模型 特点 擅长任务
朴素贝叶斯 假设特征条件独立,简单快 文本分类
SVM 支持向量机 找最大间隔超平面,效果好 文本分类
最大熵 / 逻辑回归 可融合任意特征 分类
HMM 隐马尔可夫 生成式序列模型,状态转移 序列标注
CRF 条件随机场 判别式序列模型,全局最优标注 序列标注(当时 SOTA)

为什么 CRF 比 HMM 强

  • HMM 假设"当前状态只由上一个状态决定"(太强),且是生成式(要建模词本身)
  • CRF 是判别式,直接建模"给定句子,最优标签序列",可以自由使用 前后缀、大小写、词典等任意人工特征
2.2.3 各任务的做法
  • 文本分类:TF-IDF 特征 + SVM / 朴素贝叶斯
  • 序列标注:HMM / CRF,特征靠人工设计(词形、前缀、后缀、词典匹配)
  • 信息抽取:管道式------先 NER(CRF),再关系分类(SVM),串成流水线
  • 文本生成:统计机器翻译(短语表 + 语言模型重排)
2.2.4 局限
  1. 特征工程是瓶颈:效果好不好,全看人设计的特征好不好
  2. 模型浅 :无法捕捉深层语义("苹果"和"香蕉"在特征空间毫无关联)
  3. 任务隔离:每个任务单独设计特征和模型,几乎没有迁移能力

2.3 第三代:深度学习时代(2013 ~ 至今)

五个里程碑:词嵌入 → RNN/LSTM → Attention/Transformer → 预训练范式 → 大模型

2.3.1 里程碑①:词嵌入革命(Word2Vec, 2013)

解决的问题:词怎么表示?

  • one-hot:维度=词表大小,词与词距离恒等,无语义

  • 词嵌入(Word Embedding):稠密低维向量,语义相近的词向量相近

    国王 - 男人 + 女人 ≈ 女王 ← 向量空间里的语义运算
    苹果 ↔ 香蕉 距离近(都是水果)

词嵌入 Embedding , 它本质上是一张表: 词表大小 V × 嵌入维度 d_model(比如 V=30000, d_model=512)。

查表: "爱" → 第 1234 行 → 一个 512 维向量 0.3, -0.7, ...

要点:

这张表不是固定的,它是可训练参数!
训练时梯度会不断调整它,让语义相近的词向量靠拢。
推理时它只是查表,不再变化。

方法:Word2Vec 两种训练思路

  • CBOW:用上下文词预测中心词
  • Skip-gram:用中心词预测上下文词
2.3.2 里程碑②:RNN / LSTM 序列建模(2014 ~ 2015)

解决的问题:文本是变长序列,怎么按顺序建模?

  • RNN:按顺序逐个读词,用隐藏状态 h_t 携带"到目前为止的信息"
  • 问题 :梯度消失 → 长句子前面信息丢失 (下山的方向都已经不知道了)
  • LSTM:引入门控机制(遗忘门 / 输入门 / 输出门), 用"细胞状态"这条高速公路把信息传远

序列标注经典组合:BiLSTM+CRF(双向 LSTM 编码 + CRF 保证标签序列全局最优)

局限

  • 串行计算,无法并行(GPU 优势用不上,训练慢)
  • 长距离依赖仍是短板(LSTM 只是缓解,不是解决)
2.3.3 里程碑③:Attention + Transformer(2017, 划时代)

核心洞察 :建模序列不一定按顺序------可以让每个词直接"看"全序列的所有词, 一步建立任意两个词之间的关系。

**自注意力(Self-Attention)**四步:

复制代码
① 每个词生成 Q(查询)、K(键)、V(值) 三个向量
② 分数(i,j) = Q_i · K_j / √d_k        ← 词 i 对词 j 的关注度
③ softmax 归一化成概率
④ 输出 = Σ 概率 × V_j                  ← 按关注度混合所有词的信息

"猫 吃 鱼"中,"吃"会高权重关注"猫"(谁吃)和"鱼"(吃什么)------ 长距离依赖一步直达,不再受距离限制。

Transformer 的四大优势

优势 说明
全序列并行 所有词的注意力同时算,GPU 友好
长距离依赖一步直达 任意两个词直接相连,无信息衰减
可堆叠深层 残差连接 + LayerNorm 解决梯度问题,能叠几十层
统一架构 Encoder 管理解、Decoder 管生成,一套组件打天下

单层结构(详细推导见《Transformer 运行原理》笔记):

复制代码
输入向量
  → 多头自注意力 → +残差 → LayerNorm
  → 前馈网络 FFN → +残差 → LayerNorm
  → 输出(形状不变,可继续堆下一层)

位置编码:注意力是"集合操作"不感知顺序,需给向量加上位置信息。

2.3.4 里程碑④:预训练大模型范式(2018 ~ )

核心转变:从"每个任务训练一个模型"到"一个模型,先预训练、再微调"。

两步走

复制代码
① 预训练: 在海量无标注文本上自监督学习(让模型学会"语言")
② 微调:   在小规模任务数据上继续训练(让模型学会"干某件事")

两条路线

路线 结构 方向 擅长 代表
Encoder 路线 双向 同时看左右上下文 理解类(分类/标注/抽取) BERT
Decoder 路线 单向自回归 只看左边,逐词生成 生成类(翻译/对话/写作) GPT

为什么是革命

  • 之前的模型每个任务都要从头训练 + 大量标注数据
  • 现在同一套预训练参数,微调一下就能做四大任务中的任何一个
  • 词表示也从"静态词嵌入"升级为"上下文嵌入"(同一个词在不同句子里向量不同)
2.3.5 里程碑⑤:大模型时代(GPT-3 之后, 2020 ~ )
  • 模型规模持续放大(千亿/万亿参数),出现涌现能力
  • 使用方式从"微调"演变为"提示 / 指令":不用改参数,写清指令即可
  • 对齐技术:指令微调(SFT)→ RLHF 人类反馈对齐,让模型听话、安全
2.3.6 四大参数及训练理解

【参数 Parameter】

模型里所有"可学习的旋钮"。训练的全过程,就是不断调整这些旋钮的值,

让模型输出越来越对。

举例:Transformer 里------

  • Embedding 词嵌入表(就是你正在学的)

  • 注意力层的 W_Q、W_K、W_V

  • FFN 的 W1、W2、b1、b2

全都是参数。一个大模型有几十亿到上万亿个参数。

【权重 Weight】

参数里最常见的一类:线性变换的系数矩阵 W。

严格说:参数 = 权重 + 偏置(bias) + 其他可学习量(如 Embedding 表、位置编码)。

日常口语里"权重"和"参数"经常混用,因为神经网络里 90% 的参数都是权重。

记忆锚点:权重就是"输入乘以的那个数/矩阵"。

【梯度 Gradient】

损失函数对参数的"偏导数",回答一个问题:

"如果把某个参数调大一点点,损失会变大还是变小?变化多快?"

它是一个向量------每个参数都有一个对应的梯度分量。

关键性质:梯度的反方向 = 损失下降最快的方向。

【优化器 Optimizer】

负责"拿着梯度去更新参数"的算法。

梯度只告诉你方向,怎么走、走多快、要不要刹车,是优化器的事。

常见的有 SGD(最朴素)、Adam(现在的事实标准,自适应学习率+动量)。

把损失想象成地形海拔:

参数值 = 你所在的位置

前向传播 = 测量现在的高度

损失值 = 当前位置的海拔(越高越差)

梯度 = 脚下最陡的下坡方向

学习率 = 每步迈多大

优化器 = 你的下山策略

SGD = 老实人:每步都朝最陡方向走固定步长

Adam = 老手:带惯性(动量,冲过小坑)+ 自适应步长

(陡坡小步怕滑,平缓处大步提速)

训练 = 从山上随机位置出发,靠梯度指引一步步走下山谷(损失最低点)。


第三章 总结

3.1 三代技术对比总表

维度 第一代 n-gram 第二代 机器学习 第三代 深度学习
时代 1950s~1990s 1990s~2010s 2013~至今
词表示 one-hot / 计数 特征工程 词嵌入 → 上下文嵌入
核心方法 统计频率 + 概率 人工特征 + 浅层模型 端到端深层神经网络
代表模型 n-gram、词袋+TF-IDF NB、SVM、HMM、CRF RNN/LSTM、Transformer、BERT/GPT
长距离依赖 完全不行 不行 注意力一步直达
语义理解 有(词嵌入/上下文表示)
任务适配 每任务定制 每任务定制特征 预训练 + 微调/提示,统一
主要瓶颈 数据稀疏 人工特征 算力 / 数据 / 可解释性

3.2 一条主线串讲

整个 NLP 演进史可以浓缩为三条线的同步升级:

复制代码
词表示:  one-hot → 统计计数 → 词嵌入 → 上下文嵌入(BERT/GPT)
模型:    n-gram → SVM/CRF → RNN/LSTM → Transformer → 大模型
范式:    手工规则 → 特征+算法 → 端到端 → 预训练+微调 → 提示/指令
  • 表示越来越"懂语义"
  • 模型越来越"能并行、能看远"
  • 范式越来越"少标注、少定制、通用化"

相关推荐
冬奇Lab1 小时前
企业知识库系列(02):经典向量 RAG 实测——QAnything vs LightRAG
人工智能
星火10241 小时前
【LangChain4j系列03】AI Services 高层抽象设计解析
人工智能·后端
星火10241 小时前
【LangChain4j系列04】Tools 工具调用机制详解
人工智能·后端
fthux1 小时前
装闭 RenoPit 源码解析(08):多模态AI调用、重试与文本降级
人工智能·ai·开源·github·open source·renopit
Raas1001 小时前
MAIGateway,魔芋企业级AI网关的安全基建化设计
大数据·人工智能·网关·网络安全·api网关·mai gateway·魔芋
冬奇Lab1 小时前
开源项目第186期:Open Ontologies — Rust 实现的 AI 原生本体工程 MCP 服务器
人工智能·开源·资讯
tachibana21 小时前
文件上传分布式限流如何做?
人工智能·ai·大模型·llm·prompt
武子康1 小时前
实现 GPT-Live-like:两条路线、一个控制面和六阶段验收
人工智能·chatgpt·agent
郑州光合科技余经理1 小时前
餐饮预定系统架构拆解:订单链路、权限组织与私有化源码交付
java·开发语言·前端·数据库·人工智能·系统架构·php