Я пытаюсь настроить предварительно обученную модель Transformer-XL transfo-xl-wt103
для задачи языкового моделирования. Поэтому я использую класс модели TransfoXLLMHeadModel
.
Для перебора моего набора данных я использую LMOrderedIterator
из файла tokenization_transfo_xl.py , который дает тензор с 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
of shape: obj: (batch_size, sequence_length)
, optional
, по умолчанию: obj: None
): метки для языкового моделирования. Обратите внимание, что метки смещены внутри модели, т.е. вы можете установить lm_labels = input_ids
Итак, что это за параметр lm_labels
? Я вижу только labels
, определенный в методе forward
.
И когда метки «смещаются» внутри модели, означает ли это, что я должен передать data
дважды (дополнительно вместо targets
) потому что его сдвинули внутрь? Но как тогда модель узнает, какой следующий токен предсказать?
Я также прочитал эту ошибку и исправление в этом запросе на перенос , но я не совсем понять, как обращаться с моделью сейчас (до или после исправления)
Заранее благодарим за помощь!
Редактировать : Ссылка на выпуск на Github