当前位置:   article > 正文

使用TorchText处理我们自己的数据集_data.tabulardataset.splits

data.tabulardataset.splits

TorchText可以读取三种数据格式:json, tsv (tab separated values 制表分隔值)和csv(comma separated values 逗号分隔值)。

处理JSON数据

从json开始,你的数据必须是json行格式,也就是说,它必须是这样的:

{
   "name": "John", "location": "United Kingdom", "age": 42, "quote": ["i", "love", "the", "united kingdom"]}
{
   "name": "Mary", "location": "United States", "age": 36, "quote": ["i", "want", "more", "telescopes"]}
  • 1
  • 2
  • 3
  • 4

也就是说,每一行都是一个json对象。data/trian.json为例。

然后我们定义字段:

from torchtext import data
from torchtext import datasets

NAME = data.Field()
SAYING = data.Field()
PLACE = data.Field()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

接下来,我们必须告诉TorchText哪个字段应用于json对象的哪个元素。

对于json数据,我们必须创建一个字典:

  • 键与json对象的键匹配
  • 值为元组,其中:
    • 第一个元素成为batch对象的属性名
    • 第二个元素是字段的名称

一些注意事项:

  • fields字典中键的顺序并不重要,只要它的键与json数据键匹配即可。
  • 字段名不必与json对象中的键匹配,例如,我们使用PLACE来表示“location”字段。
  • 当处理json数据时,并不是所有的键都必须使用,例如,我们没有使用“age”字段。
  • 同样,如果json字段的值是一个字符串,那么将应用字段标记化(默认情况下是将字符串按空格分隔),然而,如果值是一个列表,则不应用标记化。通常情况下,将数据标记为一个列表是一个好主意,这节省了时间,因为您不必等待TorchText来做这件事。
  • json字段的值不必是相同的类型。有些例子的“引号”可以是字符串,有些则是列表。标记化将只应用于那些以“引号”表示字符串的字符串。
  • 如果你正在使用一个json字段,每个例子必须有一个该字段的实例,例如在这个例子中所有的例子必须有一个name,location和quote。但是,由于我们没有使用age字段,因此示例中没有age字段也没有关系。
fields = {
   'name': ('n', NAME), 'location': ('p', PLACE), 'quote': ('s', SAYING)}
  • 1
  • 2

现在,在训练循环中,我们可以通过数据迭代器进行迭代并且通过batch.n访问name,通过batch.p访问location,通过batch.s访问quote。

然后我们使用TabularDataset.splits函数创建我们的数据集(train_data和test_data)

path参数指定两个数据集中共同的顶级文件夹,train和test参数指定每个数据集的文件名,例如,这里的train数据集位于data/train.json。

我们告诉函数我们正在使用json数据,并将前面定义的fields字典传递给它。

train_data, test_data = data.TabularDataset.splits(
                            path = 'data',
                            train = 'train.json',
                            test = 'test.json',
                            format = 'json',
                            fields = fields
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如果已经有验证数据集,则可以将其路径作为validation 参数传递。

train_data, valid_data, test_data = data.TabularDataset.splits(
                                        path 
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/378359
推荐阅读
相关标签
  

闽ICP备14008679号