大模型相关基础知识
常用数据集

Basic Knowledge of Big Models
NLP & Big Model Basics
NLP基础
什么是自然语言处理?
让计算机读懂人所写好的文字,能够像人一样去进行交互,去进行对话,去生成这个自然语言。
NLP基本任务
- 词性标注:给定一句话里面的每一个词都把词性标注出来
- 命名实体识别
- 共指消解:了解代词与前面哪个实体是指向现实世界中的同一个实体
- 依存句法:成分互相之间的依存关系标注出来,依赖关系识别
NLP应用
- 搜索引擎
- 广告投放
- 人工助手
- 机器翻译
- 情感分类和意见挖掘
- 计算社会科学
词表示
概念:把自然语言里面最基本的语言单位就是词转换成机器能够理解的词的意思
目标:计算词的相似度,推理词的关系
怎么表示词的词义
Synonym and Hypernym:用一组相关词来表示当前词
问题
- 一些词之间有一些细微的差异,这些差异利用当前手段无法解决
- 同义词,上位词等等的这些词与词之间的关系需要人工构建和维护,就会导致我们利用这种近义词或者上位词的这种表示操作性不是特别强
One-Hot Represention:任何一个词都会在一个和词表相当长的向量里找一维和这个词相对应,那么任何一个词就只用在这一维上的值为1,其他维度全是0的向量,表示文档非常有效
问题
- 这种方法它会假设词与词之间的向量都是正交的,从而导致任意两个词之间计算相似度都是0
Contextual Distribution:认为一个词的词义与它经常出现在的那个位置的上下文有密切关系,利用这个词的上下文的词来表示这个词
问题
- 当词表变得越来越大,那么存储的需求就会变得特别大
- 对于那些出现频度特别少的词,他整个的向量就会变得也别少,那么它的上下文或者语境的词就会变得很稀疏,这个稀疏就会导致词表示效果没有那么好
深度学习(大模型)所做的工作
Word Embedding:分布式表示,建立起一个低维的一个稠密的向量空间,然后尝试把每一个词都学到这个空间里面,用这个空间里面的某一个位置所对应的那个向量来表示这个词
代表性方法:Word2Vec
语言模型
概念:有能力根据前文来预测下一个词是什么
主要工作:1.联合概率:计算一个序列的词它成为合法的一句话的概率 2.根据前文来预测下一个词是什么
如何进行语言模型的构建
N-gram:统计前面出现了几个词之后,后面出现的那个词它的频度是多少
问题
- 前文越长,导致统计结果会非常稀疏,同时N越大,那么存储的量也越大
- N-gram背后其实还是典型的one-hot represention,它会假设所有的词都互相之间是独立的,所以做统计的时候上下文其实都是基于符号来去做统计,没有办法去理解这些词互相之间的相似度造成什么
Neural Language Model:用distrubuted representation这个分布式方式来建构这种前文和当前词的预测条件概率
大模型基础知识
大模型背后的机理
预训练语言模型从无标注的数据中去进行学习,然后通过自监督的任务去做预训练,然后从中去得到丰富的知识,在具体应用的时候会引入一些任务相关的一些数据然后去调整模型

Neural Network Basics(pytorch)
神经网络的基本构成
多层神经网络
在单层神经网络之后继续叠加类似的层,使得神经网络的层数增加,变成一个多层的神经网络,每层有若干个神经元,从输入开始依次计算每一层的结果,这就是所谓的前向计算

通常把这些在输入之上添加的多层网络称之为隐层,输入层称为输入层,隐层通常用h来表示,每一层的输出结果是由上一层的输出结果经由线性变换和激活函数得到的

激活函数是干什么用的
如果神经网络中只存在这样的线性运算的话,那么多层神经网络其实可以转换成单层神经网络,也就是说多层神经网络和单层神经网络它的表达能力是一致的,因此需要引入这样的非线性的激活函数,防止多层神经网络塌缩成单一的神经网络
常见激活函数
Sigmoid:把一个从0到正无穷的数转化成一个0-1之间的数
Tanh:把负无穷到正无穷之间的数转换成一个-1-1之间的数,如果输入为0的话结果也是0
ReLU:对于正数的输入,结果也为正数,对于负数的输入结果为0

