【发布时间】:2021-03-02 09:58:12
【问题描述】:
在 HuggingFace 的代码生成阶段: https://github.com/huggingface/transformers/blob/master/src/transformers/generation_utils.py#L88-L100
他们传递了decoder_start_token_id,我不确定他们为什么需要这个。而在 BART 配置中,decoder_start_token_id 实际上是2 (https://huggingface.co/facebook/bart-base/blob/main/config.json),即句尾标记</s>。
我尝试了一个简单的例子:
from transformers import *
import torch
model = BartForConditionalGeneration.from_pretrained('facebook/bart-base')
tokenizer = BartTokenizer.from_pretrained('facebook/bart-base')
input_ids = torch.LongTensor([[0, 894, 213, 7, 334, 479, 2]])
res = model.generate(input_ids, num_beams=1, max_length=100)
print(res)
preds = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=True).strip() for g in res]
print(preds)
我得到的结果:
tensor([[ 2, 0, 894, 213, 7, 334, 479, 2]])
['He go to school.']
虽然不影响最终的“分词解码”结果。但我觉得很奇怪,我们生成的第一个令牌实际上是2(</s>)。
【问题讨论】:
-
他们目前正在讨论它(link)。
标签: nlp pytorch huggingface-transformers