3

我正在实现一个简单的 LSTM 语言模型PyTorch,并想查看BucketIteratortorchtext.

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

我已经开始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以更优雅的方式使用填充句子批次进行语言建模,我很想听听!

4

0 回答 0