来源:https://www.bilibili.com/video/BV1Bb4y1L7FT?p=4&vd_source=f66cebc7ed6819c67fca9b4fa3785d39
transformer就是一个seq2seq的model。
Input一个sequence,output的长度由机器自己决定。
输入一排向量,输出同样长度的另一排向量。
每一个Block做的事情是好几个layer做的事情。
每个block做的事(简化版):
完整版:
位置的资讯
Bert里会用到同样的架构:
decoder看到的输入是前一个阶段自己的输出。
那么这样会不会导致error propagation(一步错步步错)?
不会。
exposure bias:test时decoder可能会看到错误的输入,而train时decoder看到的是完全正确的,即它在训练时完全没有看过错误的东西。
解决方法:scheduled sampling:训练时给decoder的输入加一些错误的东西。
为什么要masked?
因为在encoder里面,input是同时输进去的;而decoder里面,input是一个一个输进去的。
加上一个Stop Token
除了所有的中文字、< begin >之外,还需要准备一个< end >,不过通常< begin >和< end >会用同一个符号,因为他们分别只会在开头和结尾出现。
k、v、q如何得出:self-attention|李宏毅机器学习21年
各式各样的连接方式都可以:
前面的部分都是,假设model训练好以后,它是怎么做inference的。
训练资料:输入-输出对
Teacher Forcing:在decoder训练的时候输入的是正确答案
交叉熵(Cross Entropy)是衡量两个概率分布之间差异的一种度量方式,在机器学习中常用作分类问题的损失函数。假设我们有两个概率分布的向量,一个是真实的概率分布 P P P,一个是预测的概率分布 Q Q Q,那么交叉熵可以表示为:
H ( P , Q ) = ? ∑ i P ( i ) log ? Q ( i ) H(P, Q) = -\sum_{i} P(i) \log Q(i) H(P,Q)=?i∑?P(i)logQ(i)
举例:
训练时是min cross entropy(字与字之间),测试时是max BLEU score(句子与句子之间),这两个指标可以等价吗?
不见得。
训练的时候都是一个字一个字出来的,怎么在训练的时候就用BLEU score:
遇到无法optimize的loss fuction,用RL硬train一发就可以。
把fuction当做是RL的reward,把decoder当做agent。(比较难)
BLEU(Bilingual Evaluation Understudy)分数是一种常用于评估机器翻译质量的指标,它通过比较机器翻译的文本和一个或多个参考翻译来计算分数。BLEU分数考虑了准确性(通过n-gram匹配)和流畅性(通过句子长度的惩罚)。
BLEU分数的计算包括以下几个步骤:
n-gram精确度:对于每个n-gram(n可以是1, 2, 3, …),计算机器翻译中n-gram出现的次数,并与参考翻译中的n-gram出现次数进行比较。对于每个n-gram,计算其精确度(precision)。
修剪(Clipping):如果机器翻译中的n-gram出现次数超过参考翻译中的最大出现次数,将其修剪至该最大值。
加权平均:对于不同的n-gram精确度,计算它们的几何平均值,并对结果取自然对数。
句子长度惩罚(Brevity Penalty, BP):如果机器翻译的长度小于参考翻译的长度,将施加一个惩罚以避免过短的翻译。
计算公式:
BLEU = BP ? exp ? ( ∑ n = 1 N w n log ? p n ) \text{BLEU} = \text{BP} \cdot \exp\left(\sum_{n=1}^{N} w_n \log p_n\right) BLEU=BP?exp(n=1∑N?wn?logpn?)
其中:
BP = { 1 如果机器翻译的长度 > 参考翻译的长度 exp ? ( 1 ? 参考翻译的长度 机器翻译的长度 ) 其他情况 \text{BP} = \begin{cases} 1 & \text{如果机器翻译的长度} > \text{参考翻译的长度} \\ \exp\left(1 - \frac{\text{参考翻译的长度}}{\text{机器翻译的长度}}\right) & \text{其他情况} \end{cases} BP={1exp(1?机器翻译的长度参考翻译的长度?)?如果机器翻译的长度>参考翻译的长度其他情况?
举例:
本例中机器翻译(MT)与参考翻译(Ref)不完全匹配,并且将计算最多包括2-gram的BLEU分数。
假设机器翻译(MT)为:“the black cat sat on the mat”,参考翻译(Ref)为:“the cat sat on the mat”。我们计算1-gram和2-gram的BLEU分数(即N=2)。
对于1-gram:
对于2-gram:
长度惩罚(BP):
加权平均:
现在我们可以计算BLEU分数:
BLEU = BP ? exp ? ( 0.5 ? log ? 6 7 + 0.5 ? log ? 3 6 ) \text{BLEU} = \text{BP} \cdot \exp\left(0.5 \cdot \log \frac{6}{7} + 0.5 \cdot \log \frac{3}{6}\right) BLEU=BP?exp(0.5?log76?+0.5?log63?)
计算具体数值:
BLEU
=
1
?
exp
?
(
0.5
?
log
?
6
7
+
0.5
?
log
?
1
2
)
\text{BLEU} = 1 \cdot \exp\left(0.5 \cdot \log \frac{6}{7} + 0.5 \cdot \log \frac{1}{2}\right)
BLEU=1?exp(0.5?log76?+0.5?log21?)
BLEU
≈
exp
?
(
?
0.42365
)
≈
0.65468
\text{BLEU} \approx \exp\left(-0.42365\right) \approx 0.65468
BLEU≈exp(?0.42365)≈0.65468
因此,BLEU分数大约为0.65468。这个分数反映了机器翻译与参考翻译在1-gram和2-gram层面上的部分匹配程度。在实际应用中,BLEU分数通常会乘以100,因此这个分数可能会表示为65.468。
常用于语音合成领域,因为可以:输出长度 * 2 -> 语速 * 2