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 框架内对 SQuADStanford Question Answering Dataset数据集的官方实现展开系统讲解该任务在仓库中的注册方式、数据下载与校验流程、DefaultTeacher/IndexTeacher/SentenceTeacher等八种教师Teacher变体的设计动机与底层实现并结合仓库中的测试样例与 YAML 快照给出可复现的验证方法。读完本文你将掌握如何在 ParlAI 中加载 SQuAD、理解每种教师变体输出的消息字段差异并能为抽取式问答 / 阅读理解实验选择合适的任务入口。SQuAD 任务在 ParlAI 中的定位SQuADStanford Question Answering Dataset是由 Rajpurkar 等人于 2016 年提出的开放域问答数据集给定一段来自 Wikipedia 的段落paragraph模型需要回答针对该段落提出的问题答案是从段落中抽取的连续文本片段。在 任务 README 中官方将其描述为Open-domain QA dataset answerable from a given paragraph from Wikipedia, from Rajpurkar et al. 16.该任务在仓库中被标记为#SQuAD、#All、#QA三个标签并收录在parlai/tasks任务体系内因此可以通过 ParlAI 统一的任务命令行参数直接加载无需额外编写数据加载代码。从仓库结构看SQuAD 任务由以下文件构成parlai/tasks/squad/agents.py全部教师变体的核心实现parlai/tasks/squad/build.py数据下载、校验与构建parlai/tasks/squad/test.py教师自动测试parlai/tasks/squad/test/每个教师变体对应的 YAML 数据快照与统计信息。数据下载与构建流程SQuAD 任务的数据获取由 build.py 负责其核心是一个RESOURCES资源列表包含三个可下载文件资源用途是否压缩train-v1.1.jsonSQuAD v1.1 训练集官方 SQuAD-explorer 发布否dev-v1.1.jsonSQuAD v1.1 开发集否squad_fulldocs.tgzFulldoc 变体所需的整篇文档数据由 ParlAI 下载服务器托管是构建函数build(opt)的逻辑值得注意在opt[datapath]下创建SQuAD目录先下载前两个 JSON 文件RESOURCES[:2]每个文件都带有 SHA-256 校验值用于保证下载完整性若opt[task]字符串中包含fulldoc则额外在SQuAD-fulldoc目录下载并解压squad_fulldocs.tgz通过build_data.built()/mark_done()机制记录构建状态避免重复下载。也就是说默认的squad任务只依赖约 87K 训练样例的 JSON 文件只有当你使用squad:fulldoc或squad:fulldocsentence变体时才会触发整篇文档数据的下载。数据目录由 ParlAI 全局的--datapath参数控制默认在用户数据目录下。快速上手查看 SQuAD 数据ParlAI 提供了统一的display_data脚本用于预览任何任务的数据。加载默认 SQuAD 教师python -m parlai.scripts.display_data -t squad在parlai/tasks/squad/test/squad_train.yml中可以看到真实的首批样例默认教师的每条消息形如- episode_done: true id: squad labels: - Saint Bernadette Soubirous text: Architecturally, the school has a Catholic character. ... To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?即text字段为段落文本 换行 问题labels为从段落中抽取的答案字符串。该 YAML 快照同时记录了num_episodes: 87599、num_examples: 87599即默认 SQuAD 教师将每个段落 问题视作一个独立 episode训练集共 87599 个样例。教师Teacher变体全景agents.py中为 SQuAD 提供了八种教师分别继承自 ParlAI 核心的FixedDialogTeacher、DialogTeacher、ParlAIDialogTeacher与AbstractWrapperTeacher。任务名与教师类的对应关系如下任务参数教师类基类文本格式核心特性squadDefaultTeacherDialogTeacher段落\n问题标准抽取式 QA 格式squad:indexIndexTeacherFixedDialogTeacher段落\n问题附带answer_starts答案起始索引squad:opensquadOpensquadTeacherDialogTeacher仅问题去掉上下文段落的开放问答squad:titleTitleTeacherDefaultTeacher标题\n段落\n问题额外注入 Wikipedia 文章标题squad:fulldocFulldocTeacherParlAIDialogTeacher整篇文档 问题基于整篇文档而非单个段落squad:sentenceSentenceTeacherIndexTeacher段落\n问题或分离字段标签改为包含答案的句子squad:fulldocsentenceFulldocsentenceTeacherFulldocTeacher整篇文档 问题句子级标签 整篇文档squad:squadqaSquadQATeacherAbstractWrapperTeacher仅段落只保留段落、去掉问题下面逐一展开每种变体的实现细节。默认教师DefaultTeacherDefaultTeacher继承自核心的DialogTeacheragents.py 中其实现非常精简只需实现setup_data(path)迭代器即可自动获得act()、基础指标等能力。其关键逻辑def setup_data(self, path): with PathManager.open(path) as data_file: self.squad json.load(data_file)[data] for article in self.squad: for paragraph in article[paragraphs]: for qa in paragraph[qas]: question qa[question] answers tuple(a[text] for a in qa[answers]) context paragraph[context] yield (context \n question, answers), True数据结构按 SQuAD 原始 JSON 的三层嵌套遍历data → articles → paragraphs → qas每个样例产出(text, labels)二元组episode_done恒为True单轮 QA无多轮对话answers使用元组承载因为 SQuAD 中一个问题通常有多个标注答案。类注释中明确指出默认教师does not efficiently store the paragraphs in memory不将段落常驻内存即采用流式生成方式以节省内存为优先。数据文件路径通过opt[datafile]指向SQuAD/train-v1.1.json或SQuAD/dev-v1.1.json取决于datatype是否以train开头。手写 act() 的范例IndexTeacherIndexTeacher继承自FixedDialogTeacher是仓库注释中明确标注的手写 SQuAD 教师范例——它不依赖核心DialogTeacher而是自行实现act()与数据索引并额外暴露答案在上下文中的起始位置action { id: squad, text: context \n question, labels: answers, episode_done: True, answer_starts: answer_starts, }其数据准备在_setup_data()中完成一次性读取全部 JSON预先构建(article_idx, paragraph_idx, qa_idx)的三元组索引列表get(episode_idx)再据此定位具体样例。answer_starts字段直接取自原始 JSON 中每个答案的answer_start字符偏移为需要答案定位监督信号的模型例如抽取式 span 预测提供了便利。此外num_examples()与num_episodes()均返回样例总数。开放问答变体OpensquadTeacherOpensquadTeacher同样继承DialogTeacher唯一区别是省略了上下文段落每条消息只保留问题文本yield (question, answers), True对应数据快照 squad_opensquad_train.yml 中可以看到text字段退化为纯粹的提问如 To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?。这适合验证没有段落时模型能否作答的消融实验或用于开放式问答场景。带标题的变体TitleTeacherTitleTeacher继承DefaultTeacher仅修改text的拼接方式将 Wikipedia 文章标题置于段落之前yield (\n.join([title, context, question]), answers), True代码注释提醒标题直接取自原始数据包含下划线作为 Wikipedia 链接的一部分即文章实际位于https://en.wikipedia.org/wiki/{TITLE}使用方可根据需要决定是否去除下划线。该教师将id设为squad_title便于在日志与指标中区分来源。整篇文档变体FulldocTeacherFulldocTeacher继承自ParlAIDialogTeacher数据不再来自官方 JSON而是来自 build.py 中下载的squad_fulldocs.tgz。它通过parlaidialogteacher_datafile指向SQuAD-fulldoc/squad_fulldocs.{train|valid}:ordered文件。从 squad_fulldoc_train.yml 快照可见其text字段包含以\n\n分隔的整篇文章多个段落随后是问题——即文档级阅读理解模型必须在跨越多个段落的整篇文档中定位答案难度显著高于单段落版本。句子级标签变体SentenceTeacher 与 FulldocsentenceTeacher这两个变体将监督信号从答案片段升级为包含答案的句子是 SQuAD 中最具特色的设计SentenceTeacher继承IndexTeacher基于官方 JSON 的段落级数据FulldocsentenceTeacher继承FulldocTeacher基于整篇文档数据。两者共享一套处理管线以SentenceTeacher为例加载 NLTK 的 punkt 英文句子切分器get_sentence_tokenizer()若本地缺失会自动nltk.download(punkt)为避免切分干扰先将答案中的.、?、!去除并同步替换回上下文对上下文切句后找出包含任一答案的句子作为labels全部句子作为label_candidatesanswer_starts记录每个标签句子在上下文中的起始字符位置。两者均支持--include-context命令行参数默认Falseagent.add_argument( --include-context, typebool, defaultFalse, helpinclude context within text instead of as a separate field, )默认情况下action 字典包含独立的context字段text仅为问题label_candidates为全部句子便于做从候选中选择正确句子的分类式任务开启后context合并进textcontext \n question并从字典中移除回归抽取式任务的输入形态。从 squad_sentence_train.yml 快照可以看到该格式的实际效果label_candidates列出段落的全部句子labels只含包含答案的那一句answer_starts给出句子起点偏移。段落抽取变体SquadQATeacherSquadQATeacher是最后一个变体继承AbstractWrapperTeacher通过_edit_action()对默认教师的输出做后处理——将text中换行之前的第一行即段落抽取出来丢弃问题部分def _edit_action(self, act: Message) - Message: passage act[text].split(\n)[0] act.force_set(text, passage) return act该变体适用于只关心段落本身的任务例如段落检索、表示学习等其类注释明确说明only the passage, and ignore the question。消息字段与数据格式总结综合各变体SQuAD 教师产出的 action 字典字段可归纳为字段含义出现于id任务标识squad/squad_title/squad-fulldoc全部text模型输入文本段落/标题 问题或仅问题全部labels标注答案字符串列表全部label_candidates候选句子列表句子级变体为全部句子sentence/fulldocsentenceanswer_starts答案/标签句子在上下文中的起始字符偏移index/sentence系列context独立上下文字段默认模式sentence系列episode_done恒为True单轮样例全部测试与质量保障任务自带完整的自动化测试 parlai/tasks/squad/test.py基于 ParlAI 的AutoTeacherTest工具类为六种教师squad、squad:index、squad:opensquad、squad:fulldoc、squad:sentence、squad:fulldocsentence分别注册测试类。测试会加载parlai/tasks/squad/test/下的 YAML 快照train/valid/test 三套齐全如squad_train.yml、squad_index_valid.yml、squad_sentence_test.yml等校验教师产出的消息格式与快照一致、样例数量正确。这套机制保证了后续任何对agents.py的修改都不会破坏数据格式兼容性也为你自定义教师时提供了可参照的测试范式。训练与评估实践在 ParlAI 中SQuAD 与其他任务共用同一套训练/评估入口只需将任务名传给-t参数# 训练以通用 seq2seq 模型为例具体超参请按实验调整 python -m parlai.scripts.train_model -t squad -m seq2seq -bs 32 -lr 1e-3 --train-predict true # 评估已有模型 python -m parlai.scripts.eval_model -t squad -mf /path/to/model_file # 交互式对话将问题作为输入观察模型在给定段落上作答 python -m parlai.scripts.interactive -t squad -mf /path/to/model_file实践要点选择教师变体即选择任务形态默认squad适合标准的抽取式问答squad:index为需要答案位置监督的模型提供answer_startssquad:sentence将问题转化为句子选择squad:fulldoc则面向文档级阅读理解数据划分datatype以train开头时加载训练集 JSON否则加载开发集测试时同样遵循 ParlAI 的train/valid/test约定依赖提醒sentence系列教师依赖 NLTK 的 punkt 分词器首次运行需要联网下载fulldoc系列会额外下载整篇文档数据包。小结SQuAD 任务是 ParlAI 任务生态中极具代表性的 QA 任务一方面它演示了如何用DialogTeacher的最小实现接入真实数据集另一方面通过IndexTeacher展示了不依赖继承、手写act()的教师写法而SentenceTeacher系列则展示了如何将原始答案重构成句子级监督信号。理解这八种变体的数据流你就能在阅读理解、开放问答、句子选择等不同实验设定间自由切换并以此为模板接入自己的 QA 数据。赞分享NLP人工智能深度学习【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址https://gitcode.com/gh_mirrors/pa/ParlAI点击查看免费下载相关推荐快速解决Windows内存不足问题Mem Reduct终极优化指南快速解决Windows内存不足问题Mem Reduct终极优化指南 你是否曾经遇到过电脑越用越慢打开程序要等好几秒多任务切换卡顿的情况这很可能是WindNLP人工智能深度学习ParlAI 中的 HotpotQA 任务多跳阅读理解数据集的加载、构建与评测实战指南ParlAI 中的 HotpotQA 任务多跳阅读理解数据集的加载、构建与评测实战指南 HotpotQA 是 ParlAI 内置的多跳问答Multi hopNLP人工智能深度学习lm-evaluation-harness 中的 squad_completion 任务基于 SQuAD 变体的零样本阅读理解评测指南lm evaluation harness 中的 squad_completion 任务基于 SQuAD 变体的零样本阅读理解评测指南 导读 squad_co人工智能模型评测AI 评测上一篇OpenCore Configurator终极指南3步完成黑苹果系统引导配置下一篇3分钟上手免费压缩包密码恢复工具完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
