You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Hugging Face实现torchtext的Example.fromJSON等价功能?

你查询到的load_dataset加载JSON的方案完全匹配你的需求,Example.fromJSON的等价实现可以按以下步骤完成:

1 加载原始JSON数据集

对应你原来的逐文件读JSON逻辑,datasets库支持直接传入批量文件路径,底层自动完成IO和JSON解析,等价于原来的Example.fromJSON读取单条JSON的基础功能:

import os
from datasets import load_dataset

# 替换为你实际的文件路径列表
reading_path = "你的数据目录"
file_list = [os.path.join(reading_path, fname) for fname in 你的文件名列表]
raw_datasets = load_dataset("json", data_files=file_list)

2 等价替换Fields预处理逻辑

原来torchtext的RawField、NestedField、Field定义的字段处理规则,对应到Hugging Face生态中用map方法执行自定义预处理函数实现,你可以完全复用原来的分句、分词逻辑,只需要适配Transformer输入格式即可:

from transformers import AutoTokenizer

# 替换为你使用的预训练模型对应的分词器
tokenizer = AutoTokenizer.from_pretrained("你的预训练模型名")
# 对应原来的NestedField固定长度配置
MAX_SENTENCES = 50
MAX_SENTENCE_LENGTH = 80

def preprocess_function(examples):
    # 对应RawField逻辑:直接保留原始字段
    outputs = {
        "raw_content": examples["article"],
        "raw_abstract": examples["abstract"],
        "id": examples["id"]
    }
    
    # 对应content字段的NestedField逻辑:分句后逐句分词定长
    # 此处分句逻辑可直接替换为你原有代码的实现
    sentences = examples["article"].split("。")
    sentences = sentences[:MAX_SENTENCES]
    # 逐句分词
    tokenized_sents = tokenizer(
        sentences,
        truncation=True,
        max_length=MAX_SENTENCE_LENGTH,
        padding="max_length",
        return_attention_mask=True
    )
    # 补全到固定句子数
    while len(tokenized_sents["input_ids"]) < MAX_SENTENCES:
        tokenized_sents["input_ids"].append([0]*MAX_SENTENCE_LENGTH)
        tokenized_sents["attention_mask"].append([0]*MAX_SENTENCE_LENGTH)
    outputs["content"] = tokenized_sents["input_ids"]
    outputs["content_attention_mask"] = tokenized_sents["attention_mask"]
    
    # 对应abstract字段的NestedField逻辑
    tokenized_abs = tokenizer(
        examples["abstract"],
        truncation=True,
        padding="longest",
        return_attention_mask=True
    )
    outputs["abstract"] = tokenized_abs["input_ids"]
    outputs["abstract_attention_mask"] = tokenized_abs["attention_mask"]
    return outputs

# 批量预处理,num_proc参数对应原来joblib的并行逻辑
processed_datasets = raw_datasets.map(
    preprocess_function,
    num_proc=os.cpu_count()
)

3 效果说明

  • 处理后的processed_datasets中每条样本等价于原来的Example实例,可直接通过字段名访问对应内容,无需额外封装
  • 输出格式可直接对接Transformers的模型输入,不需要额外做格式转换
  • 支持后续直接调用train_test_split、shuffle、format等内置方法完成数据集划分、打乱、转张量等操作

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 20:06:08