【学习笔记】语言模型的发展历程
语言模型的发展大致经历了以下四个阶段
统计语言模型(SLM)
主要建立在统计学习的理论框架下,尝试解决的是如下问题
p
(
x
t
∣
x
1
,
x
2
,
…
x
t
−
1
)
(1)
p(x_{t}|x_{1},x_{2},\dots x_{t-1})\tag{1}
p(xt∣x1,x2,…xt−1)(1)
根据之前的历史信息预测接下来的token
因为保留过去所有信息用于预测可能过于困难,有时候会只保留前
τ
\tau
τ个历史信息,此时表示为
p
(
x
t
∣
x
t
−
τ
,
…
x
t
−
1
)
(2)
p(x_{t}|x_{t-\tau},\dots x_{t-1})\tag{2}
p(xt∣xt−τ,…xt−1)(2)
那么想要计算这个,我们需要首先对句子的概率进行建模,这有多种方式
P
(
x
1
,
x
2
,
x
3
,
x
4
)
=
P
(
x
1
)
P
(
x
2
)
P
(
x
3
)
P
(
x
4
)
P
(
x
1
,
x
2
,
x
3
,
x
4
)
=
P
(
x
1
)
P
(
x
2
∣
x
1
)
P
(
x
3
∣
x
2
)
P
(
x
4
∣
x
3
)
P
(
x
1
,
x
2
,
x
3
,
x
4
)
=
P
(
x
1
)
P
(
x
2
∣
x
1
)
P
(
x
3
∣
x
1
,
x
2
)
P
(
x
4
∣
x
1
,
x
2
,
x
3
)
(3)
P(x_{1},x_{2},x_{3},x_{4}) = P(x_{1})P(x_{2})P(x_{3})P(x_{4})\\ P(x_{1},x_{2},x_{3},x_{4}) = P(x_{1})P(x_{2}|x_{1})P(x_{3}|x_{2})P(x_{4}|x_{3})\\ P(x_{1},x_{2},x_{3},x_{4}) = P(x_{1})P(x_{2}|x_{1})P(x_{3}|x_{1},x_{2})P(x_{4}|x_{1},x_{2},x_{3})\tag{3}
P(x1,x2,x3,x4)=P(x1)P(x2)P(x3)P(x4)P(x1,x2,x3,x4)=P(x1)P(x2∣x1)P(x3∣x2)P(x4∣x3)P(x1,x2,x3,x4)=P(x1)P(x2∣x1)P(x3∣x1,x2)P(x4∣x1,x2,x3)(3)
不难注意到每一个token的依赖序列是不同的,这可以记为阶数,k阶依赖称为
k
+
1
k+1
k+1阶语法
对于语法中不同的条件概率的概率的计算,可以通过贝叶斯公式来实现,即
P
(
x
∣
x
′
)
=
P
(
x
′
,
x
)
P
(
x
′
)
=
n
(
x
′
,
x
)
n
(
x
′
)
(4)
P(x|x') = \frac{P(x',x)}{P(x')} = \frac{n(x',x)}{n(x')}\tag{4}
P(x∣x′)=P(x′)P(x′,x)=n(x′)n(x′,x)(4)
其中
n
(
x
)
n(x)
n(x)表示
x
x
x的出现次数。但是这种计算方式对于稀疏数据是存在问题的,如下所示
平滑
只需要对
(
4
)
(4)
(4)式添加极小项即可,变为
P
(
x
∣
x
′
)
=
n
(
x
′
,
x
)
+
1
n
(
x
′
)
+
V
(5)
P(x|x') = \frac{n(x',x)+1}{n(x')+V}\tag{5}
P(x∣x′)=n(x′)+Vn(x′,x)+1(5)
其中
V
V
V是词典大小。这样操作依然可以保持概率分布的相关性质
回退
分母词组可能出现次数过少,可以将其退化
P
(
x
i
∣
x
i
−
1
,
x
i
−
2
)
→
P
(
x
i
∣
x
i
−
1
)
(6)
P(x_{i}|x_{i-1},x_{i-2})\rightarrow P(x_{i}|x_{i-1})\tag{6}
P(xi∣xi−1,xi−2)→P(xi∣xi−1)(6)
总结
总之,可以通过序列建模加上极大似然优化来实现一定的next token预测的任务,但是因为历史信息长度被限制为 τ \tau τ,无法实现长距离依赖,以及参数量有限,表达能力有限,后面提出了更好的模型
神经语言模型(NLM)
使用神经网络来进行序列生成
对于之前使用的问题定义
p
(
x
t
∣
x
1
,
x
2
,
…
x
t
−
1
)
(7)
p(x_{t}|x_{1},x_{2},\dots x_{t-1})\tag{7}
p(xt∣x1,x2,…xt−1)(7)
其实也有另外一种表示手段
p
(
x
t
∣
w
t
−
1
)
,
w
r
t
.
w
t
−
1
=
f
(
x
1
,
x
2
,
…
x
t
−
1
)
(8)
p(x_{t}|w_{t-1}), wrt.\ w_{t-1} = f(x_{1},x_{2},\dots x_{t-1})\tag{8}
p(xt∣wt−1),wrt. wt−1=f(x1,x2,…xt−1)(8)
相当于通过一个中间变量将之前信息统一寄存了,这样的好处是避免了对之前每一个时刻的信息显式建模,这同时也在一定程度上解决了数据稀疏的问题:哪怕文本没有实际出现过,它在这里依然有可能出现,而只要它出现过,影响就会反映在参数的改变上。
并且这里开始使用向量形式来表示单词,相比原本添加了更多参数,提高了表达能力。
这里的模型有RNN,GRU,LSTM,word2vec等等。
预训练模型(PLM)
与早期的词嵌入模型相 比,预训练语言模型在训练架构与训练数据两个方面进行了改进与创新
典型模型有GPT-1,BERT,ELMo等,主要确立了预训练-微调
的训练步骤。预训练阶段旨在通过大规模无标注文本建立模型的基础能力,而微调阶段则使用有标注数据对于模型进行特定任务的适配,从而
更好地解决下游的自然语言处理任务
其中GPT系列作为自回归语言模型,只使用了Decoder架构
其Loss设计依然为
m
i
n
θ
log
(
P
θ
(
X
)
)
=
−
l
o
g
∏
t
=
1
T
p
θ
(
x
t
∣
X
<
t
)
(9)
min_{\theta}\log(P_{\theta}(X)) = -log \prod_{t=1}^{T}p_{\theta}(x_{t}|X_{<t})\tag{9}
minθlog(Pθ(X))=−logt=1∏Tpθ(xt∣X<t)(9)
BERT等自编码模型,则是只采用了Encoder架构
其Loss设计为
m
i
n
θ
log
(
P
θ
(
X
∣
X
^
)
)
≈
−
l
o
g
∏
t
=
1
T
m
t
p
θ
(
x
t
∣
X
^
)
w
r
t
.
m
t
=
{
1
当前位置被遮掩
0
当前位置未被遮掩
(10)
min_{\theta}\log(P_{\theta}(X|\hat{X})) \approx -log \prod_{t=1}^{T}m_{t}p_{\theta}(x_{t}|\hat{X})\tag{10}\\ wrt. m_{t} = \left\{\begin{matrix} 1& \text{当前位置被遮掩}\\ 0& \text{当前位置未被遮掩} \end{matrix}\right.
minθlog(Pθ(X∣X^))≈−logt=1∏Tmtpθ(xt∣X^)wrt.mt={10当前位置被遮掩当前位置未被遮掩(10)
一般来说,Encoder架构被认为更适合去解决自然语 言理解任务(如完形填空等),而Decoder架构更适合解决自然语言生成任务(如文 本摘要等)
大语言模型(LLM)
相比之前的模型,llm在模型参数量,训练数据量上面都有了很大的跨越,并且需要更加精细的训练手段来实现更好的性能与泛化性,这是由scaling law指导的。
最终在任务求解上能力有了显著提升,能够不再依靠下游任务数据的微调进行通用任务的求解