是否可以访问拥抱面变压器嵌入层?

Is it possible to access hugging face transformer embedding layer?

我想在序列到序列模型中使用预训练的抱脸变换语言模型作为编码器。

任务是语法纠错,所以输入和输出都来自同一种语言。

所以我想知道是否可以从拥抱面转换器编码器访问嵌入层,并将其用作解码器的嵌入层?

或者您可能会推荐一些其他方法?

是的 您可以通过 :

访问它
model.embeddings

以bert为例

如果加载 BertModel

from transformers import BertModel
model = BertModel.from_pretrained("bert-base-uncased")
print(model.embeddings)

# output is
BertEmbeddings(
  (word_embeddings): Embedding(30522, 768, padding_idx=0)
  (position_embeddings): Embedding(512, 768)
  (token_type_embeddings): Embedding(2, 768)
  (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)
  (dropout): Dropout(p=0.1, inplace=False)
)

如果您将 bert 与其他层一起加载(例如,BertForPreTraining 或 BertForSequenceClassification)

from transformers import BertForSequenceClassification
model = BertForSequenceClassification.from_pretrained("bert-base-uncased")
print(model.bert.embeddings)

# output is
BertEmbeddings(
  (word_embeddings): Embedding(30522, 768, padding_idx=0)
  (position_embeddings): Embedding(512, 768)
  (token_type_embeddings): Embedding(2, 768)
  (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)
  (dropout): Dropout(p=0.1, inplace=False)
)