我正在实现一个简单的 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 /)。只使用TabularDataset
1Field
就可以了。
如果有人知道如何torchtext
以更优雅的方式使用填充句子批次进行语言建模,我很想听听!