NLP中的mask的作用


最近真的被mask搞得暈暈的,還是需要好好的看下哦

1、padding mask:處理非定長序列,區分padding和非padding部分,如在RNN等模型和Attention機制中的應用等
2、sequence mask:防止標簽泄露,如:Transformer decoder中的mask矩陣,BERT中的[Mask]位,XLNet中的mask矩陣等
PS:padding mask 和 sequence mask非官方命名

嗯,上面的解釋還是很暈的,還是要具體解讀一下的

本文參考知乎:https://zhuanlan.zhihu.com/p/139595546

后面讀了具體論文之后如有錯誤再修改

RNN中的Mask
對於RNN等模型,本身是可以直接處理不定長數據的,因此它不需要提前告知 sequence length,如下是pytorch下的LSTM定義:

nn.LSTM(input_size, hidden_size, *args, **kwargs)
但是在實踐中,為了 batch 訓練,一般會把不定長的序列 padding 到相同長度,再用 mask 去區分非 padding 部分和 padding 部分。

區分的目的是使得RNN只作用到它實際長度的句子,而不會處理無用的 padding 部分,這樣RNN的輸出和隱狀態都會是對應句子實際的最后一位。另外,對於token級別的任務,也可以通過mask去忽略 padding 部分對應的loss。

不過,在 pytorch 中,對 mask 的具體實現形式不是mask矩陣,而是通過一個句子長度列表來實現的,但本質一樣。實現如下,sentence_lens 表示的是這個batch中每一個句子的實際長度。

Attention中Mask

在 Attention 機制中,同樣需要忽略 padding 部分的影響,這里以transformer encoder中的self-attention為例:

防止標簽泄露

在語言模型中,常常需要從上一個詞預測下一個詞,但如果要在LM中應用 self attention 或者是同時使用上下文的信息,要想不泄露要預測的標簽信息,就需要 mask 來“遮蓋”它。不同的mask方式,也對應了一篇篇的paper,這里選取典型的幾個。

Transformer中的Mask
Transformer 是包括 Encoder和 Decoder的,Encoder中 self-attention 的 padding mask 如上,而 Decoder 還需要防止標簽泄露,即在 t 時刻不能看到 t 時刻之后的信息,因此在上述 padding mask的基礎上,還要加上 sequence mask。

sequence mask 一般是通過生成一個上三角矩陣來實現的,上三角區域對應要mask的部分。

在Transformer 的 Decoder中,先不考慮 padding mask,一個包括四個詞的句子[A,B,C,D]在計算了相似度scores之后,得到下面第一幅圖,將scores的上三角區域mask掉,即替換為負無窮,再做softmax得到第三幅圖。這樣,比如輸入 B 在self-attention之后,也只和A,B有關,而與后序信息無關。

self-attention中,Q和K在點積之后,需要先經過mask再進行softmax,因此,對於要屏蔽的部分,mask之后的輸出需要為負無窮,這樣softmax之后輸出才為0。

BERT中的Mask
BERT實際上是Transformer的Encoder,為了在語言模型的訓練中,使用上下文信息又不泄露標簽信息,采用了Masked LM,簡單來說就是隨機的選擇序列的部分token用 [Mask] 標記代替。

這波Mask操作,思想很直接,實現很簡單,效果很驚人。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM