用于比较两个向量以进行分类的损失函数

Jam*_*son 5 python nlp machine-learning bert-language-model

我正在执行一项 NLP 任务,在其中分析文档并将其分类为六个类别之一。但是,我在三个不同的时间段执行此操作。所以最终的输出是一个由三个整数组成的数组(稀疏),其中每个整数都是 0-5 的类别。因此,一个标签看起来像这样:[1, 4, 5]。

我正在使用 BERT 并试图决定我应该连接什么类型的头部,以及我应该使用什么类型的损失函数。使用 BERT 的 size 输出1024并将其运行通过Dense具有 18 个神经元的层,然后重塑为 size 的东西是否有意义(3,6)?

最后,我假设我会使用稀疏分类交叉熵作为我的损失函数?

Gar*_*Ong 1

bert最终隐藏状态为(512,1024)。您可以采用第一个代币(即 CLS 代币),也可以采用平均池化。无论哪种方式,您的最终输出都是形状 (1024,),现在只需将形状 (1024,6) 的 3 个线性层放入其中nn.Linear(1024,6),并将其传递到下面的损失函数中。(如果你愿意,你可以让它变得更复杂)

只需将损失相加并向后调用即可。请记住,您可以在任何标量张量上调用 loss.backward()。(pytorch)

def loss(time1output,time2output,time3output,time1label,time2label,time3label):
    loss1 = nn.CrossEntropyLoss()(time1output,time1label)
    loss2 = nn.CrossEntropyLoss()(time2output,time2label)
    loss3 = nn.CrossEntropyLoss()(time3output,time3label)

    return loss1 + loss2 + loss3
Run Code Online (Sandbox Code Playgroud)