Language Model
Language model估计不同语言的概率:符号、标记、 标记序列
具体来说,我们希望根据我们的语言模型,"更有可能"出现在语言中的句子具有更大的概率。
可以根据链式法则进行计算句子的概率
P ( y 1 , y 2 , … , y n ) = P ( y 1 ) ⋅ P ( y 2 ∣ y 1 ) ⋅ P ( y 3 ∣ y 1 , y 2 ) ⋅ ⋅ P ( y n ∣ y 1 , … , y n − 1 ) P(y_1,y_2,…,y_n)=P(y_1)⋅P(y_2|y_1)⋅P(y_3|y_1,y_2)⋅⋅P(y_n|y_1,…,y_{n−1}) P(y1,y2,…,yn)=P(y1)⋅P(y2∣y1)⋅P(y3∣y1,y2)⋅⋅P(yn∣y1,…,yn−1)
在给定先前的上下文中预测下一个词的概率分布
N-gram模型
从左到右,每一个词只与前面 n − 1 n-1 n−1个词相关
马尔可夫假设
一个单词的概率仅取决于固定数量的前一个单词。
一般采用二元或者三元
为了避免某一个情况没有出现过,分母为0的情况
采用线性插值
λ0,λ1,…,λn−1使得 ∑ i λ i = 1 ∑ \limits_{i}λ_i=1 i∑λi=1.则更新的概率为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ibuwgRWb-1646573044024)(https://lena-voita.github.io/resources/lectures/lang_models/ngram/interpolation-min.png)]
避免分子中输入为0
采用拉普拉斯平滑,所有的计数项前面加上 δ \delta δ
P ( m a t ∣ c a r o n a ) = δ + N ( c a t o n a m a t ) δ ∣ V ∣ + N ( c a t o n a ) P(mat|car \ on \ a) = \frac{\delta + N(cat \ on \ a \ mat)}{\delta |V|+N(cat \ on \ a)} P(mat∣car on a)=δ∣V∣+N(cat on a)δ+N(cat on a mat)
无法使用长上下文是n-gram模型的主要缺点。
神经网络
- 处理上下文。对上下文进行编码,可以预测下一个词的概率分布
- 生成下一个词的概率分布
模型解释
- 将以前(上下文)单词的单词嵌入到网络中;
- 从网络获取上下文的矢量表示;
- 从此向量表示中,预测下一个词的概率分布。
文本的矢量表示具有一定的维度d,但最终,我们需要一个大小的向量|V|(概率|V|词/类)。要获取|V|-大小矢量从d-大小,我们可以使用线性层。一旦我们有了|V|-大小向量,剩下的就是应用 softmax 运算将原始数字转换为类概率。
运用交叉熵作为损失
rnn
简单rnn:单层
多层rnn:将状态从一个rnn馈送到下一个rnn
生成策略
以不同的方式修改模型预测的分布,以生成具有某些属性的文本。虽然特定的所需文本属性可能取决于您关心的任务(一如既往),但通常您希望生成的文本是:
- 连贯 - 生成的文本必须有意义;
- 多样化 - 模型必须能够产生非常不同的样品。
top-K抽样
只选择前k大的令牌进行采样
- 覆盖总概率质量的很小一部分(在平面分布中);
- 包含非常不可能的token(在峰值分布中)。
不同的样品。
top-K抽样
只选择前k大的令牌进行采样
- 覆盖总概率质量的很小一部分(在平面分布中);
- 包含非常不可能的token(在峰值分布中)。