假设你是一家大饭店的总厨。三天后,一百桌婚宴同时开席——鸡鸭鱼肉、冷热甜咸,全要从你手底下出去。你会第一天就让后厨开火吗?当然不会。你先把菜单摊开,按凉菜、热菜、汤羹、甜点分成四组,这叫分层;再想哪些菜可以提前备好、哪些必须等前面的工序完成,这叫编排与依赖;接着琢磨一块肉切多大、一桌菜派给哪个灶台,这叫粒度和负载均衡;最后开席前试菜,听到客人“太咸了”就调整配方,这叫迭代调整。数据标注项目是同一道菜:几十万张图要框选、几百万条文本要分类,直接铺开下发,团队一定乱成一锅粥。这篇文章教你像总厨拆菜一样拆标注任务:先分层,再编排,理顺依赖,拿捏粒度,均衡分配,最后在试点里不断调优。复杂任务从来不是硬扛出来的,而是拆出来的。

岗位关联

掌握这套任务分解方法论,你就能把几百万条的标注项目从“人海战术”变成“有序流水线”——稳定交付、少返工,这是数据标注从业者走向项目经理的关键一步。

目录
  1. 可视化演示
  2. 分层任务分解
  3. 串并行编排
  4. 依赖关系管理
  5. 粒度把控原则
  6. 负载均衡分配
  7. 迭代调整优化
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示四种结构型设计模式:适配器、装饰器、外观和组合。切换模式查看各模式的类结构关系和调用流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

适配器模式 Adapter 将不兼容接口的类适配为客户端期望的接口 适配器持有被适配者的引用并转换调用 Client → Adapter → Adaptee

分层任务分解

总厨拿到菜单的第一件事不是点火,而是把一百桌的菜分成凉菜组、热菜组、汤羹组、甜点组——每一组的难度和节奏完全不同。凉菜可以提前一晚拌好,热菜必须现炒,甜点要看烤炉脾气。要是把所有菜混在一起派给厨师,大师傅忙着切凉菜,新手却被派去雕龙画凤,后厨一定鸡飞狗跳。

标注任务也一样。几百万条数据摆在眼前,最先做的不是“分人头”,而是分层。分层有两个维度:按难度,把任务分成“简单机械型”(如去重、粗筛)、“规则判断型”(如按规范给文本打标签)、“专业决策型”(如医疗影像判读);按类型,把任务分成分类、框选、转写、语义分割等不同工种。不同层级的任务,需要的技能和心流状态完全不同。

分层之后,每个层级的任务量需要汇总,才能决定排多少人力。假设共有 L 层,每层有 N_l 个子任务,第 i 个子任务含 m 个样本、单样本难度系数 d,那么这一层的总工作量就是加权和。这个公式让你在分层完成后,能快速估算每一层的“份量”,避免把最重的活压给最弱的人。

分层就像婚宴菜单分组:本质是把“同频”的任务归到一起,让合适的人做合适的事。分完层,后厨的节奏才立得住——接下来要解决的,是这些小组之间怎么排顺序、怎么同时开火。

W=∑l=1L∑i=1Nlml,i×dl,iW = \sum_{l=1}^{L} \sum_{i=1}^{N_l} m_{l,i} \times d_{l,i}
通俗说明:总工作量 = 把每一层每个子任务的“样本数 × 难度系数”全部加起来。难度系数就像菜品的“火候要求”——宫中红烧肉和食堂大锅饭的难度不是一个量级。
  1. 层级序号l 表示第几层,L 是总层数,比如凉菜组、热菜组共 4 层。
    l=1,2,…,Ll = 1, 2, \dots, L
  2. 层内子任务N_l 表示第 l 层里拆出了几个子任务,i 用来遍历它们。
    i=1,2,…,Nli = 1, 2, \dots, N_l
  3. 样本量m_{l,i} 是第 l 层第 i 个子任务的样本条数,比如“框选车辆”分了 2 万张图。
    ml,i=20000m_{l,i} = 20000
  4. 难度系数d_{l,i} 是单样本难度,简单任务 d=1,医学判读 d=5,难度越大单位耗时越长。
    dl,i∈{1,3,5}d_{l,i} \in \{1, 3, 5\}
  5. 累加求和Σ 表示把所有层的所有子任务全部加起来,得到总工作量 W,单位是“标准样本当量”。
    W=∑l=1L∑i=1Nlml,i×dl,iW = \sum_{l=1}^{L} \sum_{i=1}^{N_l} m_{l,i} \times d_{l,i}

