BERT输入为token ID时,如何获取对应的输入token向量?
BERT模型中token初始向量的常见获取方式
你提到的one-hot编码在实际BERT实现中几乎不会使用,其维度和词表大小一致,算力开销过高,主流的token初始向量获取路径有三类:
- 随机初始化
如果你是从头训练自定义的BERT类模型,框架会根据你设定的词表大小、隐层维度自动生成一个随机初始化的token embedding矩阵,每个token ID对应矩阵中的一行向量。这部分向量属于模型可训练参数的一部分,会在预训练过程中和其他参数共同更新。
以Hugging Face Transformers库为例,执行BertForPreTraining(your_custom_config)时,就会自动完成上述随机初始化操作。 - 加载官方预训练权重
如果是使用学界/工业界公开的预训练BERT(比如BERT-base、BERT-large、各领域专属预训练BERT),token对应的初始向量直接取自预训练阶段已经学习完成的embedding权重矩阵。这类向量已经在大规模通用/领域语料上学到了基础语义信息,做下游任务微调时,你可以选择固定这部分权重,也可以选择随下游数据一起更新。
同样以Hugging Face库为例,执行BertModel.from_pretrained("bert-base-chinese")时,会自动加载预训练好的token embedding权重,输入token ID后直接查表即可得到对应向量。 - 导入自定义预训练词向量
如果你有适配自身业务场景的专属语料,也可以提前用Word2Vec、GloVe等工具预训练好对应词表的词向量,再把这些向量映射到对应token ID的位置作为初始embedding,后续训练过程中同样可以选择固定或微调。
另外补充:BERT的最终输入表示是token embedding、位置embedding、段embedding三者相加的结果,你问题中提到的初始向量一般特指其中的token embedding部分。
内容的提问来源于stack exchange,提问作者woowz
相关产品推荐
相关产品推荐

