关于构建测试集的思考
读到一篇关于构建测试集的文章,对我有一定的启发,在此从个人的角度,总结一下对构建测试集的理解,以及记录对该文章的思考。
结合文章与个人的经验,我想测试集构建可以满足以下几个原则:
- 导向性,有明确的目标导向,在某个的需求范围内,要测到自己希望的结果。比如文生图,如果模型功能仅支持4:3或这3:4的功能,那么关于其他比例的query要尽可能的少,要测试他能不能做到我们定义的功能。
- 真实性,真实场景中常见的,贴近用户的,占比要高。还是用文生图为比喻,但是我们的场景是嵌入到某个语音助手的文生图功能。那么用户真实的query,大部分一定是简洁的,名词性的描述。那么此类的占比就要高。
- 全面性,数据量要充足,各种场景要覆盖到。仍然是文生图,全面不仅仅指要覆盖用户可能说的各种类型的query,也有针对功能的全面性,比如生图的各种元素、实体等。
- 准确性,要保证数据本身与数据标注的质量。如果是对话系统,那么高质量的query肯定来自于用户真实的回流数据,数据标注的话当然是人工标注,人工质检。
对于文章中作者提到的以下观点,我一开始有些疑惑:
- 首先,从日志中随机拿出足量query。
- 然后,用先有待测的算法进行跑这批query。
- 抽取算法认为是正类的部分,就是测试集。
- 跟进标注,完成准确率评估。
对于第三点,我的第一想法就是,这样一来,不就没法算召回率了吗?
后面看到了评论区里有人提出了同样的疑问,作者回答如下:
召回率没展开聊而已。正好补充下,开放域搜索,召回率一般按照关键词捞日志,产品需求拓展,或者是降低置信度来挖掘一批,送人工标注,来实现召回集的构建,专门用来评估召回率,算法召回量除以召回集量。
对此,我的理解是:作者分别构建测试集与召回集来计算准确率和召回率。对于开放域搜索,召回率很重要,模型搜索返回的内容越全面越好,因此单独构建召回集来评判召回率更加符合功能定位。
但是之前的问题仍然存在:都已经是正例了,还怎么测试呢?
可以这样理解:这里抽取算法认为是真类的部分,只是一个初筛,得到数据后,还需要进行比如实体标注等,来测试模型识别识别的准确率,这样就类似前文提到的功能导向性,在某个需求范围,此时过一遍算法,就是该模型支持的功能,然后再针对性的对需求范围内的query,进行进一步测试。