BucketIterator未返回正确大小的批次

时间:2019-05-22 00:28:47

标签: python nlp pytorch torchtext

我正在PyTorch中实现一个简单的LSTM语言模型,并想查看BucketIterator提供的torchtext

事实证明,返回的批次具有我整个语料库的大小,因此在初始化期间我一定做错了事。

我已经开始使用BPTTIterator,但是由于我也希望能够训练一批完整的句子,因此我认为BucketIterator应该是可行的方法。

我使用以下设置,使我的语料库成为一个简单的txt文件,每行包含句子。

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, corpus_size)的1个张量中。

设置中我缺少什么?

编辑:似乎PennTreebank对象与BucketIterator不兼容(如此处http://mlexplained.com/2018/02/15/language-modeling-tutorial-in-torchtext-practical-torchtext-part-2/所述,它仅包含1个Example)。将TabularDataset仅使用1个Field即可正常工作。

如果有人知道如何在torchtext中以更优雅的方式完成带有填充句子批处理的语言建模,我很想听听!

0 个答案:

没有答案