카테고리 기반 배정
Potato에서 입증된 전문성을 기준으로 어노테이션 인스턴스를 적합한 어노테이터에게 배정합니다. 카테고리 기반 배정 규칙과 역할 기반 필터링을 구성합니다.
카테고리 기반 배정은 어노테이터가 입증한 전문성을 기준으로 어노테이션 인스턴스를 자동으로 매칭합니다. 어노테이터는 훈련 단계에서 카테고리별 문항으로 평가되며, 자격을 갖춘 카테고리의 인스턴스만 받게 됩니다.
개요
카테고리 기반 배정 시스템은 다음과 같이 동작합니다.
- 데이터 태깅: 데이터 파일의 인스턴스에 카테고리를 태깅합니다
- 훈련 평가: 훈련 문항에도 카테고리를 태깅합니다
- 성과 추적: 시스템이 훈련 중에 카테고리별 정확도를 추적합니다
- 자격 부여: 임계 정확도를 충족한 사용자는 "자격을 갖춘" 상태가 됩니다
- 배정: 사용자는 자격을 갖춘 카테고리의 인스턴스만 받습니다
설정
기본 설정
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" | 사용자가 자격을 얻지 못할 때의 동작 |
Fallback 옵션
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%)이고 min_questions가 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인지 확인합니다
더 읽어보기
구현 세부 사항은 원본 문서를 참고하세요.