Open nostalgiaer opened 10 months ago
我注意到Chatglm的tokenizer的padding side默认且只能设置为left,这意味着pad token将会被添加到一个句子的前一部分,直到sequence length最终达到model max length,而输入句子的有效token集中于input_ids的后一部分。 另外,我发现modeling_chatglm.py中的get_masks,似乎是为了Casual LM任务而将mask设置为下三角矩阵。
full_attention_mask = torch.ones(batch_size, seq_length, seq_length, device=input_ids.device) full_attention_mask.tril_()
这是否会导致在attention计算时损失一些有效信息 (因为mask矩阵中对应的pad token设置为1,而在sequence后一部分有效的token可能会反而被设置为0)。 除了以上疑问,对于get_masks函数中这里也有疑问:这两行的作用是为了什么呢?
get_masks
if not past_length and padding_mask is not None: full_attention_mask -= padding_mask.unsqueeze(-1) - 1
无
- OS: Ubuntu - Python: 3.8 - Transformers: 4.34.1 - PyTorch: 1.13 - CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :
No response
Is there an existing issue for this?
Current Behavior
我注意到Chatglm的tokenizer的padding side默认且只能设置为left,这意味着pad token将会被添加到一个句子的前一部分,直到sequence length最终达到model max length,而输入句子的有效token集中于input_ids的后一部分。 另外,我发现modeling_chatglm.py中的get_masks,似乎是为了Casual LM任务而将mask设置为下三角矩阵。
这是否会导致在attention计算时损失一些有效信息 (因为mask矩阵中对应的pad token设置为1,而在sequence后一部分有效的token可能会反而被设置为0)。 除了以上疑问,对于
get_masks
函数中这里也有疑问:这两行的作用是为了什么呢?Expected Behavior
无
Steps To Reproduce
无
Environment
Anything else?
No response