xlnet中为了看到上下文信息,引入了PLM(排列组合的语言模型),即原始的x1,x2, x3, x4序列,通过排列组合可以分解出16种方式,可以认为预料变为了:
x1,x3, x2,x4
x1,x3, x4,x2 等16种
按标准的softmax的话,
那么对于除了x1和x3之外的一个比如:词x4在2和4的位置上的概率是相等的,显然这是不符合实际情况的。
假设输入的句子是”I like New York”,并且一种排列为z=[1, 3, 4, 2],假设我们需要预测z3=4,那么根据公式:
注意,我们通常用大写的X表示随机变量,比如X4,而小写的x表示某一个具体取值,比如x,我们假设x是”York”,则pθ(X4=x)表示第4个词是York的概率。用自然语言描述:上面的概率是第一个词是I,第3个词是New的条件下第4个词是York的概率。
另外我们再假设一种排列为z’=[1,3,2,4],我们需要预测z3=2,那么:
则上面是表示是第一个词是I,第3个词是New的条件下第2个词是York的概率。我们仔细对比一下公式会发现这两个概率是相等的。但是根据经验,显然这两个概率是不同的,而且上面的那个概率大一些,因为York跟在New之后是一个城市,而”York New”是什么呢?
上面的问题的关键是模型并不知道要预测的那个词在原始序列中的位置。了解Transformer的读者可能会问:输入的位置编码在哪里呢?位置编码的信息不能起作用吗?注意:位置编码是和输入的Embedding加到一起作为输入的,因此pθ(X4=x|x1x3)里的x1和x3是带了位置信息的,模型(可能)知道(根据输入的向量猜测)I是第一个词,而New是第三个词,但是第四个词的向量显然这个是还不知道(知道了还要就不用预测了),因此就不可能知道它要预测的词到底是哪个位置的词,因此我们必须”显式”的告诉模型我要预测哪个位置的词。
为了后面的描述,我们再把上面的两个公式写出更加一般的形式。给定排列z,我们需要计算,如果我们使用普通的Transformer,那么计算公式为:
根据前面的讨论,我们知道问题的关键是模型并不知道要预测的到底是哪个位置的词,为了解决这个问题,我们把预测的位置ztzt放到模型里:
上式中表示这是一个新的模型g,并且它的参数除了之前的词,还有要预测的词的位置。