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效果提升的多)
如有不对的地方,欢迎批评指教,