BERT-whitening-pytorch
BERT-whitening-pytorch copied to clipboard
使用avg pooling生成句子嵌入时,是否应该加入attention mask做平均
if pooling == 'first_last_avg':
output_hidden_state = (hidden_states[-1] + hidden_states[1]).mean(dim=1)
if pooling == 'first_last_avg':
hidden = (hidden_states[-1] + hidden_states[1]) / 2
output_hidden_state = (hidden * att_mask.unsqueeze(-1)).sum(1) / att_mask.sum(-1).unsqueeze(-1)
由all_utils.py的sent_to_vec可知,数据是一句一句单独地进行tokenization,没有对齐的需要,所以是没有padding token的。 不过这么做计算很慢,如果要改成整个batch一起tokenization然后编码的话,还是要用attention mask来过滤padding的。亲测前后结果差距很大。