串并行编排

分成四组后,总厨开始排“作战时序”。凉菜可以提前一天拌好放冰箱,多个组同时开工——这是并行;可热菜必须在客人入席后才下锅,而且“先蒸后炒”的顺序一步错不得——这是串行。婚宴的节奏感,全靠编排“哪些并行、哪些串行”。

标注任务同样有这两种编排。串行编排:后一个任务的输入是前一个任务的输出,比如“先做图像预检,再框选车辆,再做属性标注”。并行编排:互不依赖的任务分给不同小组同时推进,比如“文本分类”和“语音转写”各干各的,谁也不等谁。

实践中绝大多数项目是混合编排:一部分流程串行、一部分并行。这时要回答一个关键问题:加多少人才能让整体更快?阿姆达尔定律给出了答案:假设任务原耗时 T,其中可并行部分占 P,串行部分占 1-P,投入 N 倍人力后,新耗时 = 串行部分 + 并行部分/N。加速比 S 的公式如下:

编排的本质是回答“谁先谁后、谁等谁、谁可以同时干”。婚宴上凉菜先行、热菜殿后、甜点见机行事;标注项目里则要画一张“任务排期图”。但排期之前,必须先搞清楚任务之间的依赖——这是下一节的故事。

S=1(1−P)+PNS = \frac{1}{(1 - P) + \frac{P}{N}}
通俗说明:加速比的上限被“必须排队等的部分”锁死。哪怕你请一百个帮厨,只要有一成工作是必须等的,加速比也永远超不过 10 倍。
  1. 可并行比例P 是可并行的工作量占比。比如 80% 的任务可以多人同时做,P=0.8。
    P=0.8P = 0.8
  2. 并行残留耗时P/N 表示把可并行部分分给 N 个人后,这段还剩多少时间。
    PN=0.84=0.2\frac{P}{N} = \frac{0.8}{4} = 0.2
  3. 串行部分1-P 是无论如何都省不掉的等待时间,它是加速比天花板。
    1−P=0.21 - P = 0.2
  4. 加速比S 是原耗时除以新耗时。代入 P=0.8、N=4,得 S=1/0.4=2.5,而不是 4。
    S=10.2+0.2=2.5S = \frac{1}{0.2 + 0.2} = 2.5

依赖关系管理

为什么有的菜急不得?因为食材有自己的脾气。鱼要腌够两小时才入味,面团要发到两倍大才能进烤箱。总厨不能因为客人催就跳过腌制——这就是厨房里的“依赖关系”。标注任务也一样:有些任务天生必须排在别人后面。

依赖管理的三件事:第一,前置条件检查——确认前置任务的产出物(预检结果、规范定稿、预标注结果)已经就位;第二,依赖关系图——把任务画成一张有向图,箭头从“前置”指向“后置”,圈出谁等谁;第三,关键路径识别——找出一条耗时最长的依赖链,它就是决定整个项目何时交付的“命脉”。

计算最早开始时间时,每个任务 j 的最早开始时间 ES_j,等于它所有前置任务中“最晚完成”的那个时刻。这个“最晚完成”就是 max 的由来。公式如下:

依赖管理就像总厨心里那张“先后卡片”:腌鱼的卡片上写着“必须先腌后蒸”。项目里如果无视依赖,返工、堵塞甚至数据报废都会接连出现。理顺依赖后,下一步要决定的是——每个任务到底拆多大一块。