输出层
取决于你想让模型去输出什么样子的数据
线性输出:直接在隐层后面再加一个线性层,适用于回归问题
Sigmoid:先用一个普通的线性层得到一个值,然后再这个值上应用Sigmoid激活函数把值压到0-1这个区间内,适用于二分类问题
Softmax:主要是用来解决多分类问题,分类数量大于2的情况
神经网络的训练方式
训练目标:最小化损失函数
如何最小化一个损失函数
神经网络中通常采用梯度下降法,把整个优化步骤拆分成多个步骤,每次缩小损失函数一点,如何调整参数缩小损失函数,通过的方式首先要求损失函数对于模型参数的梯度,梯度代表了参数进行单位大小的改动,然后损失函数变化最快的方法方向,顺着这个方向向前走一步,去应用一个对模型参数的一个小的变化就可以去降低损失函数
计算图的概念
把神经网络的计算方式化成一个图
反向传播算法:沿用和计算图相反的一个方向,顺次计算输出和每一条边的值的梯度,直到最终计算到输入的边
词向量:Word2Vec
Word2Vec使用滑动窗口来构造我们的数据,一个滑动窗口是在一段文本中连续出现了几个单词,然后这样的单词构成一个窗口,在一个窗口里,最中间的词叫做Target(目标词),其他词汇被称作Context
两类模型
Continuous bag-of-words(CBOW):根据context词来预测目标词
Continuous skip-gram:根据目标词来预测context词

问题:
两个模型中都默认对整个词表进行softmax,最后再使用cross entropy loss来进行训练,那么这样就会产生一个问题,实际上vocabulary也就是这个词表大小可能会非常地大,那么这样一来进行全部的softmax之后再进行反向传播和梯度下降计算量就会非常大,需要提高计算效率
如果提高计算效率
1.负采样
负采样就是不把整个词表作为一个softmax,而是只采样一小部分作为负例
如何进行负例采样
Word2Vec按照词的频率来进行采样,词频越高采样几率越大
2.分层softmax
常见神经网络结构(RNN和CNN)
RNN:关键点在于处理序列数据的期间会进行一个顺序记忆
顺序记忆就是一种可能会使我们的大脑更容易识别这些序列模式的数据的一个机制,RNN可以很好的利用这个机制来递归地进行更新我们这个顺序记忆以此来对这些序列数据进行一个很好的建模

应用场景
序列标注:给定一句话要求给出每个词的词性
序列预测:给定一周温度预测一周的天气
图片描述:给一张图片,要求生成对这个图片的一个描述
文本分类:给定一个句子,要求区分这句话的情感是正面还是负面
优点:
可以处理变量的数据
模型大小不会随着输入而增加
参数共享
后面信息计算的时候在理论上会使用到之前的信息
缺点
顺序计算,需要计算前一个单元的学习结果,才能得到后面的结果,时间上可能会比较慢
在实际场景应用中会发现随着时间步的不停地往后进行推移,后面的一些单元进行计算可能就很难获取到之前信息单元的计算
RNN变体
GRU(门控循环单元)
门控机制:对当前输入的信息进行筛选,决定了哪些信息可以传到下一层
GRU有两个门控,分别是更新门和重置门,作用在于权衡过去的信息hi或者hi-1之类的和当前我们输入信息之间的一个比重问题。更新门控制了过去的状态与我们当前激活,它们相比之下可能会有一个多大的关系
LSTM(长短期记忆网络)
LSTM关键在于加了一个新的值cell state用它来学习长期的依赖关系
遗忘门:主要来决定当前上一个状态有哪些信息可以从cell状态中进行移除的

输入门:当前有哪些信息是可以存入到cell状态里面去的

输出门:决定了有哪些信息可以进行输出

LSTM每个隐藏层都是已经有一个内部的神经单元网络已经计算好了,所以尤其是在做堆叠或者往很深的时候性能会较好,而且由于引入了门控的机制,它会对神经网络的输入和输出会进行一个动态控制,会增强我们对信息的利用能力,LSTM可以有效地解决梯度问题
双向RNN
传统RNN特点:每一个时间步下的状态里面的隐藏状态变量都是从过去的序列以及当前输入来捕获信息,或者允许过去的值来影响当前的状态
问题:在许多应用中,在输入预测的时候或者在计算当前的时候不仅是依赖过去还可能会依赖未来的输入,相当于是可能会依赖整个输入序列,而不仅仅是过去

