分类分配
根据标注者展示的专业能力将标注项目路由给标注者。
基于分类的分配
基于分类的分配根据标注者展示的专业能力自动将标注实例匹配给标注者。标注者在培训阶段接受特定类别问题的评估,只会收到他们已获资格的类别的实例。
概述
基于分类的分配系统工作流程如下:
- 数据标记:数据文件中的实例被标记了类别
- 培训评估:培训问题也被标记了类别
- 表现追踪:系统在培训期间追踪每个类别的准确率
- 资格认定:达到准确率阈值的用户被"认定合格"
- 分配:用户只会收到他们合格类别的实例
配置
基本设置
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配置选项
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
enabled | boolean | true | 启用/禁用分类分配 |
qualification.source | string | "training" | 来源:"training"、"prestudy" 或 "both" |
qualification.threshold | float | 0.7 | 认定合格的最低准确率(0.0-1.0) |
qualification.min_questions | integer | 1 | 每个类别的最少问题数 |
fallback | string | "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..."
}
]
}资格认定工作原理
培训期间
当用户回答培训问题时:
- 系统记录每个问题的类别
- 对于每个类别,追踪:
- 已回答的总问题数
- 正确回答的数量
- 准确率(正确/总数)
培训完成后
当用户通过培训时:
- 计算每个类别的准确率
- 同时满足阈值和最少问题数的类别被添加到"合格类别"
- 资格在会话期间持续有效
示例
如果阈值为 0.7(70%)且最少问题数为 2:
| 类别 | 问题数 | 正确 | 准确率 | 是否合格? |
|---|---|---|---|---|
| 经济学 | 3 | 3 | 100% | 是 |
| 科学 | 2 | 1 | 50% | 否(低于阈值) |
| 体育 | 1 | 1 | 100% | 否(低于最少问题数) |
用户只会收到"经济学"实例。
用例
专家路由
将专业内容路由给合格的标注者:
- 医疗文本给具有医学知识的标注者
- 法律文件给理解法律术语的人
- 技术内容给具有技术专长的人
质量控制
通过只将内容分配给合格个人来确保质量:
- 标注者在接收真实工作前证明能力
- 不同内容类型有不同的质量阈值
工作量分配
根据专业能力分配工作:
- 高复杂度项目给专家标注者
- 通用项目给所有标注者
动态专业模式
动态专业模式在标注过程中实现即时评估,无需金标准培训数据:
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动态模式工作原理
- 初始状态:所有标注者对所有类别的初始专业度为中性(0.5)
- 概率分配:专业度较高的类别有更高的分配概率
- 后台处理:定期计算共识并更新专业度分数
- 专业度更新:与共识一致时分数提高,不一致时降低
配置选项
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
agreement_method | string | "majority_vote" | 如何计算共识 |
min_annotations_for_consensus | integer | 2 | 计算前的最少标注数 |
learning_rate | float | 0.1 | 专业度分数变化的速度 |
base_probability | float | 0.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()故障排除
用户未被分配实例
- 检查用户是否有合格类别(审查培训表现)
- 这些类别中是否有未标注的实例?
fallback是否设置正确?
类别未被追踪
- 验证
item_properties中是否设置了category_key - 培训实例是否有
category字段 category_assignment.enabled是否为true
延伸阅读
有关实现细节,请参阅源代码文档。