THUDM / ChatGLM2-6B

ChatGLM2-6B: An Open Bilingual Chat LLM | 开源双语对话语言模型
Other
15.68k stars 1.85k forks source link

left padding side和mask下三角矩阵之间的矛盾 #603

Open nostalgiaer opened 10 months ago

nostalgiaer commented 10 months ago

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设置为下三角矩阵。

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函数中这里也有疑问:这两行的作用是为了什么呢?

if not past_length and padding_mask is not None:
            full_attention_mask -= padding_mask.unsqueeze(-1) - 1

Expected Behavior

Steps To Reproduce

Environment

- OS: Ubuntu
- Python: 3.8
- Transformers: 4.34.1
- PyTorch: 1.13
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :

Anything else?

No response