CNN(卷积神经网络)
输入层:对输入的数据进行处理,会形成一个向量矩阵
卷积层:对向量矩阵进行卷积来提取向量
池化层:对特征的进一步提取,一般是对局部的信息选取最大值或者平均值
全连接层:根据任务选取的不同对最终特征下拉进行处理

Transformer and PLMs(Huggingface Transformers)
Transformer
注意力机制
核心思想:通过在decoder的每一步都把encoder端所有的向量提供给decoder模型,这样decoder根据自己当前的状态来自动选择需要使用的信息和向量
用h1到hn表示n个value向量以及一个query向量s,Attention的机制通过s和每一个hi的一个交互可以得到一个注意力分数用e来表示,e的维度其实和value向量的数量是一样的,用这个分数计算softmax就可以得到一个概率分布,通过这个概率分布对前面所有的value向量进行一个加权平均,就得到了attention的一个输出
注意力机制的特点
解决了信息瓶颈的问题
有效缓解了RNN中梯度消失的问题
给神经网络这种黑匣子模型提供一定可解释性
transformer

输入层
Byte Pair Encoding(BPE)
首先会将语料库中出现的所有单词都切分成一个个字母,然后通过统计在语料库中每一个byte gram出现的数量,就可以一步一步把频度最高的Byte gram给抽象成一个词加入词表中,然后就不断地扩充词表,最后直到到达需要的一个词表的一个数量
Positional Encoding(PE)
通过在原有的embedding上加上一个位置向量,然后当不同位置单词具有不同的表示进而让transformer block可以进行一个区分
Transformer Block
整体由两大块组成,分别是Multi-Head Attention的一个网络和Feed-Forward Netword的一个前馈神经网络,本质上其实是一个带激活函数的MLP全连接,通过这个过程完成了文本和不同位置文本之间的一个交互,中间的残差连接和正则化也起到了防止梯度消失的问题

Decoder Block
与encoder端有两个不同的修改
1.最开始并不是一个multi-head的特性,而是加了一个mask
2.中间加了一个encoder端和decoder端的一个attention

预训练语言模型
语言模型
给定前面的词预测下一个词
两种范式
Feature-based:作为一个feature的提取器,在大规模预训练语料上预训练好模型参数之后把它编码的表示作为一个固定的feature来交给下游的做具体任务的模型作为一个预训练好的输入,代表性方法:word2vec
Fine-tuning:对整个模型的参数进行一个更新,代表性:BERT和GPT
GPT
decoder-only,用自回归的方式去训练一个语言模型,用一个12层的transformer的一个decoder来自回归地去预测,在这个无监督的文本语料上去训练一个语言模型,然后在下游任务的时候就可以通过这种方式把整体的文本内容进行编码
BERT
Masked language model:随机Mask15%的词,最后再去预测这个词,相当于做了一个完形填空
Next Sentence Prediction:上下句的预测,它学习到的是句子之间的关系
BERT改进方法
RoBERTa

ELECTRA
BERT存在的问题:在BERT中只有15%的词会得到预测并且也有mask造成的gap问题,GPT这种传统预训练模型中,在这样一种单向的过程当中都会受到有效的监督
解决方法:ELECTRA提出了一个叫做replaced token detection,它会对整个原始的输入随机地做mask,然后用一个比较小的类似BERT的预训练模型去还原这个mask的结果,ELECTRA会对每一个词去做一个二分类,判断它是否发生了替换

