ICL 라벨링
Potato에서 인컨텍스트 학습을 사용해 LLM이 인스턴스를 미리 라벨링하게 한 다음 모호한 항목을 사람 검증으로 라우팅하여, 루프 안의 AI로 어노테이션을 확장합니다.
Potato의 ICL(In-Context Learning, 인컨텍스트 학습) 라벨링 기능은 신뢰도 높은 사람 어노테이션을 인컨텍스트 예시로 사용하여 LLM이 나머지 데이터를 라벨링하도록 안내함으로써 AI 지원 어노테이션을 가능하게 합니다. 시스템은 LLM의 신뢰도를 추적하고 예측을 사람에게 다시 라우팅하여 검증합니다.
개요
ICL 라벨링 시스템:
- 신뢰도 높은 예시 수집: 어노테이터가 동의하는 인스턴스(예: 80% 이상 동의)를 식별합니다
- LLM으로 라벨링: 예시를 사용해 LLM이 라벨링되지 않은 인스턴스를 라벨링하도록 프롬프트합니다
- 신뢰도 추적: 각 예측에 대한 LLM 신뢰도 점수를 기록합니다
- 정확도 검증: LLM이 라벨링한 인스턴스의 샘플을 사람의 블라인드 검증으로 라우팅합니다
- 지표 보고: 검증 결과를 기반으로 LLM 정확도를 계산하여 표시합니다
기능
자동 예시 수집
시스템은 여러 어노테이터가 동의하는 신뢰도 높은 예시를 자동으로 식별합니다:
- 구성 가능한 동의 임계값(기본값: 80%)
- 최소 어노테이터 수 요구 사항(기본값: 2)
- 구성 가능한 간격으로 자동 새로 고침
- 스킴별 예시 풀
한도가 있는 LLM 라벨링
대량 라벨링이 아닌 반복적 개선을 가능하게 하기 위해:
- 최대 총 라벨 수: LLM 예측의 총 개수를 제한합니다
- 최대 미라벨 비율: 나머지 데이터의 일정 비율만 라벨링합니다
- 낮은 정확도에서 일시 중지: 정확도가 임계값 아래로 떨어지면 자동으로 일시 중지합니다
블라인드 검증
검증은 "블라인드 라벨링"을 사용합니다 - 어노테이터는 LLM의 예측을 모른 채 인스턴스를 일반 작업으로 봅니다:
- 구성 가능한 샘플 비율(기본값: LLM 라벨의 20%)
- 여러 선택 전략:
low_confidence,random,mixed - 검증 작업이 일반 할당과 자연스럽게 섞임
구성
ICL 라벨링은 ai_support가 활성화되어 있어야 합니다:
# AI endpoint configuration (required)
ai_support:
enabled: true
endpoint_type: "openai"
ai_config:
model: "gpt-4o-mini"
api_key: "${OPENAI_API_KEY}"
# ICL labeling configuration
icl_labeling:
enabled: true
# Example selection settings
example_selection:
min_agreement_threshold: 0.8 # 80% annotators must agree
min_annotators_per_instance: 2 # Minimum annotations for consensus
max_examples_per_schema: 10 # Max examples per schema in prompt
refresh_interval_seconds: 300 # How often to refresh examples
# LLM labeling settings
llm_labeling:
batch_size: 20
trigger_threshold: 5 # Min examples before LLM labeling starts
confidence_threshold: 0.7 # Min confidence to accept prediction
batch_interval_seconds: 600
max_total_labels: 100 # Max instances to label total
max_unlabeled_ratio: 0.5 # Max portion of unlabeled to label
pause_on_low_accuracy: true
min_accuracy_threshold: 0.7
# Human verification settings
verification:
enabled: true
sample_rate: 0.2 # 20% of LLM labels verified
selection_strategy: "low_confidence"
mix_with_regular_assignments: true
assignment_mix_rate: 0.2선택 전략
- low_confidence: LLM의 신뢰도가 가장 낮은 예측을 먼저 검증하도록 우선순위를 둡니다
- random: 모든 예측에서 무작위 샘플링
- mixed: 50% 낮은 신뢰도 + 50% 무작위
관리자 API
상태 엔드포인트
GET /admin/api/icl/status스킴별 예시, 수행된 예측, 검증 큐 크기, 정확도 지표를 포함한 전체 ICL 라벨러 상태를 반환합니다.
예시 엔드포인트
GET /admin/api/icl/examples?schema=sentiment선택적으로 스킴별로 필터링된 신뢰도 높은 예시를 반환합니다.
정확도 엔드포인트
GET /admin/api/icl/accuracy?schema=sentiment사람 검증 결과를 기반으로 한 정확도 지표를 반환합니다.
수동 트리거 엔드포인트
POST /admin/api/icl/trigger
Content-Type: application/json
{"schema_name": "sentiment"}특정 스킴에 대한 배치 라벨링을 수동으로 트리거합니다.
사용 워크플로
1. 프로젝트 구성
ai_support:
enabled: true
endpoint_type: "openai"
ai_config:
model: "gpt-4o-mini"
api_key: "${OPENAI_API_KEY}"
icl_labeling:
enabled: true
example_selection:
min_agreement_threshold: 0.8
llm_labeling:
max_total_labels: 50 # Start small
verification:
enabled: true
sample_rate: 0.3 # Verify 30% initially2. 사람 어노테이션 수집
어노테이터가 평소처럼 데이터를 라벨링하게 합니다. 합의(80% 이상 동의)에 도달하면 해당 인스턴스가 예시로 사용 가능해집니다.
3. 진행 상황 모니터링
curl http://localhost:8000/admin/api/icl/status4. 정확도 검토
curl http://localhost:8000/admin/api/icl/accuracy5. 반복
정확도를 기준으로:
- 정확도가 높으면(>80%)
max_total_labels를 늘립니다 - 정확도가 낮으면 계속하기 전에 사람 예시를 더 추가합니다
모범 사례
-
작게 시작하기: 확장하기 전에 정확도를 평가하기 위해 보수적인 한도(
max_total_labels: 50)로 시작합니다 -
조기 검증: 신뢰할 수 있는 정확도 추정치를 얻기 위해 초기에 더 높은
sample_rate(0.3-0.5)를 사용합니다 -
적극적 모니터링: 관리자 API를 통해 정확도 지표를 정기적으로 확인합니다
-
임계값 조정: LLM 정확도가 낮으면:
- 더 깨끗한 예시를 위해
min_agreement_threshold를 높입니다 - 라벨링 전에 더 많은 예시를 확보하도록
trigger_threshold를 높입니다 - 불확실한 예측을 거부하도록
confidence_threshold를 낮춥니다
- 더 깨끗한 예시를 위해
-
선택 전략 사용:
low_confidence: 문제가 있는 카테고리를 식별하는 데 가장 적합random: 편향 없는 정확도 추정에 가장 적합mixed: 균형 잡힌 접근
문제 해결
LLM이 라벨링하지 않음
ai_support가 올바르게 구성되었는지 확인합니다- 신뢰도 높은 예시가 충분한지 확인합니다
- 한도나 낮은 정확도로 인해 라벨링이 일시 중지되었는지 확인합니다
낮은 정확도
- 더 깨끗한 예시를 위해
min_agreement_threshold를 높입니다 - 어노테이션 가이드라인/지침을 더 추가합니다
- 사용 중인 예시를 검토합니다(
/admin/api/icl/examples)
검증 작업이 나타나지 않음
verification.enabled가 true인지 확인합니다mix_with_regular_assignments가 true인지 확인합니다- 큐에 대기 중인 검증이 있는지 확인합니다
추가 자료
구현 세부 정보는 원본 문서를 참조하세요.