Skip to content

分类分配

根据标注者展示的专业能力将标注项目路由给标注者。

基于分类的分配

基于分类的分配根据标注者展示的专业能力自动将标注实例匹配给标注者。标注者在培训阶段接受特定类别问题的评估,只会收到他们已获资格的类别的实例。

概述

基于分类的分配系统工作流程如下:

  1. 数据标记:数据文件中的实例被标记了类别
  2. 培训评估:培训问题也被标记了类别
  3. 表现追踪:系统在培训期间追踪每个类别的准确率
  4. 资格认定:达到准确率阈值的用户被"认定合格"
  5. 分配:用户只会收到他们合格类别的实例

配置

基本设置

yaml
# Enable category-based assignment strategy
assignment_strategy: category_based
 
# Configure category key in item_properties
item_properties:
  id_key: id
  text_key: text
  category_key: category  # Field containing category
 
# Category assignment settings
category_assignment:
  enabled: true
  qualification:
    source: training      # Where qualification comes from
    threshold: 0.7        # 70% accuracy required
    min_questions: 2      # At least 2 questions per category
  fallback: uncategorized # What to do if user qualifies for nothing

配置选项

选项类型默认值描述
enabledbooleantrue启用/禁用分类分配
qualification.sourcestring"training"来源:"training"、"prestudy" 或 "both"
qualification.thresholdfloat0.7认定合格的最低准确率(0.0-1.0)
qualification.min_questionsinteger1每个类别的最少问题数
fallbackstring"uncategorized"用户未获得任何资格时的行为

回退选项

  • uncategorized:分配没有类别的实例
  • random:从所有剩余实例中随机分配
  • none:不分配任何实例

数据格式

实例数据

在数据文件中包含类别字段:

json
{"id": "econ_001", "text": "Market analysis...", "category": "economics"}
{"id": "sci_001", "text": "Research findings...", "category": "science"}
{"id": "multi_001", "text": "Interdisciplinary...", "category": ["economics", "science"]}
{"id": "general_001", "text": "General content...", "category": null}

培训数据

培训实例应包含类别:

json
{
  "training_instances": [
    {
      "id": "train_econ_1",
      "text": "Question about economic concepts...",
      "category": "economics",
      "correct_answers": {"topic": "Economics"},
      "explanation": "This is an economics topic because..."
    }
  ]
}

资格认定工作原理

培训期间

当用户回答培训问题时:

  1. 系统记录每个问题的类别
  2. 对于每个类别,追踪:
    • 已回答的总问题数
    • 正确回答的数量
    • 准确率(正确/总数)

培训完成后

当用户通过培训时:

  1. 计算每个类别的准确率
  2. 同时满足阈值和最少问题数的类别被添加到"合格类别"
  3. 资格在会话期间持续有效

示例

如果阈值为 0.7(70%)且最少问题数为 2:

类别问题数正确准确率是否合格?
经济学33100%
科学2150%否(低于阈值)
体育11100%否(低于最少问题数)

用户只会收到"经济学"实例。

用例

专家路由

将专业内容路由给合格的标注者:

  • 医疗文本给具有医学知识的标注者
  • 法律文件给理解法律术语的人
  • 技术内容给具有技术专长的人

质量控制

通过只将内容分配给合格个人来确保质量:

  • 标注者在接收真实工作前证明能力
  • 不同内容类型有不同的质量阈值

工作量分配

根据专业能力分配工作:

  • 高复杂度项目给专家标注者
  • 通用项目给所有标注者

动态专业模式

动态专业模式在标注过程中实现即时评估,无需金标准培训数据:

yaml
category_assignment:
  enabled: true
  dynamic:
    enabled: true
    agreement_method: majority_vote
    min_annotations_for_consensus: 2
    learning_rate: 0.1
    update_interval_seconds: 60
    base_probability: 0.1

动态模式工作原理

  1. 初始状态:所有标注者对所有类别的初始专业度为中性(0.5)
  2. 概率分配:专业度较高的类别有更高的分配概率
  3. 后台处理:定期计算共识并更新专业度分数
  4. 专业度更新:与共识一致时分数提高,不一致时降低

配置选项

选项类型默认值描述
agreement_methodstring"majority_vote"如何计算共识
min_annotations_for_consensusinteger2计算前的最少标注数
learning_ratefloat0.1专业度分数变化的速度
base_probabilityfloat0.1任何类别的最低概率

API 参考

TrainingState 方法

python
# Record an answer for category tracking
training_state.record_category_answer(categories=['economics'], is_correct=True)
 
# Get score for a specific category
score = training_state.get_category_score('economics')
# Returns: {'correct': 3, 'total': 4, 'accuracy': 0.75}
 
# Get qualified categories based on threshold
qualified = training_state.get_qualified_categories(threshold=0.7, min_questions=2)

UserState 方法

python
# Add a qualified category
user_state.add_qualified_category('economics', score=0.85)
 
# Check if user is qualified for a category
is_qualified = user_state.is_qualified_for_category('economics')
 
# Get all qualified categories
categories = user_state.get_qualified_categories()

故障排除

用户未被分配实例

  1. 检查用户是否有合格类别(审查培训表现)
  2. 这些类别中是否有未标注的实例?
  3. fallback 是否设置正确?

类别未被追踪

  1. 验证 item_properties 中是否设置了 category_key
  2. 培训实例是否有 category 字段
  3. category_assignment.enabled 是否为 true

延伸阅读

有关实现细节,请参阅源代码文档