资讯详情

ParlAI 中的 Children‘s Book Test(CBT)任务:完形填空式阅读理解数据集的加载、评测与源码解析

📅 2026/9/24 14:32:18 | 华诺云谱 👁 阅读
ParlAI 中的 Children‘s Book Test(CBT)任务:完形填空式阅读理解数据集的加载、评测与源码解析
NLP人工智能深度学习【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址https://gitcode.com/gh_mirrors/pa/ParlAI点击查看免费下载导读本文以 ParlAI 仓库中 cbt 任务模块 为核心系统讲解 Childrens Book TestCBT这一经典闭卷Cloze阅读理解任务在 ParlAI 中的完整实现从数据集构成、四类子任务划分、数据构建流程到具体的加载命令、训练评测方法与底层 Teacher 源码机制。读完本文你将能直接在本仓库中加载 CBT 数据、复现其样例格式并理解 ParlAI 教师Teacher框架是如何把原始语料转换为可供模型训练的标准对话消息。CBT 任务概览让模型读完童书段落并填空CBTChildrens Book Test是一个经典的句子补全Sentence Completion任务其核心形式为给定来自童书的若干句上下文要求模型在最后一个句子的空位blank处填入正确的词语。该任务源自 Hill 等人 2016 年的工作arXiv:1511.02301被 ParlAI 归入#CBT、#All、#Cloze三类标签。仓库中 任务注册表 对该任务的官方描述为Sentence completion given a few sentences as context from a childrens book.即给定来自童书的几句上下文完成句子补全。这一注册信息同时标注了任务标识cbt、展示名Childrens Book Test (CBT)、标签Cloze以及对应的论文链接是 ParlAI 中-t cbt任务路由的入口依据。从任务形态上看CBT 属于典型的长上下文推理评测模型必须把前文的实体、指代、事件因果与语义约束综合起来才能从候选词中选出唯一正确的补全项——这正是它对阅读理解与语言建模能力的考察点所在。数据集构成四类闭卷子任务CBT 原始数据按要预测的词语类型分为四个子集在 agents.py 中被实现为四个 Teacher 类子任务标识Teacher 类预测目标对应数据文件前缀cbt:NENETeacher命名实体Named Entitiescbtest_NEcbt:CNCNTeacher普通名词Common Nounscbtest_CNcbt:VVTeacher动词Verbscbtest_Vcbt:PPTeacher介词Prepositionscbtest_P四个类的实现模式完全一致例如NETeacheragents.pyclass NETeacher(FbDeprecatedDialogTeacher): def __init__(self, opt, sharedNone): opt[datafile] _path(cbtest_NE, opt) opt[cloze] True super().__init__(opt, shared)关键点在于opt[cloze] True。这一开关在底层教师类 FbDeprecatedDialogTeacher 中生效当cloze为真时每条消息的text会被自动加上Fill in the blank in the last sentence.\n前缀见 teachers.py明确告诉模型请补全最后一句话中的空位随后才是来自童书的上下文段落。除四个子任务外agents.py 还定义了默认教师类# By default train on all tasks at once. class DefaultTeacher(MultiTaskTeacher): def __init__(self, opt, sharedNone): opt copy.deepcopy(opt) opt[task] cbt:NE,cbt:CN,cbt:V,cbt:P super().__init__(opt, shared)即直接使用-t cbt时ParlAI 会加载DefaultTeacher它通过MultiTaskTeacher将四个子任务打包成多任务训练模型一次训练即可覆盖全部四种词性的填空预测。数据样例XXXXX 占位符与候选词机制CBT 数据的原始形态是上下文段落 被遮罩词 候选词列表。仓库自带的校验样例文件 cbt_test.yml 中完整记录了转换后的 ParlAI 消息结构以下是一个 NE 子任务的典型样例- episode_done: true id: cbt:NE eval_labels: [Keddah] label_candidates: [Assamese, Hai, Keddah, Nag, Pudmini, Sahib, Toomai, days, mahout, right] reward: 0 text: Fill in the blank in the last sentence. But , son , I am angry that thou shouldst meddle in the business that belongs to these dirty Assamese jungle folk . ... The catchers , and hunters , and beaters , the men of the regular XXXXX , who stayed in the jungle year in and year out , ...可以看到数据经过了明确的范式化处理text以Fill in the blank in the last sentence.开头由clozeTrue注入随后是整段上下文目标句中真正的被遮罩词统一替换为大写占位符XXXXXlabel_candidates固定 10 个候选词其中只有 1 个是正确答案eval_labels训练时为labels正确答案例如 NE 例中的Keddah、CN 例中的man、V 例中的am、P 例中的asreward评测奖励统一为 0即该任务不做交互式奖励只做监督式补全episode_done: true每个 episode 只有一条样例即一段上下文对应一次填空。同样地在 cbt_train.yml 与 cbt_valid.yml 中可以看到训练集样例使用labels字段而非eval_labels其余结构完全一致。这种10 选 1的受限候选设计使 CBT 成为可精确计算准确率accuracy的评测基准。数据划分与规模train / valid / test 的文件路由CBT 的划分逻辑集中在_path函数agents.pydef _path(task, opt): # Build the data if it doesnt exist. build(opt) suffix dt opt[datatype].split(:)[0] if dt train: suffix train elif dt test: suffix test_2500ex elif dt valid: suffix valid_2000ex return os.path.join( opt[datapath], CBT, CBTest, data, task _ suffix .txt )它根据opt[datatype]的前缀train/test/valid选择不同的数据文件后缀datatype 前缀文件后缀说明traintrain完整训练集validvalid_2000ex每类子任务抽取 2000 条作为验证集testtest_2500ex每类子任务抽取 2500 条作为测试集最终的数据文件路径形如{datapath}/CBT/CBTest/data/cbtest_NE_train.txt {datapath}/CBT/CBTest/data/cbtest_P_test_2500ex.txt其中{datapath}由 ParlAI 的--datapath参数指定默认位于 ParlAI 数据目录下。关于数据规模可以从仓库自带的三个 yml 校验文件中得到确切的证据训练划分约669,343条见 cbt_train.yml验证划分8,000条cbt_valid.yml对应 4 类子任务 × 2000测试划分10,000条cbt_test.yml对应 4 类子任务 × 2500。训练集远大于验证/测试集体现了大语料预训练 小规模标准评测的经典范式。数据自动构建build 流程与校验哈希与 ParlAI 中所有任务一样CBT 数据不需要手动准备首次加载时会由 build.py 自动完成下载与解压。其核心资源声明build.pyRESOURCES [ DownloadableFile( http://parl.ai/downloads/cbt/cbt.tar.gz, cbt.tar.gz, 932df0cadc1337b2a12b4c696b1041c1d1c6d4b6bd319874c6288f02e4a61e92, ) ]构建函数build(opt)build.py的逻辑要点目标目录为{datapath}/CBT通过build_data.built(dpath, version_stringNone)检查数据是否已就绪version为None即不按版本号区分存在即用若未构建则下载cbt.tar.gz并解压到{datapath}/CBT随后调用build_data.mark_done标记完成避免重复下载下载源为 ParlAI 官方数据分发地址并带 SHA-256 校验和932df0cadc...a61e92确保数据完整性。由于_path在每次加载时都会先调用build(opt)所以无论是运行display_data还是train_model数据都会在首次使用时自动就位无需额外手工步骤。在 ParlAI 中加载、训练与评测 CBT1. 快速查看数据使用 ParlAI 的 display_data.py 可以直观查看 CBT 的输入输出格式python parlai/scripts/display_data.py -t cbt -dt valid加载四个子任务合并的多任务版本也可以只加载单个子任务python parlai/scripts/display_data.py -t cbt:NE -dt valid python parlai/scripts/display_data.py -t cbt:P -dt test输出中会逐条显示Fill in the blank in the last sentence.开头的上下文、10 个候选词与正确答案。2. 训练模型基于 train_model.py 即可在该任务上训练任意 ParlAI 模型例如python parlai/scripts/train_model.py \ -t cbt \ -m seq2seq \ -mf /tmp/cbt_model \ -bs 32 \ -esz 300 \ -hs 512由于DefaultTeacher本身是MultiTaskTeacher上述命令默认同时训练 NE/CN/V/P 四类子任务若只想训练某一类可将-t替换为-t cbt:CN等。训练过程中模型将以label_candidates中的 10 个候选词为约束进行候选打分这与 ParlAI 中--eval-candidates与fixed/batch候选机制的配合方式天然契合。3. 在测试集上评测训练完成后用 eval_model.py 在标准的 2500×4 测试划分上评估python parlai/scripts/eval_model.py -t cbt -dt test -mf /tmp/cbt_model评测指标accuracy、ppl 等会输出到终端与日志中。注意-dt test会自动路由到test_2500ex后缀的数据文件与训练/验证文件彼此隔离保证了评测的公正性。4. 常见参数速查参数作用与 CBT 的关系-t cbt加载任务路由到DefaultTeacher四子任务多任务-t cbt:NE等指定子任务只加载某类词性的填空数据-dt train/valid/test数据划分决定_path选择train/valid_2000ex/test_2500ex文件--datapath数据根目录决定{datapath}/CBT的下载与读取位置cloze内部开关注入提示前缀由各 Teacher 固定设为True无需手工指定底层实现FbDeprecatedDialogTeacher 与 fbdialog 格式解析CBT 的四个 Teacher 都继承自FbDeprecatedDialogTeacher后者位于 teachers.py用于解析 Facebook Dialogfbdialog格式的旧式数据文件。该格式用制表符分隔上下文/查询 / 标签 / 奖励 / 候选词而 CBT 原始文件正是这种每段上下文 带XXXXX的查询行的形态因此可以直接复用其setup_data()解析器无需为 CBT 单独编写解析代码——这是 ParlAI Teacher 框架数据格式标准化 任务配置化设计思路的典型体现。其中与本任务最相关的两个机制self.cloze opt.get(cloze, False)teachers.pycloze开关默认关闭CBT 的 Teacher 显式将其置为True从而在生成text时自动添加Fill in the blank in the last sentence.指令前缀label_candidates的透传解析器会把数据文件中的候选词列表直接映射为消息的label_candidates字段使模型在受限候选中做判别式预测。值得强调的是cloze前缀的设计让 CBT 样例天然具备任务指令 上下文的结构这与 ParlAI 中其他任务如 booktest被描述为 A larger version of CBT保持一致的文本组织方式便于模型在不同闭卷任务间迁移。自动化测试确保任务始终可用CBT 任务配有自动化测试见 test.pyfrom parlai.utils.testing import AutoTeacherTest # noqa: F401 class TestDefaultTeacher(AutoTeacherTest): task cbtAutoTeacherTest会基于任务目录下的 test/cbt_train.yml、test/cbt_valid.yml、test/cbt_test.yml 三个快照文件自动校验 Teacher 的加载行为——包括每条消息的text、labels/eval_labels、label_candidates、episode_done等字段是否与预期一致。这意味着即使 CBT 远程数据源发生变化或离线仓库内的快照依然能验证 Teacher 逻辑的正确性新增模型或修改 Teacher 基类时运行python -m pytest tests/tasks/ -k cbt一类测试即可快速回归。小结CBT 在 ParlAI 生态中的定位CBT 是 ParlAI 中最经典的 Cloze 类阅读理解任务之一。从仓库实现可以看出其价值不仅在于评测模型的长上下文推理能力更在于它为 ParlAI 的 Teacher 框架提供了一个零解析成本的接入范例数据下载build.py、格式解析FbDeprecatedDialogTeacher、子任务组织MultiTaskTeacher三层各司其职。通过-t cbt一行命令即可完成从数据就位、样例查看、模型训练到标准测试集评测的完整闭环而四类词性子任务的划分也让研究者能够分别观察模型在命名实体、普通名词、动词与介词上的补全能力差异。赞分享NLP人工智能深度学习【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址https://gitcode.com/gh_mirrors/pa/ParlAI点击查看免费下载相关推荐ParlAI 中的 HotpotQA 任务多跳阅读理解数据集的加载、构建与评测实战指南ParlAI 中的 HotpotQA 任务多跳阅读理解数据集的加载、构建与评测实战指南 HotpotQA 是 ParlAI 内置的多跳问答Multi hopNLP人工智能深度学习ParlAI 中的 IWSLT14 机器翻译任务de-en / en-de 数据加载与源码实现解析ParlAI 中的 IWSLT14 机器翻译任务de en / en de 数据加载与源码实现解析 导读 本文围绕 ParlAI 仓库中的 iwslt14NLP人工智能深度学习Label Studio 如何用 Data Manager 对选中的任务执行批量标注Label Studio 如何用 Data Manager 对选中的任务执行批量标注 当你有一大批任务共享同一个标签比如同一类别的图像分类或一批你确定都是NLP人工智能深度学习上一篇如何在5分钟内免费激活Windows和OfficeKMS_VL_ALL_AIO实用指南下一篇ARIS 教程生产流水线/interview-cheatsheet 与 /render-html 的跨模型审查式速查表工作流创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。