본문으로 건너뛰기
공지15분 분량

Potato 2.14: 내 어노테이션으로 모델 학습하기

Potato 2.14는 트레이너 38개로 연구의 레이블에서 모델을 학습시키고, 실행마다 홀드아웃 항목으로 점수를 매기며, 예측을 어노테이터에게 사전 레이블로 보여 줍니다.

Potato Team

Potato 2.14는 연구 자체의 어노테이션으로 모델을 학습시킵니다. 실행은 트레이너 38개 중 하나를 어노테이터가 단 레이블에 맞추고, 학습에서 제외해 둔 항목으로 모델에 점수를 매기며, 모델의 예측을 항목에 사전 레이블로 되써서 어노테이터가 확인하거나 고치게 합니다. 2.13.1 버전에는 sklearn-text 트레이너 하나뿐이었습니다. 이번 릴리스는 RTTM 화자 분리 파일을 가져오고, 수정된 화자 턴을 내보내며, 로컬 전사를 위해 WhisperX를 실행하고, 일치도 수치와 내보내기 결과를 바꾸던 버그 여러 개를 고쳤으므로, 설치하기 전에 업그레이드 노트를 읽으십시오.

bash
pip install --upgrade potato-annotation

업그레이드 노트

먼저 각 설정에서 potato validate config.yaml --strict를 실행하십시오. 다음 변경은 잘 돌아가던 2.13 연구의 동작을 바꿀 수 있습니다.

  • assignment_strategy: llm_confidence가 이제 대기열 순서를 정합니다. 이 전략은 신뢰도가 가장 낮은 사전 레이블을 먼저, 그다음에 사전 레이블이 없는 항목을 제공합니다. 이전 릴리스는 이 값을 받아들이고 항목을 무작위로 배정했습니다.
  • model_training은 검증과 시작 시점에 점검됩니다. writeback이나 auto_retrain 아래의 알 수 없는 키, train, val, test 이외의 이름이 붙은 분할, 스키마가 아닌 writeback.schemas 항목은 서버를 멈추게 하는 오류입니다.
  • Training 페이지가 홀드아웃 점수를 보고합니다. 점수 열은 예전에 학습 정확도를 보여 주었습니다. 2.13 실행의 점수는 2.14의 홀드아웃 점수와 비교할 수 없습니다.
  • 링크, 체인, 이벤트가 내보내기에 나타납니다. span_link, coreference, event_annotation 답이 모든 내보내기에서 빠져 있었으며, 이제 CSV와 TSV에 <scheme>._links와 <scheme>._events 열이 추가됩니다.
  • Potato는 더 이상 install_requires에 ujson을 나열하지 않습니다. Potato의 환경에서 ujson을 임포트하는 직접 만든 스크립트에는 pip install ujson이 필요합니다.

모델 학습

모델 학습은 어노테이터가 레이블을 달 수 있는 양보다 항목이 많은 연구를 위한 기능으로, 처음 달린 레이블로 학습한 모델이 나머지를 제안할 수 있습니다. 루프는 세 단계입니다. 먼저 실행이 각 항목의 레이블을 하나의 답으로 통합하고 항목을 train, val, test로 나눕니다. 다음으로 트레이너가 별도 프로세스에서 train 분할로 모델을 학습시키고, 실행이 val 항목과 test 항목으로 모델에 점수를 매깁니다. 마지막으로 되쓰기가 모델의 예측을 사전 레이블로 어노테이터에게 보여 주며, 어노테이터가 저장한 답이 다음 실행의 레이블이 됩니다.

sentiment 스키마가 있는 연구에서 루프를 켜려면 연구 설정에 이 블록을 추가하십시오.

yaml
model_training:
  enabled: true
  writeback:
    schemas: [sentiment]
    include_unlabeled: true
    min_confidence: 0.6

writeback.schemas에 스키마를 지정하기 전까지 어노테이터는 실행에서 아무것도 보지 못합니다. include_unlabeled: true는 아무도 레이블을 달지 않은 항목을 예측하고, min_confidence는 0.6 미만의 예측이 화면에 나타나지 않게 합니다. 서버를 다시 시작하고 관리자 키로 /admin/training을 열어 트레이너와 스키마를 고르고 Train now를 누르십시오.

sklearn-text 실행을 한 번 마친 Training 페이지. 실행 양식, 홀드아웃 점수가 있는 실행 표, 트레이너 목록이 보입니다

Potato의 examples/ai-assisted/model-training/ 예제 프로젝트에는 상품 리뷰 160개가 있으며, GPU도 기본 설치 외의 것도 필요 없는 sklearn-text를 실행합니다. 모델 학습 문서는 그곳의 실행 하나를 보고하는데, 레이블이 달린 리뷰 120개로 검증 리뷰에서 macro-F1 0.84를 기록하고 사전 레이블 80개를 되썼습니다. 그러면 새 어노테이터는 그 리뷰마다 모델의 답이 이미 선택된 화면을 봅니다.