ESj=max⁡i∈pred(j)(ESi+di)ES_j = \max_{i \in \text{pred}(j)} \left( ES_i + d_i \right)
通俗说明:一条流水线上,某道工序能开工的最早时刻,是所有前置工序里收工最晚的那个时刻——就像热菜必须等最慢的那道配菜切完。
  1. 前置任务集合pred(j) 是任务 j 的所有前置任务,比如“属性标注”的前置是“框选车辆”。
    pred(j)={前置A,前置B}\text{pred}(j) = \{ \text{前置A}, \text{前置B} \}
  2. 前置完成时刻ES_i + d_i 表示前置任务 i 的最早完成时刻(开始时间 + 工期)。
    ESi+diES_i + d_i
  3. 取最大值max 表示多个前置里最晚的那个完成时刻,才是本任务能开工的时间。
    max⁡(… )\max(\dots)
  4. 递推计算ES_j 算出后,再往后推它的后继任务,直到所有任务算完,末尾的最大值就是总工期,对应链条即关键路径。
    ESj=max⁡i∈pred(j)(ESi+di)ES_j = \max_{i \in \text{pred}(j)} (ES_i + d_i)

粒度把控原则

那么问题来了:一份红烧肉,是把整块肉扔进锅里,还是切成肉丁?切太大不入味,切太小一炖就碎,会做饭的人都懂“恰到好处”。总厨给切配师傅的指令从来不是“随便切”,而是“三厘米见方”。标注任务的“切配”,就是分解粒度:每个任务包放多少样本。

粒度太粗,一个包几万条数据,标注员干三天,中途返工就全盘重来;粒度太细,一个包只有几十条,建包、写说明、验收的固定动作反而吃掉大量时间。这两个方向的代价互相拉扯:包越小,固定准备成本 a 按包数翻倍;包越大,标注员长期浸在同一个包里,前后样本高度相似,注意力衰减、上下文流失的成本 b 也在累积。

把两种代价放进同一个公式。设总样本量 Q,每个任务包粒度 q(条数),则包数=Q/q。总代价 = 每包固定准备成本 a × 包数 + 单位样本流失成本 b × (q/2)。求导为零得到最优粒度:

粒度的把控是“手感活”,但手感背后有公式。切肉如此、拆包亦如此。粒度定好后,任务终于可以“上桌”了——这时要把任务分给标注员,考验的是另一道功夫:别让一个人忙死、一个人闲死。

q∗=2aQbq^* = \sqrt{\frac{2aQ}{b}}
通俗说明:最优粒度 = “2 × 建包固定成本 × 总样本量 ÷ 上下文流失成本” 再开根号。切肉时“块数×调味次数”和“块大不入味”两边拉到平衡,就是那三厘米。
  1. 固定准备成本a 是每个任务包的固定开销,包括建包、写规范、分配、验收。
    a=每包固定开销a = \text{每包固定开销}
  2. 总样本量Q 是整个任务的样本总数。包数 = Q/q,包越多,a×包数越大。
    包数=Qq\text{包数} = \frac{Q}{q}
  3. 流失成本b 是单位样本因上下文割裂产生的额外成本,q/2 表示平均排队等待的样本量。
    b×q2\frac{b \times q}{2}
  4. 最优解对总代价求导并令导数为零,解得 q^*。直觉是:a 越大越该切大块,b 越大越该切小块。
    q∗=2aQbq^* = \sqrt{\frac{2aQ}{b}}

负载均衡分配

婚宴后厨里,十个灶台不可能同样忙。爆炒师傅火力全开,蒸箱师傅却要等水开。总厨必须不断地“匀菜”:把爆炒的菜匀给空闲的炖锅,把提前备好的菜塞进空灶。后厨的吞吐量,不取决于最快的厨师,而取决于最闲的师傅有没有活干。

