网络工程小王头像
关注
【HCIE-AI】4.NLP 核心任务与技术演进学习笔记封面图

【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~1990s1990s~2010s2013~至今
词表示one-hot / 计数特征工程词嵌入 → 上下文嵌入
核心方法统计频率 + 概率人工特征 + 浅层模型端到端深层神经网络
代表模型n-gram、词袋+TF-IDFNB、SVM、HMM、CRFRNN/LSTM、Transformer、BERT/GPT
长距离依赖完全不行不行注意力一步直达
语义理解有(词嵌入/上下文表示)
任务适配每任务定制每任务定制特征预训练 + 微调/提示,统一
主要瓶颈数据稀疏人工特征算力 / 数据 / 可解释性

3.2 一条主线串讲

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

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


转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2201_75633021/article/details/163734087

文章来源crawl

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--