我正在实现一个简单的 LSTM 语言模型PyTorch,并想查看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,
)
我希望这个迭代器的一批具有 shape (batch_size, max_len),但它将整个语料库附加到 1 张量 shape(1, corpus_size)中。
我的设置中缺少什么?
编辑:似乎该PennTreebank对象与 a 不兼容BucketIterator(它只包含 1 Example,如此处所述http://mlexplained.com/2018/02/15/language-modeling-tutorial-in-torchtext-practical-torchtext-part-2 /)。只使用TabularDataset1Field就可以了。
如果有人知道如何torchtext以更优雅的方式使用填充句子批次进行语言建模,我很想听听!