反例样本的目的不是证明替换规则正确,而是主动找出会让规则失效的图片情境。做法是:先写出替换规则成立的假设,再按假设逐条设计“应该被排除”的样本,最后用这些样本检查规则会不会误伤。若反例样本先于批量执行建立,你通常能在改动前发现需要收窄的规则,而不是在图片被错误替换后才回头修补。
一个常见矛盾是:抽样检查时看起来规则没问题,批量执行后却出现一批不该被改的图片。原因通常有两种解释。
能区分这两种解释的证据是:把样本按“结构特征”分组,而不是按“看起来像不像目标”分组。如果误伤集中在某一种结构特征上,说明问题出在规则依赖的隐含条件;如果误伤分散在多种结构里,说明抽样覆盖不足,需要扩大样本来源。这一步的判断会直接决定下一步是收窄规则,还是重做抽样。
反例样本不需要很多,但必须覆盖会让规则失效的情境。可以从以下四类来源各取少量样本。
每类样本取三到五张图片即可,重点是覆盖结构差异,而不是追求数量。样本记录时同时记下页面来源、结构特征和预期结果,方便后续比对。
假设某批旧内容需要把图片说明中的旧品牌名替换为新名称。规则初步写成:在图片说明容器内查找旧品牌名并替换。
构造反例样本时,取一张来自旧合作方维护页面的图片,其说明文字结构是:图片容器内只有图片,说明文字在相邻的独立段落中。执行规则后,这张图片的说明文字没有被替换,因为它不在规则限定的容器内。
此时有两种处理方向。若这类结构在整批内容中占比很小,可以单独列出这些页面手工处理;若占比不小,就需要把规则从“容器内替换”改为“按说明文字与图片的关联关系替换”。选择哪种方向,取决于反例样本中这类结构的数量,而不是取决于规则写起来是否方便。这个判断结果会影响下一步:是继续批量执行并附带手工清单,还是先修改规则再重新跑反例样本。
替换完成后,比较改动效果时要注意,一次改动前后的差异不能直接归因于替换本身。季节变化、搜索需求波动、数据采集口径不同,都可能让前后数据出现差异。可行的做法是:
反例样本在这里的作用是:它让你在解释表现变化时,能先排除“规则误伤”这一层原因,再考虑外部因素。
如果替换范围明确限定在少数结构一致的页面,且这些页面在替换前已经逐一确认过结构,反例样本可以相应减少。反之,只要替换范围涉及多个模板、多个时期的内容或曾经由外部维护的页面,反例样本就不能省。判断标准不是替换文本有多长,而是页面结构的差异有多大。结构差异越大,反例样本越需要覆盖这些差异,否则批量执行的结果会难以解释和回退。