青島網(wǎng)站建設全包谷歌seo是做什么的
今天分析一下NLP中的pad操作代碼:
該方法的作用是將輸入的序列列表seqs
進行填充操作,使其具有相同的長度,以便進行批處理。填充使用指定的pad_token
進行,并生成一個對應的mask標志列表,用于標記哪些部分是填充內(nèi)容(值為1)和哪些部分是原始內(nèi)容(值為0)。填充后的序列列表和掩蓋標志列表將作為方法的返回值,供進一步使用或處理。
@staticmethoddef _pad_seqs(seqs, pad_token):# 定義變量pad_length,通過遍歷seqs token列表獲取其中最長token的長度,從而將token列表的所有seq長度都填充到pad_lengthpad_length = max([len(seq) for seq in seqs])# 對seqs中的每個token列表進行填充,填充內(nèi)容為pad_token,填充至長度為pad_lengthpadded = [seq + ([pad_token] * (pad_length - len(seq))) for seq in seqs]# 創(chuàng)建一個mask標志列表,長度為seq的長度,并將前部填充部分置為0(未經(jīng)過pad),后部未填充部分置為1(經(jīng)過了pad操作),添加到masks列表中。masks = [([0] * len(seq)) + ([1] * (pad_length - len(seq))) for seq in seqs]return padded, masks
輸入:
- seqs是token的list
- pad_token是詞表中預先定義的特殊字符 '<PAD>'
tokens, orig_pad_masks = self._pad_seqs(tokens, self.pad_token)
輸出:
- 填充后的token,padded[0]:['^', 'C', 'C', 'n', '1', 'c', 'c', '(', '/', 'C', '=', 'C', '2', '/', 'C', '(', '=', 'O', ')', 'N', '(', 'c', '3', 'c', 'c', 'c', '(', 'C', ')', 'c', '(', 'Cl', ')', 'c', '3', ')', 'C', '(', '=', 'O', ')', 'N', '=', 'C', '2', '[O-]', ')', 'c', '2', 'c', 'c', 'c', 'c', 'c', '2', '1', '&', '<PAD>', '<PAD>', '<PAD>', '<PAD>', '<PAD>', '<PAD>', '<PAD>']
- mask標志列表,mask[0]:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]