11 自然语言处理建模¶
说明
本文档仅涉及部分内容,仅可用于复习重点知识
Natural Language Processing(NLP):自然语言处理
11.1 概述¶
11.1.1 NLP 任务分类¶
- 语音识别
- 文本分析理解:NLP 最基本的任务
- 文本转换
- 文本生成:通过自回归技术迭代生成的
11.1.2 技术演变¶
- 基于规则的算法
- 统计语言模型:弗雷德里克·贾里尼克团队第一次把 NLP 问题转换成一个数学问题
- 序列生成模型:编码器 - 解码器神经网络、注意力机制
- 预训练大模型
预训练:在大量无标注的数据上进行模型的训练
预训练 - 微调模式使得人类无须对海量语料进行标注即可进行模型的训练,因此模型参数可以设计得非常大,无须担心过拟合得问题。模型参数得急速膨胀使得模型性能不断攀升,研究人员也在试图找到一个参数数量寄点,当越过这个寄点,AI 能实现真正意义上的 AGI(通用人工智能)

11.2 NLP 技术基础¶
11.2.1 分词¶
token:可以是一个字,也可以是一个词,或者是一个字母,甚至是一个字节,要看具体的情况。本质上,一个“Token”就是通过分词技术(工具)将一句话分割成的最小单位,是一个特定的自然语言处理模型能处理的最基本元素
NLP 的第一步工作就是进行分词
11.2.2 词向量与词嵌入¶
词向量 / 词嵌入(word embedding):通过语言模型学习得到的词的特征分布,它包含了大规模语料中复杂的上下文信息
- 词向量:数字编码技术
- 词嵌入:NLP 各网络层之间的数据存在形式
分布式表示:

独热表示:得到二维稀疏矩阵,可以处理成一维稠密矩阵

11.2.3 文本相似度¶
1.余弦相似度:衡量两个向量在方向上相似程度的度量方法
\(\text{Cosine Similarity} = \cos \theta = \dfrac{A · B}{||A||\ ||B||}\)
2.欧氏距离:空间中两点间的直线距离
\(d = \sqrt{\sum\limits_{i=1}^n(x_i - y_i)^2}\)
3.Jaccard 相似度:用于比较两个集合之间相似性和多样性
\(J(A, B) = \dfrac{|A \cap B|}{|A \cup B|}\)
\(EJ(A, B) = \dfrac{A · B}{||A||^2 + ||B||^2 - A · B}\)
4.曼哈顿距离:从一个十字路口到另一个十字路口的最短路径
\(d = \sqrt{\sum\limits_{i=1}^n|x_i - y_i|}\)
11.3 经典 NLP 模型¶
11.3.1 词袋模型¶
Bag of word(BoW)是自然语言处理和信息检索中的一种常用文本表示方法。它将文本表示为一个词的集合,忽略词语的上下文关系,只计算词语的出现频率和其他统计值
构建过程:
- 分词
- 构建词表:每个词语对应一个唯一的索引
- 计算词频
- 向量化
常用统计量:
- TF:衡量词语在文档中出现频率得统计量
- IDF:如果某个关键词在一篇文章中出现的频率很高,并且在其他文章中很少出现,则认为这个关键词具有很好的类别区分能力,适合用来分类
- TF-IDF:评估一个词对于一个文档或一个语料库的重要性
11.3.2 Word2Vec¶
将离散的单词(字)映射到连续的向量空间中,向量的每个维度表示一个特征(属性)
将词汇表中的每个词用固定长度的向量来表示,这个固定的长度就叫维度
构造变换矩阵对输入矩阵进行降维

两种实现方式:
- CBoW:使用给定上下文词(周边词)来学习预测中心词
- Skip-Gram:通过给定的中心词,来学习预测上下文词

11.3.3 Seq2Seq¶
其核心思想是使用一个编码器网络将输入序列(如源语言句子)编码为一个固定维度的向量或一系列隐状态,然后使用一个解码器网络从这个向量或隐状态出发,逐词生成目标序列(如目标语言句子)。整个过程无须人工设计复杂的语言规则,而是让神经网络自行学习如何进行有效的序列转换

编码器和解码器都是深度学习网络
输入的文本(自然语言)通过编码器将词嵌入逐层变换传递,而解码器则再将词嵌入逐层变换传递翻译成文本(自然语言)输出
词嵌入对人类而言就像黑盒子一样,难以解释,但这恰恰就是 AI 的分析和理解过程
11.4 Transformer 结构¶
Transformer 是一种基于注意力机制的序列模型,是一种特殊的 Seq2Seq 编码器 - 解码器结构。它引入了自注意力机制使得模型可以并行地处理序列中的每个 Token,解决了 RNN 只能一个个串行处理的问题

11.4.1 编码器¶
编码器网络由多个编码器层堆叠而成,每个编码器层接收来自嵌入层的输出

- 分词:
S = [我, 在, 学, 人, 工, 智, 能]
- 增加位置序列:
P = [1, 2, 3, 4, 5, 6, 7]
- 编码:在嵌入层网络,完成对 S 和 P 的编码工作,然后将 S 与 P 进行拼接,输出向量 X
- 词嵌入 X 经过多头注意力运算输出词嵌入 Z
- 跨层连接与归一化处理:通过加入参差连接和层归一化,使得网络训练更加稳定,收敛效果更好
- 完成输出:输出词嵌入 E



逐位置前馈网络:是一个两层的前馈神经网络,每个位置的词向量都独立地经过这个网络进行变换,而不是通常的将多维输入向量平铺展开成一维的向量。在上图中展示的是采用两个一维卷积网络进行运算的过程,第一个卷积层将输入变换到高维度空间,第二个卷积层再降维到原始的维度
11.4.2 解码器¶

解码器网络由多个解码器层堆叠而成,每个解码器层接收来自编码器的输出 E、前一层的解码器输出
- 预处理:完成位置编码和解码器输入编码的拼接
- 填充掩码:输出采用自回归算法,为防止看到未来数据,所以需要增加一个掩码操作,把当前位置之后的数据掩盖掉,解码器边生成边向右移动,直到出现终止条件
- 多头注意力层处理
- 跨层和归一化处理
- 编码器 - 解码器多头注意力层
- 完成第一层输出
- 解码器的输出:接下去的解码器层的输入均来自上一层解码器的输出,不再接收样本数据
- 最终输出:最后再通过全连接层和 softmax 层输出最终的预测结果

11.4.3 多头注意力机制¶
多头注意力机制的目的是在多个子空间中捕获多种特征,同时实现并行处理,从而加快训练速度。对于同一个输入序列,通过多头注意力机制可以从不同的角度来进行特征提取,每一个头都关注某一个特征
- Q(query,查询):当前需要关注或查询的信息点
- K(key,键):输入数据中的各个部分或特征
- V(value,值):实际被加权求和以生成输出的参数,它包含了输入数据中的具体信息
自注意力机制
- 线性变换
- 计算注意力分数:\(score = QK^T\)
- 归一化注意力分数:通过 softmax 函数对注意力分数进行归一化
- 最终的注意力分数

多头注意力机制
将 Q、K、V 分为 N 个头,每个头使用不同的权重参数进行自注意力计算,所有这些头的注意力分数会拼接起来,产生最后的多头注意力分数

11.4.4 3 种类型的 Transformer 模型¶
- BERT:仅使用编码器
- GPT:仅使用解码器
- T5:编码器和解码器都使用