标注任务分配讲究同样的道理——负载均衡。先说能力画像:每个标注员的产能 = 速度 × 可用时间。小张一天能做 600 条,小李只能做 400 条——他们的产能权重就是 6:4。如果平均分配,小张早早干完干等,小李却越积越多,整个团队的进度被“最慢的短板”拖住。

做法是按权重分配。团队产能权重总和 Σv_j,那么标注员 i 分到的样本量 q_i = Q × v_i / Σv_j。公式如下:

均衡分配不是“数学公平”而是“效果公平”。就像总厨按灶台火力分菜,火力大的多接菜,最终所有灶台同时收工。不过,人是会变的——有的标注员这周状态下滑,有的新任务更难。所以最后一环:边做边调。

qi=Q×vi∑jvjq_i = Q \times \frac{v_i}{\sum_{j} v_j}
通俗说明:把总任务量按每个人产能占团队总产能的比例切成一块块——快手多吃、慢手少吃,但不让任何人空转。
  1. 总任务量Q 是本轮要分配的样本总数,比如 10 万条。
    Q=100000Q = 100000
  2. 个人产能v_i 是标注员 i 的产能权重,等于速度乘可用工时。
    vi=速度×可用时间v_i = \text{速度} \times \text{可用时间}
  3. 总产能Σv_j 把所有标注员的权重加起来,得到团队总产能。
    ∑jvj\sum_{j} v_j
  4. 按比例切分v_i/Σv_j 是个人占比,乘 Q 即得该分到手的样本量。
    qi=Q×vi∑jvjq_i = Q \times \frac{v_i}{\sum_j v_j}

迭代调整优化

婚宴开席前,总厨一定会先试菜。尝一口,咸了,就调整盐的比例;看一桌,上菜顺序不对,就重新排流程。真正的后厨高手不会把菜单当成圣旨,而是把试菜反馈当成下一次调整的起点。标注项目同样没有“一次性定稿”。

迭代调整的老三样:小步试点——先拆 5% 样本完整跑一遍,估算真实工期和各层难度,校准粒度;质量数据回流——用抽查合格率、返工率、交付延迟这些信号,找出“哪个层级的任务被高估或低估了,谁的质量在波动”;持续拆解优化——按反馈调整后续的分配权重、依赖顺序,甚至重新分层。

调整的抓手是一个反馈公式。设标注员 i 的本轮抽查合格率 r_i,团队平均合格率 r̄,上一轮产能权重 v_i,调整步长 α,那么下一轮权重:

迭代的本质是“让计划向现实低头”。菜单不是不能改,而是在试菜反馈后越改越顺。分层、编排、依赖、粒度、均衡五步走完,再靠第六步不断回炉——一套完整的任务分解闭环就转起来了。

vi′=vi×(1+α×(rˉ−ri))v_i' = v_i \times \left(1 + \alpha \times (\bar{r} - r_i)\right)
通俗说明:合格率低于平均水平的标注员,下一轮少分点任务;高于平均的多分点。这就像总厨根据试菜反馈决定下一桌菜多交给哪位师傅。
  1. 合格率r_i 是标注员 i 的抽查合格率,比如 0.85 表示抽检 100 条里 85 条合格。
    ri=0.85r_i = 0.85
  2. 团队均值r̄ 是所有人合格率的平均值,作为“及格线”参照。
    rˉ=1M∑i=1Mri\bar{r} = \frac{1}{M}\sum_{i=1}^{M} r_i
  3. 偏离量与步长r̄ - r_i 是偏差,α 是步长(通常 0.1~0.3),决定调整力度。
    α×(rˉ−ri)\alpha \times (\bar{r} - r_i)
  4. 权重更新偏差为正(高于平均)则 v_i 变大,偏差为负则变小,从而动态平衡负载与质量。
    vi′=vi×(1+⋯ )v_i' = v_i \times (1 + \cdots)

AI 应用场景

自动驾驶感知数据标注平台

阶段:数据准备与任务编排

