bert 模型如何体现“双向”?

gev0vcfq  于 2个月前  发布在  其他
关注(0)|答案(9)|浏览(47)

BERT是"Transformer中的双向编码表示",那么Transformer是如何体现"双向"的,为什么GPT不是呢?

laawzig2

laawzig21#

这里有一些解释:#83

y1aodyip

y1aodyip2#

你可以在论文https://arxiv.org/abs/1810.04805中找到描述:
"我们注意到,在文献中,双向Transformer通常被称为“Transformer编码器”,而仅左上下文版本则被称为“Transformer解码器”,因为它可以用于文本生成。"
因此,BERT Transformer是具有双向自注意力的“Transformer编码器”,其中每个令牌都可以关注其左侧和右侧的上下文。而GPT Transformer是具有受限自注意力的“Transformer解码器”,其中每个令牌只能关注其左侧的上下文。

0qx6xfy6

0qx6xfy63#

Transformer中的自注意力机制通过将查询t与每个位置的键相乘等方式计算位置t处的加权值向量。我认为它关注左右两边的词。为什么BERT作者说它是单向的?
尽管BERT论文声称自己是双向的,但这个任务是由哪一部分完成的,以及在自注意力中如何实现双向性?

kuhbmx9i

kuhbmx9i4#

是的,自注意力层关注其左侧和右侧的所有单词以及自身。这是使网络具有双向性的部分。

yvfmudvl

yvfmudvl5#

如果所有的标记都能查看左、右上下文和自身,为什么[CLS]标记承载了句子表示?
它是如何学习这种表示的,关于内部工作原理的一些见解?
提前感谢

ia2d9nvy

ia2d9nvy6#

@chikubee [CLS]标记将被添加到每个输入句子的开头。因此,在第一层,[CLS]的表示取决于[CLS]标记本身以及其右侧的所有其他标记。这种模式重复直到达到最后一个Transformer层。我希望你能明白,由于它所依赖的标记表示是左右查看句子,所以[CLS]标记有多次机会查看输入句子的左右两侧。这意味着在最后一层的[CLS]标记表示可以被认为是输入句子的丰富表示。

在句子分类任务中,[CLS]标记承载着句子表示,因为这是经过微调以适应当前任务的标记。我们不选择任何其他标记作为句子表示,因为相同的标记在其位置不同时具有不同的表示。例如,“the cat in the hat”中的“the”和“I like the cat”中的“the”表示是不同的。我们也不选择第n个标记作为表示,因为它无法处理输入句子长度小于n的情况。

为了简化我们的工作,让我们只需在每个输入句子的开头添加一个虚拟标记(我们将其称为[CLS])。这样,我们可以确保总是有一个标记,其表示仅仅是输入句子中其他标记的函数,而不是其位置。

我希望这能澄清问题。如果你还有进一步的问题,请告诉我。

toiithl6

toiithl67#

@chikubee 在每个输入句子前都会添加[CLS]标记。因此,在第一层,[CLS]的表示是[CLS]标记本身以及其右侧所有其他标记的函数。这个模式会一直重复,直到达到最后一个Transformer层。我希望你能明白,由于它所依赖的标记表示取决于它左右两侧的句子,所以[CLS]标记有多次机会查看输入句子的左右两侧。这意味着在最后一层的[CLS]标记表示可以被认为是输入句子的一个丰富表示。

[CLS]标记在句子分类任务中承载着句子表示,因为这是经过微调以适应当前任务的标记。我们不会选择任何其他标记作为句子表示,因为相同的标记在其位置不同时具有不同的表示。例如,“the cat in the hat”中的“the”和“I like the cat”中的“the”表示是不同的。我们也不会选择第n个标记作为表示,因为这样无法处理输入句子长度小于n的情况。

为了方便我们,让我们在每个输入句子后面添加一个虚拟标记(我们将其称为[CLS])。这样,我们可以确保总是有一个标记的表示仅仅是输入句子中其他标记的函数,而不是它的位置。

我希望这能澄清问题。如果你还有进一步的问题,请告诉我。

这是一个很好的解释@hsm207,澄清了很多。谢谢。

我仍然不明白的是,对于文本分类任务中的相似句子检查,这是否真的是句子的良好表示?因为我尝试检查相似句子来解释文本分类任务中的误报结果,但结果并不一致。

你能分享一些关于句子相似性的见解吗?或者正确的方法是在标记级别进行交叉计算吗?

再次感谢。

qxsslcnc

qxsslcnc8#

你能举一些文本分类用例的例子吗?你是如何检查相似的句子来解释误报的?
BERTScore是用来评估机器生成文本的质量,例如机器翻译、图像标注。我不认为这个指标适用于文本分类,因为输出是类别标签,而不是标记片段。

c9x0cxw0

c9x0cxw09#

@hsm207 这是一个很好的解释,为什么CLS学习句子表示,非常感谢。

相关问题