bert中的其他特殊編碼
為什么要其他的特殊編碼呢?
首先回顧下cls是做什么的:
-
[CLS]單文本分類任務:對於文本分類任務,BERT模型在文本前插入一個[CLS]符號,並將該符號對應的輸出向量作為整篇文本的語義表示,用於文本分類。可以理解為:與文本中已有的其它字/詞相比,這個無明顯語義信息的符號會更“公平”地融合文本中各個字/詞的語義信息。(CLS不是第一個句子的表征,是一個分類標志位。經過self attention 可以融合兩個句子和分類相關的信息,然后用在預訓練或者后續任務分類上)。
-
[SEP]語句對分類任務:該任務的實際應用場景包括:問答(判斷一個問題與一個答案是否匹配)、語句匹配(兩句話是否表達同一個意思)等。對於該任務,BERT模型除了添加[CLS]符號並將對應的輸出作為文本的語義表示,還對輸入的兩句話用一個[SEP]符號作分割,並分別對兩句話附加兩個不同的文本向量以作區分,Mr_不想起床
還有兩個特殊的分別是unknown和mask
[UNK]標志指的是未知字符
[MASK]標志用於遮蓋句子中的一些單詞,將單詞用 [MASK] 遮蓋之后,再利用 BERT 輸出的 [MASK] 向量預測單詞是什么。
其他特殊token
pinyin token。
全詞embedding,這個可以看考chinesebert的結構了。
筆者覺得,Google的原生bert也好,還是其他的各種預訓練騷操作也好,基本上一問世就是英文預訓練,即使想huggface上開源的中文,也和實際中的預料相差較大,替換各種魔改的bert(roberta,xlnet,t5,pangu,spanbert等等不如拿自己的預料做continue pretrian效果提升的多)
如有不對的地方,歡迎批評指教,