解决的问题:千万帧图像的标注任务包含车辆框选、车道线、语义分割等不同难度类型。直接下发会让新手卡在语义分割上,专家又被简单框选浪费时间。通过分层 + 编排,简单框选走并行流水线,高难语义分割走专家小组,再按产能权重动态均衡分配,避免任务堵塞。

具体案例:某自动驾驶公司 500 万帧数据,项目经理先按难度分三层,用依赖图把“框选→属性→分割”串成关键路径,其余任务并行推进,最终提前 3 天交付,抽检合格率 98%。

电商客服语料标注

阶段:标注策略设计

解决的问题:几十万条客服对话要标注“意图 + 情感 + 实体”,三者存在依赖——先识别实体,才能判断情感对象。用依赖关系把实体识别设为前置任务,情感标注串行依赖;按语言能力加权分配,英语好的做英文语料,每周用抽样合格率迭代调整权重。

具体案例:某电商团队用 10% 样本试点,发现“售后意图”难度被低估,重新调整分层后,返工率从 12% 降到 4%,全量交付周期缩短一周。

医疗影像标注

阶段:数据质量控制

解决的问题:高年资医生稀缺,全部用专家会大量积压。把任务拆成“病灶初筛(住院医)+ 疑难复核(专家)”两层,先粗筛再精标,并用合格率反馈公式动态调整专家介入的比例,让稀缺专家只处理疑难样本。

具体案例:某三甲医院影像标注项目,初筛层三个月消化 3 万张 CT,专家复核层只占 15% 样本,整体精度达 97%。

Python 演示

python63 行
# -*- coding: utf-8 -*-"""大规模标注任务分解: 依赖编排 + 负载均衡 + 迭代调整"""import math  class AnnoTask:    """一个标注子任务, 记录样本量、难度与前置依赖"""     def __init__(self, name, samples, level, deps=None):        self.name = name            # 任务名        self.samples = samples      # 样本量        self.level = level          # 难度: 1=简单 2=中等 3=困难        self.deps = deps or []      # 前置任务名列表        self.dur = samples * level / 100.0   # 估算工期     def __repr__(self):        return "{}({}样本, 难度{})".format(self.name, self.samples, self.level)  def key_path(tasks):    """按拓扑顺序算最早开始时间, 返回总工期与关键路径尾节点"""    dur = {t.name: t.dur for t in tasks}    es = {}    for t in tasks:        es[t.name] = max((es[d] + dur[d] for d in t.deps), default=0)    finish = {n: es[n] + dur[n] for n in es}    critical = max(finish, key=lambda n: finish[n])    return max(finish.values()), es, critical  def balance_assign(tasks, weight):    """按产能权重把每个子任务的样本分给标注员"""    total = sum(weight.values())    plan = {}    for t in tasks:        plan[t.name] = {w: round(t.samples * wv / total)                        for w, wv in weight.items()}    return plan  def adjust_weight(weight, acc, alpha=0.2):    """迭代调整: 合格率低于平均的标注员, 下次少分任务"""    avg = sum(acc.values()) / len(acc)    for w in acc:        weight[w] *= 1 + alpha * (acc[w] - avg)    return weight  if __name__ == "__main__":    tasks = [        AnnoTask("图像预检", 2000, 1),        AnnoTask("框选车辆", 2000, 1, ["图像预检"]),        AnnoTask("属性标注", 1000, 2, ["框选车辆"]),        AnnoTask("语义分割", 500, 3, ["框选车辆"]),    ]    total, es, crit = key_path(tasks)    print("total days:", round(total, 2))    print("earliest start:", es)    print("critical tail:", crit)    weight = {"Zhang": 60, "Li": 40, "Wang": 30}    print("plan:", balance_assign(tasks, weight))    acc = {"Zhang": 0.95, "Li": 0.82, "Wang": 0.90}    print("new weights:", adjust_weight(weight, acc))
目的:用 4 个标注任务演示“关键路径计算 + 按产能加权分配 + 按合格率迭代调权”的完整分解闭环。
  1. self.deps = deps or []每个任务记录自己的前置依赖,像菜谱里“先腌后蒸”的顺序卡。
  2. es[t.name] = max((es[d] + dur[d] for d in t.deps), default=0)最早开始时间 = 所有前置里最晚完成的那一个。
  3. finish = {n: es[n] + dur[n] for n in es}完成时间 = 最早开始 + 工期。
  4. critical = max(finish, key=lambda n: finish[n])取最大完成时间对应的任务,作为关键路径的尾节点。
  5. plan[t.name] = {w: round(t.samples * wv / total) for w, wv in weight.items()}按产能权重把样本分给每个标注员。
  6. weight[w] *= 1 + alpha * (acc[w] - avg)合格率低于平均就调低权重,高于平均就调高权重。
  7. AnnoTask("语义分割", 500, 3, ["框选车辆"])语义分割属于困难任务,且必须等框选任务完成。

