BERT 之输入表示

17
0
0
2023-04-13

BERT 之输入表示

BERT的输入序列构造如下:

  • [CLS] Token: 输入序列的开始是一个特殊的分类token([CLS]),其最终的隐藏状态被用作分类任务的聚合序列表示。

  • Token Embeddings: 接下来是句子中每个token的WordPiece tokenization结果。

  • [SEP] Token: 两个句子之间通过一个特殊的分隔token([SEP])进行分隔。

  • Padding: 如果输入序列的长度小于BERT的最大序列长度(通常是512),则使用特殊的填充token([PAD])进行填充。

  • Attention Mask: 为了避免在padding token上计算注意力,BERT使用一个注意力掩码,该掩码在padding token的位置上为0,在有效token的位置上为1。

  • Segment IDs: 每个token都分配一个段ID,以指示它属于第一个句子还是第二个句子。

4. 实例

假设我们有两个句子 “Hello, how are you?” 和 “I am fine, thank you.”,BERT的输入序列可能如下所示:

复制

[CLS] Hello, how are you? [SEP] I am fine, thank you. [SEP]

对应的嵌入表示将结合以下三个部分:

  • Token Embeddings for each token.

  • Segment Embeddings: 例如,第一个句子的所有token可能都有一个段嵌入向量表示为0,而第二个句子的所有token的段嵌入向量表示为1。

  • Positional Embeddings: 根据每个token在序列中的位置分配。

5. 输入表示的限制

BERT的最大序列长度通常是512个token。如果输入文本超过这个长度,需要截断或分割文本。在实际应用中,这可能需要一些策略来确保信息的完整性。

通过这种方式,BERT能够将文本转换为具有丰富语义信息的固定大小的向量表示,这些表示随后可以被Transformer架构有效地处理。

BERT 在预训练阶段使用了前文所述的两种训练方法,在真实训练中一般是两种方法混合使用

由于 BERT 通过 Transformer 模型堆叠而成,所以 BERT 的输入需要两套 Embedding 操作:

  1. 一套为 One-hot 词表映射编码(对应下图的 Token Embeddings);

  2. 另一套为位置编码(对应下图的 Position Embeddings),不同于 Transformer 的位置编码用三角函数表示,BERT 的位置编码将在预训练过程中训练得到(训练思想类似于Word Embedding 的 Q 矩阵)

  3. 由于在 MLM 的训练过程中,存在单句输入和双句输入的情况,因此 BERT 还需要一套区分输入语句的分割编码(对应下图的 Segment Embeddings),BERT 的分割编码也将在预训练过程中训练得到

对于分割编码,Segment Embeddings 层只有两种向量表示。前一个向量是把 0 赋给第一个句子中的各个 token,后一个向量是把 1 赋给第二个句子中的各个 token ;如果输入仅仅只有一个句子,那么它的 segment embedding 就是全 0,下面我们简单举个例子描述下:

[CLS]I like dogs[SEP]I like cats[SEP] 对应编码 0 0 0 0 0 1 1 1 1

[SEP]I Iike dogs and cats[SEP] 对应编码 0 0 0 0 0 0 0