【发布时间】:2020-12-31 13:59:40
【问题描述】:
我正在研究一个嵌入模型,其中有一个 BERT 模型,它接受文本输入并输出一个多维向量。该模型的目标是为相似的文本找到相似的嵌入(高余弦相似度),为不同的文本找到不同的嵌入(低余弦相似度)。
在小批量模式下训练时,BERT 模型会给出N*D 维度的输出,其中N 是批量大小,D 是 BERT 模型的输出维度。
另外,我有一个维度为N*N 的目标矩阵,如果sentence[i] 和sentence[j] 在意义上相似,则在[i, j] th 位置包含1,如果不是,则包含-1。
我想要做的是通过找到 BERT 输出中所有嵌入的余弦相似度并将其与目标矩阵进行比较来找到整个批次的损失/错误。
我所做的只是将张量与其转置相乘,然后取元素级 sigmoid。
scores = torch.matmul(document_embedding, torch.transpose(document_embedding, 0, 1))
scores = torch.sigmoid(scores)
loss = self.bceloss(scores, targets)
但这似乎不起作用。
还有其他方法吗?
附:我想做的和this paper中描述的方法类似。
【问题讨论】:
标签: pytorch tensor embedding bert-language-model loss