BucketIterator не возвращает партии правильного размера - PullRequest
1 голос
/ 22 мая 2019

Я реализую простую языковую модель LSTM в PyTorch и хотел проверить BucketIterator, предоставленный torchtext.

Оказывается, что возвращаемая партия имеет размер всего моего корпуса, поэтому я должен что-то делать не так во время ее инициализации.

У меня уже работает BPTTIterator, но так как я хочу иметь возможность тренироваться и с пакетами полных предложений, я подумал, что BucketIterator должен быть подходящим способом.

Я использую следующую настройку, с моим корпусом простой текстовый файлсодержащие предложения в каждой строке.

field = Field(use_vocab=True, batch_first=True)
corpus = PennTreebank('project_2_data/train_lines.txt', field)
field.build_vocab(corpus)

iterator = BucketIterator(corpus,
                          batch_size=64,
                          repeat=False,
                          sort_key=lambda x: len(x.text),
                          sort_within_batch=True,
                          )

Я ожидаю, что пакет от этого итератора будет иметь форму (batch_size, max_len), но он добавляет весь корпус в 1 тензор формы (1, corpus_size).

Чего мне не хватает в моей настройке?

Редактировать: кажется, что PennTreebank объект не совместим с BucketIterator (он содержит только 1 Example, как указано здесь http://mlexplained.com/2018/02/15/language-modeling-tutorial-in-torchtext-practical-torchtext-part-2/). ИспользованиеTabularDataset только с 1 Field это заработало.

Если у кого-то есть идея, как языковое моделирование с пакетными предложениями может быть выполнено в torchtext более элегантным способом, я бы хотел услышатьэто!

...