0

我想从我在代码中动态创建的两个列表创建一个SequenceTaggingDatasettrain_sentences -和train_tags. 我想写这样的东西:

train_data = SequenceTaggingDataset(examples=(zip(train_sentences, train_tags)))

但是,构造函数必须接收路径。不仅如此 - 从代码中看起来,即使我要提供示例,它也会覆盖这些示例,并初始化examples为一个空列表。

由于各种原因,我不想将创建的列表保存在SequenceTaggingDataset可以读取的文件中。有什么办法可以解决这个问题,除了定义我自己的自定义类吗?

4

1 回答 1

0

您将需要修改它的源代码(https://pytorch.org/text/_modules/torchtext/datasets/sequence_tagging.html#SequenceTaggingDataset)。您可以制作本地副本并作为模块导入。

path用于__init__. 重要的部分是它从文件中获取行并使用 given 将其拆分separator为 list named columns。然后将此列表与构造列表columns一起输入另一个类方法。请阅读此处提供的示例以了解(请注意,此处称为创建)。fieldsexamplesfieldsUDPOSSequenceTaggingDataset

您需要的是columns,您不需要从文件中读取它,因为您已经拥有所有组件。您将通过简化类直接提供它__init__

def __init__(self, columns, fields, encoding="utf-8", separator="\t", **kwargs):
    examples = []
    examples.append(data.Example.fromlist(columns, fields))
    super(SequenceTaggingDataset, self).__init__(examples, fields,
                                                 **kwargs)

columns是列表的嵌套列表:[[word], [UD_TAG], [PTB_TAG]]. 这意味着您需要将以下内容提供给修改后的类:

train = SequenceTaggingDataset([train_sentences, train_tags], fields=...)
于 2019-12-17T09:50:56.983 回答