모델의 답이 사전 레이블로 선택된 어노테이션 페이지의 리뷰

첫 모델 학습시키기는 이 예제를 단계별로 안내합니다.

어노테이션 종류별 트레이너

Training 페이지는 각 스키마에 그 스키마에 맞는 트레이너만 제공합니다. 트레이너 카탈로그에는 트레이너 38개 전체가 설치 명령과 함께 나열되어 있으며, 아래 목록은 주요 그룹을 보여 줍니다.

  • 텍스트. hf-text-classification, setfit, sklearn-text는 항목을 분류합니다. hf-token-classification은 스팬을 태깅하고, hf-relation은 스팬을 관계, 이벤트, 상호 참조 체인으로 연결하며, byt5-gloss는 행간 글로스를 위해 단어를 분할하고 글로스를 붙입니다.
  • 이미지. torchvision-detect와 ultralytics-detect는 검출기를, torchvision-segment, ultralytics-segment, cellpose는 분할 모델을 학습시킵니다. 검출과 분할 실행은 전체 슬라이드와 큰 이미지를 타일로 자르고, 현미경 평면과 GeoTIFF 지도에서 학습합니다. volume-unet은 3D 볼륨을 분할하고, layoutlmv3는 페이지 레이아웃에 레이블을 달며, vlm-sft는 비전 언어 모델을 캡션, 그라운딩, GUI 단계로 파인튜닝합니다.
  • 오디오와 비디오. whisper-asr는 수정된 전사 턴으로 Whisper를 파인튜닝하고, diarization은 화자 턴으로 화자 모델을 학습시키며, hf-audio-tagger는 오디오 구간을 태깅하고, video-track은 프레임에 걸쳐 객체를 추적합니다.
  • LLM과 에이전트. llm-sft는 자유 텍스트 답으로, llm-dpo는 쌍별 선호도로, reward-model은 쌍별 비교, 순위, 최선-최악 답으로, prm-reward는 에이전트 트레이스의 단계 평가로 파인튜닝합니다.
  • 과학. rdkit-property는 분자에 대한 답을, peak-cnn은 스펙트럼의 피크 위치를 예측하고, signal-cnn은 시계열 신호의 구간에 레이블을 달며, episode-model은 로봇 에피소드에 레이블을 답니다.

ultralytics 트레이너는 AGPL-3.0이고 LayoutLMv3 가중치는 CC BY-NC-SA 4.0입니다. 둘 중 어느 쪽이든 실행하면 먼저 라이선스를 수락하라고 요청합니다. pip install "potato-annotation[train]"은 텍스트, 이미지, 오디오, LLM 트레이너에 필요한 것을 설치하며, 별도로 설치할 것은 카탈로그에 나와 있습니다.

홀드아웃 점수와 사전 레이블

모든 실행은 레이블에는 macro-F1, 박스에는 mAP50, 전사에는 단어 오류율, 볼륨에는 Dice처럼 스키마에 맞는 지표로 val 항목과 test 항목에 예측의 점수를 매깁니다. 레이블은 있는데 예측이 없는 항목은 틀린 것으로 계산되며, 커버리지 수치는 예측이 붙은 항목의 비율을 보고합니다. train 분할 항목에는 사전 레이블이 붙지 않고, 검토자가 수정한 항목은 이후 실행의 train 분할로 항상 갑니다.

사전 레이블이 어노테이터의 답이 되는 때는 어노테이터가 사전 레이블을 수정하거나 넘어갈 때뿐이며, 되쓰기는 사람이 단 레이블을 바꾸지 않습니다. 모델 검토 대기열은 사전 레이블을 신뢰도가 낮은 순서로 제공하고, 검토 보고서는 각 사전 레이블 뒤에 있는 실행을 알려 줍니다. 루프 안의 모델이 검토 워크플로를 다룹니다.

GPU 서버나 클러스터에서 학습하기

실행은 백엔드에서 실행됩니다. local 백엔드는 Potato 서버에서 학습하며 CUDA, Apple의 Metal, CPU 중 하나를 고릅니다. ssh 백엔드는 Potato가 접속할 수 있는 GPU 서버에서 실행을 시작하고 진행 상황과 모델을 스트리밍으로 되돌려 줍니다. slurm 백엔드는 로그인 노드에서 sbatch로 컴퓨트 노드에 실행을 제출하며 sbatch, squeue, scancel만 필요합니다. agent 백엔드는 potato training agent를 실행하고 작업을 폴링하는, Potato가 접속할 수 없는 머신을 위한 백엔드입니다. ssh 백엔드에서 실행하기 전에 potato training check <backend> config.yaml이 원격 Python, 원격 GPU, 없는 학습 패키지를 보고합니다. GPU 서버, SLURM 클러스터, NAT 뒤의 머신에서 학습하기가 각 백엔드를 설정합니다.

다음에 물을 항목 고르기

