BERT-whitening-pytorch icon indicating copy to clipboard operation
BERT-whitening-pytorch copied to clipboard

使用avg pooling生成句子嵌入时,是否应该加入attention mask做平均

Open zchuz opened this issue 2 years ago • 1 comments

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)

zchuz avatar Apr 07 '22 07:04 zchuz

由all_utils.py的sent_to_vec可知,数据是一句一句单独地进行tokenization,没有对齐的需要,所以是没有padding token的。 不过这么做计算很慢,如果要改成整个batch一起tokenization然后编码的话,还是要用attention mask来过滤padding的。亲测前后结果差距很大。

ysngki avatar Jan 01 '23 11:01 ysngki