multiwoz v22 速度非常慢
作者: stephenroller创建于 2022年3月24日更新于 2023年4月19日
标签Help Wantednever-stale
问题描述 要加载 multiwoz v22 非常耗时。在已下载的数据情况下,在我的开发机器上,训练集需要 >200 秒才能到达 display_data。这有两个原因。## 我们在加载 TOD 数据集时并不懒惰 在我所了解的情况下,TOD 教师在枚举之前将完整的数据集加载到内存中。我认为这来自于此问题: https://GitHub.com/facebookresearch/ParlAI/blob/942952d714ebf425a5adb6483d87e562cdab1a85/parlai/core/tod/tod_agents.py#L98 请注意,我们 列出 所有的对话集,因此在 setup_data 中,我们无法享受 DialogTeacher 的懒惰生成器带来的好处: https://GitHub.com/facebookresearch/ParlAI/blob/942952d714ebf425a5adb6483d87e562cdab1a85/parlai/core/tod/tod_agents.py#L693 修复此问题将使 display_data 变得快速,因为第二个问题将不再存在。然而,n_shot 部分很复杂。## 我们在查找 multiwoz 数据库中非常不高效 multiwoz v22 具有大量代码来加载数据库,以便计算 inform。在加载数据库之后,我们需要找到与用户请求对应的条目。我们花费了大约 92% 的时间在这个方法中: https://GitHub.com/facebookresearch/ParlAI/blob/942952d714ebf425a5adb6483d87e562cdab1a85/parlai/tasks/multiwoz_v22/agents.py#L159-L162 特别是,当我们从数据库中选择时,在 https://GitHub.com/facebookresearch/ParlAI/blob/942952d714ebf425a5adb6483d87e562cdab1a85/parlai/tasks/multiwoz_v22/agents.py#L196-L205 问题在于,我们在第 203 行执行了完全线性的 SELECT 操作:我们必须明确枚举每一行并查看是否匹配我们的选项。然后,我们对每个槽和值都这样做,以持续选择。## 要修复,我们需要构建一个 (槽,值) -> 记录 ID 的索引,并从中选择(重复地减少多个条件的集合)。** 或者:如果我们可以将所有这些内容移动到 build.py 中并缓存,那么我们将在第一次加载数据集时完成所有操作,此后将永远具有快速加载。
内容来源: facebookresearch/ParlAI