hf-text-classification과 hf-image-classification은 acquisition 파라미터를 받아 마진, 엔트로피, BALD, 코어셋 거리로 각 예측에 점수를 씁니다. 그러면 assignment_strategy: llm_confidence가 점수가 가장 높은 항목을 먼저 제공합니다. auto_retrain은 기본적으로 새 어노테이션 25개마다 새 실행을 시작하고, 각 실행은 레이블이 없는 항목의 점수를 다시 매깁니다. 능동 학습은 이 루프를 Potato의 active_learning 블록과 비교합니다.

이미 가지고 있는 모델

트레이너 다섯 개는 아무것도 학습하지 않고 다른 곳에서 돌아가는 모델에 점수를 매깁니다. Label Studio ML 백엔드를 위한 label-studio-ml, OpenAI 호환 API 뒤의 비전 언어 모델을 위한 openai-vlm-boxes, Hugging Face Inference Endpoint를 위한 hf-inference, roboflow, CVAT 서버리스 함수를 위한 cvat-nuclio입니다. 이 모델들의 예측은 학습한 모델의 예측과 같은 홀드아웃 점수, 되쓰기, 검토를 받습니다. 이미 돌리고 있는 모델의 사전 레이블과 홀드아웃 점수가 각 브리지를 다룹니다.

모델 게시하기

실행 페이지에서 모델을 Hugging Face Hub로 푸시하며, 모델 카드에는 트레이너, 베이스 모델, 스키마, 분할 크기, 홀드아웃 점수가 적힙니다. 저장소 이름을 두 번 입력하고, 저장소는 기본적으로 비공개이며, 토큰은 서버의 환경 변수에서 가져옵니다. 예측과 학습 데이터는 서버에 남습니다. 같은 페이지는 실행의 분할과 그 분할의 사람 레이블을 데이터셋 버전으로 보관해, 나중에 만든 모델을 같은 항목에서 비교할 수 있게 합니다.

전사, 가져오기, 내보내기

  • WhisperX. potato transcripts --transcribe는 WhisperX가 설치되어 있으면 WhisperX를 사용하고 --asr-word-timestamps에서는 강제 정렬로 단어 시간을 구하며, 설치되어 있지 않으면 faster-whisper로 되돌아갑니다. whisper-asr 실행은 파인튜닝한 모델의 CTranslate2 사본을 쓰며 --asr-model이 그 사본을 불러옵니다.
  • RTTM 가져오기. potato import -f rttm은 화자 분리 파일 하나 또는 화자 분리 파일 폴더를, 수정할 화자 턴이 담긴 녹음당 항목 하나로 바꿉니다. --speaker-map은 화자 이름을 바꿉니다.
  • segments 내보내기. 이 형식은 오디오나 비디오 구간마다 JSONL 행 하나와 어노테이터마다 RTTM 파일 하나를 씁니다.
  • CoNLL-U 의존 관계. HEAD와 DEPREL은 내보낸 스팬에 대한 방향이 있는 span_link 스키마에서 나옵니다. 두 열은 예전에는 항상 _였습니다.

결과에 영향을 주는 수정

변경 로그에 모든 수정이 나열되어 있습니다. 아래 수정은 이미 보고한 수치를 바꿨을 수 있습니다.

  • B,D=A,C로 쓴 순위 동점이 D=A라는 이름의 항목 하나로 읽혀서, Kendall의 tau와 Spearman footrule이 동점인 두 항목을 모두 빠뜨렸습니다.
  • 슬라이더, 소프트 레이블, 쌍별 척도 사전 레이블이 페이지가 로드될 때 어노테이터의 답으로 저장되어, 아무도 답하기 전에 항목이 완료로 계산되었습니다. grounding_eval 항목을 열 때도 같은 방식으로 저장되었습니다.
  • /admin/iaa가 상호 참조, 스팬 링크, 이벤트를 점수 없는 스팬으로 나열했습니다. 이제 이 보고서는 세 유형을 평균 쌍별 F1로 점수화합니다.
  • 코드북에서 코드를 병합하거나 분할해도 코딩이 다시 연결되지 않았습니다. 저장된 어노테이션을 코드 id에 연결하는 것이 없었기 때문입니다.
  • 스냅숏 매니페스트가 null 일치도 수치를 고정했으며, 이제 kappa와 일치율을 기록합니다.
  • 모델 검토는 reject 판정을 그 판정이 내린 사전 레이블에 대한 것이 아니라 누락으로 계산했고, 검토 보고서의 정밀도가 틀리게 나왔습니다. 또한 writeback.field가 pre_annotation.field와 다를 때 홀드아웃 어노테이터와 항목의 쌍이 항목 데이터에 되쓰기 필드를 그대로 두었는데, 이제 그런 쌍의 항목 데이터에는 두 필드가 모두 빠집니다.

2.14 설치하기

업그레이드하고, 각 설정을 검증하고, 필요한 트레이너를 설치하십시오.

bash
pip install --upgrade potato-annotation
potato validate config.yaml --strict
pip install "potato-annotation[train]"

시작은 모델 학습이 좋고, 새로운 기능에 릴리스의 나머지가 나열되어 있습니다.