常见误区

误区标注任务拆得越小越好。每个包只放 10 条数据,大家领任务快、完成快,肯定更高效?

正解拆太细会让“建包、写说明、抽查验收”这类固定开销成倍增加,标注员还要反复读说明、切换上下文。就像婚宴把一只鸡切成 100 粒肉丁——每粒都要单独摆盘、单独调味,反而更慢。要用粒度平衡公式 q* = √(2aQ/b),让固定准备成本 a 和上下文流失成本 b 在边际上相等。

为何常见:生活中“小块 = 易消化”的直觉太强,忽略了管理动作本身的固定成本。

误区只要把任务全部并行,多找几倍的人,工期就能成倍压缩。

正解阿姆达尔定律指出,串行部分的耗时无法被并行消除。比如婚宴上鱼要等腌制 2 小时才能蒸——你请再多厨师,腌制这 2 小时也省不掉。依赖链上的任务必须先算清前置,再谈并行,否则只是把等待时间藏了起来。

为何常见:只看到人多力量大,忽略了任务间“先后顺序”这个物理限制。

误区任务按人头平均分配最公平,每人 500 条,谁也不吃亏。

正解标注员能力差异巨大:熟练工一小时 60 条,新手 30 条。平均分配必然让熟练工闲置、新手堆积,出现“忙的忙死、闲的闲死”。正确的公平是按产能权重分配:q_i = Q × v_i / Σv_j,让每个人的负载率相当,而不是拿到的条数一样。

为何常见:把“数量公平”误当成“效果公平”,忽略了个体产能差异。

误区任务方案定稿后不要再改,改来改去会让团队失去信任。

正解大规模标注充满不确定性:难度预估可能偏差、质量可能不达标。正确做法是小步试点,先跑 5% 样本,用抽查合格率和返工率回流数据,再动态调整分工和粒度。就像婚宴开席前试菜,味道不对当然要改配方,而不是硬着头皮上菜。

为何常见:怕变化暴露管理失误,把“计划稳定性”和“拒绝反馈”混为一谈。

面试题

Q1. 拆分大型标注任务时,第一步最应该做什么?

单选题 · easy

  • A.按难度和类型给任务分层← 正确答案
  • B.按人头平均分配样本量
  • C.一次性拆到最小颗粒度
  • D.立刻开发自动化标注脚本

答案:A。分解的第一步是分层:按难度和类型把任务归类,再匹配合适的人,就像总厨先给婚宴菜单分组。平均分配忽略了难度差异,一次性拆碎跳过了分层,先写脚本属于工具先行,都没抓住“任务结构”这个关键。

Q2. 两个标注任务存在“必须先完成 A 才能开始 B”的关系,这种编排方式叫?

单选题 · easy

  • A.串行编排← 正确答案
  • B.并行编排
  • C.混合编排
  • D.随机编排

答案:A。串行编排要求后置任务等待前置任务完成,A 正确。并行编排是大家各干各的,混合编排是串并结合,随机编排是乱序,都不符合“必须先完成 A”的约束。

