首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换器-XL:语言建模的输入和标签

转换器-XL:语言建模的输入和标签
EN

Stack Overflow用户
提问于 2020-05-28 16:08:25
回答 1查看 300关注 0票数 0

我正试图为语言建模任务完善经过预先训练的Transformer模型transfo-xl-wt103。因此,我使用模型类TransfoXLLMHeadModel

为了迭代我的数据集,我使用来自文件LMOrderedIteratorxl.py,该文件为每个批(以及序列长度)生成一个带有data及其target的张量。

让我们使用batch_size = 1bptt = 8假设以下数据

代码语言:javascript
复制
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

我的问题是:当前将这些数据传递到模型中,如下所示:

代码语言:javascript
复制
output = model(input_ids=data, labels=target, mems=mems)

这是正确的吗?

我想知道,因为文档中显示的是labels参数:

标签(:obj:torch.LongTensor of for :obj:(batch_size, sequence_length)optional,默认为:obj:None):语言建模标签。注意,标签在模型中移动了,即您可以设置lm_labels = input_ids

那么参数lm_labels是什么呢?我只看到在labels方法中定义的forward

当标签在模型中“被移动”时,这是否意味着我必须通过data两次(另外而不是targets),因为它在内部移动了?但是,这个模型是如何知道下一个要预测的令牌的呢?

我还阅读了这只虫子此拉请求中的修复,但我不太明白现在该如何对待模型(在修复之前还是之后)

提前感谢您的帮助!

编辑链接发布在Github上

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-01 22:07:43

这听起来确实像是另一位模特的惯例中的错误。您确实需要两次传递数据,一次是input_ids,一次是labels (在您的例子中,两者都是[1, ... , 8] )。然后,该模型将尝试从[2, ... , 8]中预测[1, ... , 7])。我不确定在目标张量开始时添加一些东西是否有效,因为这很可能会导致后面的尺寸不匹配。

在变压器中传递两次是默认的方法;在前面提到的PR之前,TransfoXL没有在内部移动标签,您必须自己移动标签。PR将其更改为与库和文档一致,在库和文档中,您必须两次传递相同的数据。

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

https://stackoverflow.com/questions/62069350

复制
相关文章

相似问题

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