능동 학습: 더 힘들게가 아니라 더 똑똑하게 어노테이션하기
Potato의 능동 학습과 불확실성 샘플링, BADGE, BALD 전략으로 가장 유익한 미라벨 예시를 우선순위화하여 어노테이션 작업을 최대 50%까지 줄입니다.
능동 학습은 다음에 어노테이션할 항목을 우연에 맡기지 않고 직접 결정합니다. 잘 활용하면 모델 품질을 떨어뜨리지 않으면서 필요한 라벨링 작업을 대략 절반으로 줄일 수 있습니다. Potato에서 설정하는 방법은 다음과 같습니다.
능동 학습이란?
데이터를 무작위로 샘플링해 어노테이션하는 대신, 능동 학습은 다음과 같이 동작합니다.
- 현재 어노테이션으로 모델을 학습합니다
- 모델이 불확실해하는 항목을 식별합니다
- 해당 항목을 사람의 어노테이션 대상으로 우선순위화합니다
- 이를 반복하며 효율을 지속적으로 개선합니다
능동 학습을 사용하는 이유
핵심 이점은 주로 어노테이터가 시간을 어디에 쓰느냐에 있습니다. 동일한 모델 품질에 도달하기 위해 더 적은 항목을 라벨링하므로, 사용 가능한 모델을 더 빨리 얻게 됩니다. 어렵고 모호한 사례에 사람의 주의가 집중되고, 무작위 샘플링이라면 건너뛰었을 엣지 케이스가 더 일찍 드러나는 경향이 있습니다.
기본 능동 학습 설정
annotation_task_name: "Active Learning Classification"
data_files:
- "data/unlabeled_pool.json"
# Active learning configuration
active_learning:
enabled: true
classifier_name: "sklearn.linear_model.LogisticRegression"
# Sampling settings
max_instances_to_reorder: 1000 # Number of instances to reorder by uncertainty
random_sample_percent: 0.1 # 10% random sampling to maintain diversity
annotation_schemes:
- annotation_type: radio
name: category
labels: [Positive, Negative, Neutral]불확실성 샘플링의 작동 방식
Potato의 능동 학습은 불확실성 샘플링을 사용하여 분류기가 가장 확신하지 못하는 항목을 우선순위화합니다. 분류기는 미라벨 인스턴스에 대한 라벨을 예측하고, 신뢰도 점수가 가장 낮은 항목이 먼저 어노테이션 대상으로 제시됩니다. 사용 가능한 전략과 구현 세부 사항은 능동 학습 가이드와 전략 레퍼런스를 참고하십시오.
classifier_name 필드는 전체 모듈 경로를 사용하여 scikit-learn과 호환되는 모든 분류기를 지정합니다.
active_learning:
enabled: true
classifier_name: "sklearn.linear_model.LogisticRegression"다른 분류기 옵션으로는 다음이 있습니다.
sklearn.ensemble.RandomForestClassifiersklearn.svm.SVC(probability=True사용)sklearn.naive_bayes.MultinomialNB
전체 설정
annotation_task_name: "Active Learning for Sentiment"
data_files:
- "data/reviews.json"
active_learning:
enabled: true
classifier_name: "sklearn.linear_model.LogisticRegression"
# Sampling settings
max_instances_to_reorder: 2000 # Reorder top N by uncertainty
random_sample_percent: 0.1 # 10% random to maintain diversity
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "Classify the sentiment"
labels:
- name: Positive
key_value: "1"
- name: Negative
key_value: "2"
- name: Neutral
key_value: "3"
required: true
annotation_guidelines:
text: |
## Sentiment Classification
Items are prioritized by model uncertainty.
You may see more difficult or ambiguous cases.
Focus on accuracy over speed.진행 상황 모니터링
Potato에 내장된 로깅은 어떤 인스턴스가 선택되었는지와 그 불확실성 점수를 기록하므로, 라벨이 쌓여 가면서 샘플링이 어떻게 동작하는지 관찰할 수 있습니다.
모범 사례
콜드 스타트
더 높은 random_sample_percent 값을 설정하여 다양한 무작위 샘플링으로 시작하십시오.
active_learning:
enabled: true
classifier_name: "sklearn.linear_model.LogisticRegression"
random_sample_percent: 0.2 # 20% random for initial diversity재정렬 범위 제어
max_instances_to_reorder를 사용하여 불확실성에 따라 순위가 매겨지는 인스턴스 수를 제어하십시오. 값이 클수록 샘플러가 선택할 수 있는 대상이 많아지지만, 매번 처리할 때마다 더 많은 연산 비용이 듭니다.
active_learning:
max_instances_to_reorder: 5000 # Rank top 5000 by uncertainty다양성 유지
random_sample_percent 파라미터는 무작위로 샘플링된 인스턴스가 일부 포함되도록 보장하여, 모델이 불확실한 엣지 케이스만 보지 않도록 막아 줍니다.
active_learning:
random_sample_percent: 0.1 # 10% random sampling성공을 위한 팁
실전에서 도움이 되는 몇 가지가 있습니다. 첫 모델이 다양한 예시를 보도록 무작위 샘플로 시작하고, 이후에도 무작위 샘플링을 일부 섞어 두어 불확실한 엣지 케이스에 과적합되지 않도록 하십시오. 진행하면서 정확도를 추적하십시오. 그리고 가장 어려운 항목만 계속 다루면 어노테이터가 지치므로 피로에 유의하고, 되돌려야 할 경우에 대비해 모델 체크포인트를 저장해 두십시오.
다음 단계
전체 능동 학습 문서는 /docs/features/active-learning에서 확인하십시오.