Q3. 阿姆达尔定律中,当可并行比例 P=0.8、并行度 N=4 时,理论加速比最接近?

单选题 · mid

  • A.2.5← 正确答案
  • B.3.2
  • C.4.0
  • D.1.5

答案:A。代入公式 S=1/((1-0.8)+0.8/4)=1/(0.2+0.2)=2.5。注意并行度不是加速比,C 的 4.0 是典型陷阱;B、D 没有正确代入公式。

Q4. 以下哪些属于标注任务之间的依赖关系来源?

多选题 · mid

  • A.前置任务产出后续必需标签← 正确答案
  • B.两个任务共用同一个标注工具
  • C.任务名称在列表中紧挨着排
  • D.后置任务需前置任务结果验收← 正确答案

答案:AD。A 和 D 表示“产出物先后传递”,是真正的依赖关系;B 是共享工具、C 是列表顺序,都不是必须等待的前置条件。判断依赖要看“谁必须等谁”,而不是“谁和谁有关系”。

Q5. 负载均衡分配中,“产能权重”最有代表性的含义是?

单选题 · mid

  • A.速度与可用时间的乘积← 正确答案
  • B.工作年限与资历深浅
  • C.工位数量与排班安排
  • D.工资水平与部门大小

答案:A。产能权重 = 速度 × 可用时间,代表一个标注员在一段时间内能完成的合格工作量。工作年限、工位、工资都不直接决定产能,属于干扰项。

Q6. 分解粒度公式 q*=√(2aQ/b) 中,b 表示什么?

单选题 · hard

  • A.单位样本上下文流失成本← 正确答案
  • B.每个任务的固定准备成本
  • C.标注员的每小时工资水平
  • D.项目总预算金额上限

答案:A。公式中 b 是单位样本因上下文割裂造成的流失成本,它决定粒度该切多细。固定准备成本是 a,工资和预算是无关干扰项。

Q7. 任务粒度太细会带来哪些典型后果?

多选题 · mid

  • A.建包和验收的固定开销暴涨← 正确答案
  • B.标注员频繁切换上下文← 正确答案
  • C.并行度变得更高更灵活
  • D.任务依赖关系必然全部消失

答案:AB。任务拆太细会成倍增加建包、验收等固定开销,也让标注员频繁切换上下文,A 和 B 正确。并行度高是粒度适中的收益而非过细的收益;依赖不会因拆细而消失,所以 C、D 错。

Q8. 任务依赖图中,“关键路径”指的是?

单选题 · easy

  • A.耗时最长的依赖链路径← 正确答案
  • B.样本量最大的任务链路
  • C.标注员人数最多的路径
  • D.出错率最高的那一条路

答案:A。关键路径是整个依赖图中耗时最长的链路,它决定项目最早完工时间。样本量大、人数多、出错率高都不是“关键路径”的定义。

Q9. 迭代调整中,某标注员合格率低于团队平均时,权重调整方向是?

单选题 · hard

  • A.调低权重减少任务分配← 正确答案
  • B.调高权重多给锻炼机会
  • C.保持权重不变继续观望
  • D.立即淘汰该名标注员

答案:A。反馈公式 v_i'=v_i(1+α(r̄-r_i)) 中,合格率低于平均值时偏差为负,权重应调低、少分任务;也不是立即淘汰,而是给机会调整。

Q10. 以下哪些做法符合“小步试点”原则?

多选题 · hard

  • A.先拆 5% 样本试跑完整流程← 正确答案
  • B.用试点数据校准工期与粒度← 正确答案
  • C.一次性拆完全部任务再开工
  • D.根据试点返工率调整分工← 正确答案

答案:ABD。小步试点要求先拿一小批样本全流程试跑,用试点反馈校准工期、粒度与分工,A、B、D 正确。一次性拆完全部任务再开工违背了“小步”原则,所以 C 不选。