在 BERT 中,他们用特殊的标记标签替换分隔符和句子的开头。embedding_matrix中有什么对应的值。它们是 0 向量吗?
我想用类似的方法替换名称、建筑物、位置等专有名词。我应该如何去掩盖同样的事情?
在 BERT 中,他们用特殊的标记标签替换分隔符和句子的开头。embedding_matrix中有什么对应的值。它们是 0 向量吗?
我想用类似的方法替换名称、建筑物、位置等专有名词。我应该如何去掩盖同样的事情?
[CLS]首先澄清一下: and[SEP]标记中根本没有掩蔽。这些是分别插入到第一标记序列之前以及第一和第二序列之间的人工标记。
关于 和 的嵌入向量的值[CLS]:[SEP]它们不是用 0 填充的,而是像嵌入表中的任何其他向量一样包含数字表示。从模型的角度来看,它们的嵌入向量并没有什么特别之处,因此它们像其他的一样被正常训练。
关于屏蔽专有名称:您应该考虑到 BERT 是基于子词的模型。这意味着单词被拆分为作为词汇表一部分的子词。有时一个词只映射到一个标记,但有时一个词映射到多个标记的序列。不常用的词往往几乎在字符级别被切分。根据训练模型的数据,您所指的专有名词可能会分成多个子词。在设计掩蔽程序时,您应该考虑到这一点:
考虑到这与 BERT 的固有掩码不同,其中输入令牌被掩码,但损失迫使模型预测原始令牌。在您的情况下,原始专有名词将被掩盖以永不返回。
我认为用聚合的专有名词向量替换专有名词应该可以解决问题
基本上,像巴塞罗那、西班牙、印度和其他位置这样的词与偏置向量具有高度相似性,我们可以使用该矩阵沿列轴的标准差来找出该向量。取值低的可以保留,其余全部设置为0
例如:德里,可以替换为 [2,3,4,0,0,0...] 其中 [2,3,4...] 是其他位置的共同属性