使用TorchText处理我们自己的数据集

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"]}

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

然后我们定义字段:

from torchtext import data
from torchtext import datasets

NAME = data.Field()
SAYING = data.Field()
PLACE = data.Field()

接下来,我们必须告诉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)}

现在,在训练循环中,我们可以通过数据迭代器进行迭代并且通过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
)

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

train_data, valid_data, test_data = data.TabularDataset.splits(
                                        path 
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值