【发布时间】:2020-09-16 01:01:33
【问题描述】:
我正在尝试为语言建模任务微调预训练的 Transformer-XL 模型transfo-xl-wt103。因此,我使用模型类TransfoXLLMHeadModel。
为了迭代我的数据集,我使用文件 tokenization_transfo_xl.py 中的 LMOrderedIterator,它为每个批次(以及序列长度)生成一个带有 data 及其 target 的张量。
让我们假设batch_size = 1 和bptt = 8 的数据如下:
data = tensor([[1,2,3,4,5,6,7,8]])
target = tensor([[2,3,4,5,6,7,8,9]])
mems # from the previous output
我的问题是:我目前将这些数据传递给模型,如下所示:
output = model(input_ids=data, labels=target, mems=mems)
这对吗?
我想知道,因为文档中提到了 labels 参数:
标签(:obj:
torch.LongTensor形状为 :obj:(batch_size, sequence_length),optional,默认为 :obj:None): 语言建模的标签。 请注意,模型内部的标签移动,即您可以设置lm_labels = input_ids
那么参数lm_labels 是怎么回事?我只看到在forward 方法中定义的labels。
当标签在模型内部“移动”时,这是否意味着我必须通过 data 两次(另外而不是 targets),因为它在内部移动了?但是模型如何知道下一个要预测的标记呢?
我还阅读了this bug 和this pull request 中的修复,但我不太明白现在如何处理模型(修复之前与修复之后)
提前感谢您的帮助!
编辑:Link 在 Github 上发布
【问题讨论】:
标签: huggingface-transformers language-model