GPT-3
Zero-shot:不给任何数据,只给一个整体的任务描述
few-shot:额外地提供一个样例,让模型来完成这样的一个操作
都是以in-context learning的形式来完成的,所谓的in-context learning就是说没有针对下游任务做任何参数的更新,只是在上下文中给了这个任务的描述
T5
把所有NLP任务统一成一个text-to-text的一个形式,输入是一个任务的描述后面拼接上一个任务的内容,T5通过一种基于encoder-decoder的一个架构,也就是sequence-to-sequence的一个方式去生成它的答案
MoE
主要思想:把模型的参数分成一块一块的模块,然后每次模型的输入只会调用其中部分的子模块来参与计算,相当于是每一个子模块我们会认为它是一个expert,然后整体的模型是不同expert它的组合的一个结果
Transformers工具包
Key Technology of Big Models
Prompt Tuning & Delta Tuning(OpenPrompt,OpenDelta)
背景
高效微调大模型,分为两个层面:1.从task和data的角度,例:prompt-learning(给模型加入一些额外的上下文,然后去trigger出来我们想要的一些token,再用这些token进行后续的处理,核心在于给这个输入重新组织给它加入prompt;2.从优化的角度出发,例:Delta Tuning(用小参数的优化来驱动大模型)
Prompt-learning
对于一个输入的instance给它新加一句话也就是prompt,那么这个prompt给它包装成和预训练任务一样的形式,例如预训练任务用了完形填空,那么prompt也用一个完形填空,也让这个模型去预测这个mask位置的token,此时它会预测一个和预训练中一样的东西,就是说在整个词表上的分布,然后根据它在整个词表上的分布只抽取其中我们想要的那些词
额外加的上下文叫template,然后我们把这个标签给映射到标签词的这个过程
Auto-regressive(GPT-1,GPT-2,GPT-3,OPT...)
prompt一般都会把mask词放在最后,可能不一定适用于特别长的文本,适用于超大级别的模型
Masked Language Modeling(BERT,RoBERTa,DeBERTa)
适用于自然语言理解任务,mask的位置在中间,会把前后的上下文都给attention掉
Encoder-Decoder(T5,BART)
通用
Template
考虑任务的特性是什么来让他去构造不同的template
使用一些自动的生成或者搜索的算法去生成这些template,也可以去优化一些伪template让它来表达合适的语义
Verbalizer
把标签映射成标签词的过程
怎么构造
从一个label word开始,然后给它paraphrase,不断地找它同义词去扩充它然后得到一个大的表,当这个表越大,它的容错率越高,但是同时也可能会带来更大的噪音。也可以从一个词开始,使用额外的知识库去扩充它
本质上是决定怎么用模型预测的那个分布,模型根据上下文计算出来的一个分布,然后怎么去用它
learning strategy
传统方法:所有神经网络都是随机初始化的,然后对随机初始化的不断的喂数据通过一个optimize去优化,然后设定一个目标函数,设定一个分类器不断地去优化,直到它的loss下降,在验证集上效果比较好,这样就认为它收敛了
BERT之后:Pre-training-then-fine-tuning,先pre-train之后得到一个特别好的初始化点,神经网络不是随机初始化的,对于不同的任务再去进行不同的微调
T5:用一个统一的范式给text-to-text,也就是文本到文本的统一范式给它组织起来
GPT3:Pre-training,完全不微调,使用prompt和一些in-context让它去做zero-shot和few-shot
Prompt-learning之后
1.首先Pre-training,然后就prompting去组织这个数据,组织数据之后微调所有参数,适用于中小型模型,在few-shot场景表现较好
2.也可以pre-training去add一些ssoft prompt就是一些token,然后把模型给冻结住,只去训练这些soft prompt的embedding
3.和prompted data一起pre-training,然后去做zero-shot的推理
Delta Tuning
模型本身不变或者说绝大部分参数不变,只微调一小部分模型就能让它去驱动这个大模型
Delta Tuning分为三种类别
Addition-based:增量式,本来模型里面不存在的一些参数把它额外地给插进来,然后把这些额外参与的参数训练它,其他模型保持不动
Specification-based:指定式,指定这些模型哪些参数不可训,然后让其他的参数全都保持不动
Reparameterization-based:重参数化式,首先给一个假设,认为它是一个很简单的过程,可以在一个低维的子空间或者用一个很低秩的矩阵来完成
Addition-based
Adapter:其实就是一个线性的映射,一个线性的往下的映射然后加一个非线性的激活函数,然后再让它往上映射一下,其实就是一个最简单的MLP,一个双层神经网络

Specification-based
BitFit:只微调所有的transformer所有的这些bias term
Reparameterization-based
LoRA:它不是把模型的优化认为是低维的,它认为它本质上是低秩的,事实上并不是低秩的,但是我们可以强行的做一个低秩分解
Efficient Training & Model Compression(OpenBMB suite)
BMTrain
为什么需要BMTrain工具包
1.预训练语言模型正在以每年10倍的模型尺寸速度变得越来越大,在越来越大的预训练语言模型中往往表现出更好的下游任务的性能
2.训练这些模型代价越来越昂贵,同时为了支持在成百上千张的计算显卡上去训练模型,这个训练的代码也变得越来越复杂
数据并行
现有一批数据,希望模型去学到这一批数据的知识,假如现有三张显卡,可以把这批数据切分成三份,让每张显卡处理一部分的数据,每张显卡用这一部分数据进行前向传播和反向传播得到各自梯度,为了让模型学到这批数据的所有知识,需要把这些梯度的信息进行一个聚合,也就是一个取平均的操作,那么我们得到的聚合好的参数去更新模型就能学到这三部分数据。具体来说,在数据并行的过程中,有一个参数服务器,里面保存了模型的参数还有完整的一批数据,在前向传播的过程中,参数服务器上的参数会被复制到所有的显卡上,每张显卡都得到了和参数服务器上一样的参数,每张显卡用完整的参数和一部分的数据去进行前向传播和反向传播,就能得到每张显卡上的梯度,最后我们将这个梯度进行聚合,然后将聚合后的梯度传回参数服务器,参数服务器上有了原始的模型参数和聚合好的模型的完整的梯度就可以用优化器对模型的参数进行更新,更新后的参数又会进入下一轮的模型的训练迭代

多张显卡的合作模式
Broadcast(广播算子)
把数据从其中一张显卡上传到其他所有的显卡上

Reduce(规约)
规约有很多种类,可以是求和,取平均,取mean,取max,把各张显卡上的数据进行一个规约,然后把规约得到的结果放到我们其中一张指定的显卡里面

All Reduce
在规约的基础上,我们把规约得到的结果告诉所有的显卡,最后得到的结果里面每张显卡上都会得到一个完全一样的out,相当于两阶段过程,先reduce把规约结果放到一张显卡上,然后再把它广播到所有显卡上

Reduce Acatter
和All Reduce 一样都把规约结果发给所有显卡,不同之处在于Reduce Scatter最后每张显卡上只得到一部分的规约结果

All Gather
跟All Reduce类比,就是收集之后的结果再告诉所有的显卡,收集的意思是说把每张显卡上的结果进行一个拼接,然后再把它广播到所有显卡上,这样所有显卡都是得到这样一个收集得到的结果
模型训练的优化方式
Distributed Data Parallel(分布式数据并行)
舍弃了参数服务器,假如每张显卡各自完成参数的更新,然后保证它们参数更新之后的结果一致。
在初始的时候,每张显卡上都有一个相同的模型参数然后得到了一部分的数据,和数据并行是一样的,它们通过前向传播和反向传播得到各自的梯度信息,现在要对梯度的信息进行一个规约,规约之后为了让每张显卡都得到相同的梯度信息,使用All的规约,就会把规约之后的结果告诉所有的显卡,通过这样的操作之后,每张显卡上都能得到完整的规约之后的梯度,每张显卡都有一样的参数一样的梯度,那就可以分别进行模型的优化器更新

Model Parallel
基本思路:同一批输入数据,对线性层这样的参数进行划分,每张显卡上得到这个矩阵的一小部分,通过矩阵的一小部分和数据能够进行一个模型的运算,运算之后得到很多子结果,子结果之后进行一个拼接,把各张显卡上的结果进行一个拼接然后告诉所有显卡

Zero Redundancy Optimizer
基于数据并行建立起的一套框架,每张显卡上只获得一部分的梯度,然后只更新一部分的参数,那么每张显卡可以合作,每张显卡只更新一部分的数据,最后它们进行一个交流,就能把模型的完整梯度给恢复出来
Zero-Stage 1
仍然每张显卡上保存完整的模型参数,然后有一部分数据通过前向传播和反向传播得到各自的梯度,使用Reduce Scatter让每张显卡得到一部分reduce的结果,每张显卡只更新自己那一部分参数,然后每张显卡各更新得到了一部分的模型参数之后,需要通过一个收集的操作然后通过All把它告诉所有的显卡,经过这种操作之后每张显卡又得到了完全一样的参数和一致的结果
Zero-Stage 2
在Zero第一阶段中,需要在反向传播得到所有的梯度之后,对这个梯度进行Reduce Scatter,Reduce Scatter之后每张显卡上各得到了一部分规约后的梯度
Zero-Stage 3
对模型的参数进行进一步的划分,参数更新只更新一部分的模型的参数,实际上每张显卡就可以只保存它自己参数更新所负责的那一部分参数,那么每张显卡上就只有一部分参数和一部分数据,一部分梯度和一部分优化器,在前向传播和反向传播过程中,需要把参数进行一个all Gather操作,在用到模型参数的时候,临时的把每张显卡上的那一部分参数进行一个收集拼接,每当用完之后就把这个参数从显卡中释放

Pipeline Parallel(流水线并行)
与模型并行方法类似,模型并行方法在线性层上把矩阵分成部分,然后每个部分在不同显卡上计算,流水线并行是模型的不同的层分给不同的显卡,加入有一个三层的transformer,可以把transformer的第一层分到第一张显卡,第二层分到第二张显卡,第三层分到第三张显卡,在模型前向传播过程中,需要在第一张显卡上完成第一层的模型计算,然后把计算结果告诉第二张显卡,第二张显卡拿到第一张显卡的输出去进行这一层的计算,然后再把计算结果传给下一张显卡。弊端:0号显卡在运行的时候,1号和2号显卡处于空闲状态,存在计算资源的浪费

优化技术
1.混合精度训练
缺点:在参数更新的时候,参数更新的量约等于梯度乘上学习率,假如梯度乘上一个非常小的学习率低于FP16的表示范围,那么肯定还是不能把这个更高精度的参数更新去加到更低精度的模型上,实际上会产生浮点的下溢,所以需要在优化器上额外保存一个单精度的参数。在混合精度训练中,为了加速模型的前向传播和后向传播,在模型中会使用半精度的参数和半精度的梯度,通过半精度的梯度传到优化器里进行优化器的更新

2.Offloading
先把模型的参数的梯度从显卡中传给CPU,然后在CPU上进行优化器的优化,将优化的结果重新传给显卡
3.Overlapping(通信计算的重叠)
在GPU中,memory的操作一般是异步的,可以通过提前给memory发送一个请求然后去进行其他的计算,其他计算完了之后对memory的请求进行一个接收。
在模型前向传播的过程中,把Layer1通过gather操作进行一个获得,然后再对Layer2的参数进行一个优化,在获得完第一层的参数之后,在第一次层forward的计算当中提起把Layer2这一层的参数的获得进行一个异步的提前,在Layer1的前向传播计算完成之后,Layer2的参数也已经获得并放置在显卡当中了,就可以立刻进行Layer2的前向传播的计算,在Layer2的前向传播计算过程总,又可以提前把Layer3的参数进行收集

4.Checkpointing
每一个transformer block会有一个模型的输入,输入之后会经过attention,然后feed forward等复杂的计算得到这一层的总的一个输出,只保留transformer每一个大层的输入作为检查点,那么在反向传播的过程中可以通过重计算对大层里面的梯度进行计算。重计算就是说对transformer每个大层的输入然后在反向传播的过程中对它进行了一个前向的传播,临时的得到每一个大层里面所有线性层的输入,那么得到的中间结果就可以进行反向传播,反向传播过了这一层之后就可以把检查点以及临时重计算的这些模型层里面的线性层的中间结果从显存中扔掉

模型压缩的技术
目的:希望把大模型压缩成一个更小规模,更紧实的一个模型,然后同时这个小的模型能够基本上继承这个大模型当中的一些能力,同时能够在这种现实的产品中把它用起来
典型方法:1.知识蒸馏 2.模型剪枝 3.模型量化 4.模型专家化
知识蒸馏
把好多模型它的一个集成的一个结果都给迁移到一个小的单个模型,这样就能完成一个比较高效的计算。此时抽象出“蒸馏”的概念,就是说它把里面可能最有用的也就是最重要的东西提取出来,放到一个小模型中
模型剪枝
就是把参数矩阵当中比较冗余的部分去除,然后这个去除的依据就是它能够去计算一些重要性的指标,这个重要性指标最直观的就是去看这个元素的绝对值的大小,如果它特别接近于0的话可能就是不重要的一个部分
降低模型精度来提升运算的效率:FP64->FP32->FP16
Big-Model-based Text understanding and generation
自然语言处理应用大概分为两类:
NLU(Natural Language Understanding):给出一段文字,希望机器能够很好的理解所蕴含的各种含义
NLG(Natural Language Generation):机器像人一样去生成各种各样的文字

信息检索:给定一个query,需要机器去找到相关的文章
机器问答:问机器一些问题,希望它能提供想要的答案,大模型允许机器回答更复杂的问题
文本生成:机器翻译,诗歌生成,对话系统
Neural IR
使用深度神经网络将用户的查询与文档库中的文档投射到同一个向量空间,再去预测两者间相关性的分数,从而避免传统IR词汇失配和语义失配的问题

QA
由机器代替人类从这些检索到文档或者说整个的知识库这种互联网大的语料库中去进行检索以及推理的过程,然后把最终结果返回
阅读理解QA
定义:给定一篇文章会有一些对应的题目,而题目的答案都隐藏在文章中,需要去阅读这篇文章理解它的内在含义从而去回答相关的问题
抽取式阅读理解:答案就在文章中,要机器去预测这个问题的答案其实是在文章中的哪个词

大模型之前的框架

大模型之后的框架
只需要一个大模型就能把前三层替代,直接把文章和问题一起输入到这个大模型中,然后就能够让他们充分地交互,最后输出交互后地表示向量,最后输出一个结果
大模型除了简化pipeline之外还有一个好处就是可以统一不同问答系统的形式

开放域QA
生成式方法:用大模型内所存储的知识直接去回答问题,大模型在预训练的时候会有一些隐式存储
检索式方法:两部分组成:Document Retriever :信息检索模块,根据给出的问题需要找出相关的文章 Document Reader:与阅读理解相关,从文章中找出对应的答案
文本生成
定义:把一些非语言性的表示的信息通过模型以一种人类可以理解的人类语言表示出来,非语言式其实是一种data的范围,它可以包括图片,表格等,统一把这种生成叫做data-to-text生成。实际上,除了data-to-text生成,在广义上的文本生成范围中还包括一种text-to-text的生成,也就是说输入是人类可读文本,输出也是人类可读文本
神经网络文本生成
Language Modeling(语言建模):在语言建模的过程中,需要通过给定的词语,比如说目前已经预测过的词语去预测接下来的词语,在计算当前第t个词的时候需要基于已经生成的从第1个到第t-1个词语的概率,把计算这种概率的模型就叫做Language Modeling
语言建模分为两种,一种有条件的建模,一种无条件的建模。在有条件的语言建模的情景中,在生成当前词的时候不仅要基于已经生成的词,而且还要考虑到给定的其他输入
有条件建模模型:Seq2seq模型,前一个sequence是指Encoder,后一个sequence是指Decoder,由于Seq2seq 模型会将input和output建模在一起,以一种Encoder和Decoder的形式,所以很容易通过单个的神经网络进行建模,也是很容易以一种end-to-end的方法进行训练
Seq2seq在训练的时候是以一种teacher forcing(就是在预测下一个词的时候并不是基于之前预测到的词语,而是基于一些已经给定事实的词语,在测试的时候会根据当前已经生成的词语来进行下一个token的预测)的方式进行训练的
T5模型:将所有的NLP任务都统一的用一种text-to-text的形式来表示,它的input和output总是一些字符串,不管它做的任务的输入输出是否为字符串
语言模型的两大分类
- Autoregressive Generation即自回归的生成:在生成当前值的时候会从过去的值中获取一些参考。典型:GPT系列模型
-
- GPT1:把transformer的Decoder结构单独拿出来,因为里面是Autoregressive,当前在attention的部分,即当前的token只能看到之前的token而看不到之后的token。GPT1认为可以通过generation pre-training来提升language即语言理解的能力
- GPT2:把语言模型认为是一种无监督的多任务学习者
- GPT3:认为语言模型是一些few-shot learners,它可以通过少量样例学习到很多知识
- Non-Autoregressive Generation:给定一个source和target的情况下,Encoder会对source进行编码,但是在Decoder端生成的过程中,每一个Decoder之间是没有时序关系的,可以直接通过Encoder的信息一次性parallel的平行,将所有的token都生成
文本生成解码策略
- Greedy Decoding:贪婪式Decoding,在生成的每一步中,都会去选择对应计算得到概率最大的一个token来作为生成的对象
- Beam Search Decoding:在Decoding的每一步都不去只保留一个argmax之后的token,而是说会去追踪去记录k个最好的,最有可能的局部序列,那么当生成了一些token的时候会在当前的保持记录的k个里面去选择最好的一个,虽然这是一个局部的,最有可能的向量,但它并不是一个全局的最优序列
- Sampling-based Decoding
-
- Pure sampling:简单的sampling方法,在每一步的时间t不会直接地选择概率最大的一个token,而是说按照模型计算出的词的概率分布,对于概率比较大的词,会以较大的概率去选它,对于概率比较小的词,会以较小的概率选它,我们会随机地从词表中选择一个token,这样的话模型生成的多样性会增加,但是也可能会出现概率比较小的词,这些词其实是与模型的输入无关的
- Top-n sampling:在采样的过程中不会在整个词表上进行采样,而是仅仅会局限于在n个最有概率的词上面进行采样
- Nucleus sampling(Top-p sampling):对采样范围的限制方法,与top-n不同的是限制采样是在若干个token上进行的,概率最大的token且概率加起来要大于某个阈值
受控文本生成
- prompt方法对文本生成进行控制:
-
- 在文本前面加入一些控制信号
- 在模型前面加prefix
- 修改概率分布的方法来实现可控生成
- 直接修改模型结构:直接给控制信号额外增加了一系列的transformer结构,也就是说这一列的transformer只负责去编码控制信号,它在常规的对source的文本进行cross-attention之前它会首先和guidance signal这一排的transformer进行cross-attention,那么它就先预知了我们对这个控制信号有什么样的需求,在之后的生成中也就会基于这个指导信号进行生成

文本生成测评
通用metrics
- BLEU(Bilingual evaluation understudy):生成的文本它的n-gram有多少与token的text是类似的
- PPL(perplexity):验证模型有多大的概率能生成这个sample,越低越好的指标
- ROUGE(Recall-Oriented Understudy for Gisting Evaluation):它是一个基于Recall-Oriented来计算的方法,可以解决模型可能会有一些low recall rate的问题
- NIST(BLEU的改进):考虑到n-gram会有不同的加权
- METEOR(BLEU的改进):会考虑到不同词根的词,而不是仅仅考虑完全相同的元词 ,它会生成与人类测评更加相近的结果
其他metrics
- 基于距离Metrics:测量文本的余弦相似度或者是embedding的距离
- 多样性Metrics:测量文本生成的多样性
- 任务相关的Metrics:比如说在文本生成图像这样的任务中会引入专用的测量
- 人类测量:
Interdisciplinary Application of Big Models
Big Models & Biomedical Science
生物医学文本挖掘的任务
生物医学文本挖掘就是要从非结构化的生医文本中挖掘出有用的,结构化的信息,根据想要挖掘信息的类型不同,可以将这些任务归为不同的类别
- 第一类是对实体相关信息的挖掘,实体就是Entities,在生物医学领域,这个Entities它一般指的就是生物体、化学物质、疾病、基因、蛋白质、生化反应这些名词,它们在文中所对应的表述就称为提及,也就是mention;
- 第二类是主题识别,这个任务通常会采用一些有监督的方法来完成,比如说可以通过像BERT这样的预训练语言模型对文章进行编码后再通过分类器对它的类别进行一个预测。另一个常见的生医文献的分类任务被称为literature indexing,它需要做的就是给每一篇文献标记知识库中的一些术语或者说实体,然而这些术语或者实体就表示这篇文章它讨论的核心对象,这其实可以被视为一个多标签的分类任务,可以通过术语匹配模型或者说命名实体识别和链接的一些方法去进行处理,然后文本挖掘中比较常用的一些传统的主题模型,比如说LDA模型同样也可以无监督地对文章隐含的语义结构去进行聚类,从而识别出文献讨论的一些关键词,做完indexing之后,就可以很方便地对这些文献进行一个归类整理
- 第三类是关系抽取,需要的是依赖文本中的线索或者是背景知识,在命名实体识别任务的基础上抽取出这些实体的关系
- 第四类是Pathway,就是一些引发细胞内物质生成或者是变化的一系列生化反应和相互作用,它通常特指发生在基因或者是基因产物,还有一些小分子比如说代谢物之间的相互作用
生医文本挖掘通常会以如下pipeline的形式展开
首先做命名实体识别,然后识别出这个文本中哪些地方是实体,然后再把这些实体的mention去链接到知识库,最后做一个关系抽取
生物医学:特定物质表征过程
NLP系统处理自然语言是因为自然语言文本它是一些线性的linear text,它可以用符号把它tokenize成一些特定的离散的一些输入,只需要把这些biomedical substances也能表征成类似的线性文本的形式就可以了
Big Models & Legal Intelligence
法律智能
Big Models & Brain and Cognitive Science
更多推荐


所有评论(0)