首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于MLM问题的变压器预训练-句子嵌入

基于MLM问题的变压器预训练-句子嵌入
EN

Stack Overflow用户
提问于 2021-12-28 12:30:12
回答 1查看 354关注 0票数 0

我用我自己的未标记的数据来训练转换器,如下所示:

基于python train_mlm.py sentence-transformers/LaBSE train.txthttps://github.com/UKPLab/sentence-transformers/tree/master/examples/unsupervised_learning/MLM

然后,我想得到设置的嵌入。代码:

代码语言:javascript
复制
model = AutoModelForMaskedLM.from_pretrained('output/sentence-transformers_LaBSE-2021-12-28_13-03-20')
tokenizer = AutoTokenizer.from_pretrained('output/sentence-transformers_LaBSE-2021-12-28_13-03-20')

model = model.eval()

english_sentences = [
    "dog",
    "Puppies are nice.",
    "I enjoy taking long walks along the beach with my dog.",
]
encoded_input = tokenizer(english_sentences, padding=True, truncation=True, max_length=64, return_tensors='pt')
with torch.no_grad():
    model_output = model(**encoded_input)

print(model_output[0].shape)

问题是我产出的形状有点像(3,14,500,000)。如果不对我的数据形状进行培训,则为(3,14,768)。我做错了什么?在我的训练之后,我怎样才能得到最后的嵌入?

EN

回答 1

Stack Overflow用户

发布于 2021-12-30 11:30:05

你预先训练了一个关于蒙面语言建模(MLM)的变压器。这并不意味着之后您必须使用MLM头:AutoModelForMaskedLM.from_pretrained;因为您的下游任务实际上是嵌入生成,给出了一些输入。这是通过只使用您的微调模型的基本编码器,而没有任何头部顶部:AutoModel.from_pretrained(...)。这将返回您期望的输出形状。

更多关于输出形状的说明:

  • (B,L,768)是不带磁头的变压器编码器的预期输出,即作为嵌入的生成器。这是因为768是变压器编码器通常的隐藏层大小.这就是AutoModel所提供的。
  • (B,L,500000)是运行变压器编码器的预期输出,该编码器顶部有一个MLM头,即作为MLM任务中掩码标记的预测器。类似于500000的是词汇表的大小,而逻辑预测表明哪个词汇标记更有可能填补这个空白。这就是AutoModelForMaskedLM提供的.

给定B=批大小和L=批序列长度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70507101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档