Skip to content

심리측정 엔진

주석을 위한 문항반응이론. 단순 다수결 대신 모든 라벨에 사후확률과 신뢰구간이 붙으며, 모델을 적합하는 데 골드 라벨도 LLM도 필요하지 않습니다.

v2.7.0의 새 기능

Potato는 여러분의 주석 연구를 실제 그것이 무엇인지에 맞게, 즉 측정 도구로 다룰 수 있습니다. 심리측정 레이어는 주석이 흘러 들어오는 동안 문항반응이론(IRT) 모델을 실시간으로 적합하면서, 모든 항목의 참 라벨을 확률로, 모든 어노테이터의 능력을 표준오차와 함께, 모든 항목의 난이도를, 그리고 코드북 문제로 의심되는 곳을 짚어 주는 항목별 변별도 진단을 한꺼번에 추정합니다.

골드 라벨은 필요 없고 LLM도 관여하지 않습니다. 이 모델(GLAD의 다중 클래스 일반화, Whitehill et al. 2009)은 일치 양상 자체에서 모든 것을 스스로 끌어냅니다. 표준화된 시험이 누가 알려 주지 않아도 어떤 문항이 어려운지 알아내는 것과 같은 방식입니다. 적합은 결정론적이며 주석 연구 규모에서는 밀리초 단위로 끝납니다.

신뢰구간과 함께 실시간으로 추정되는 어노테이터 능력. 모든 라벨이 단순 투표가 아니라 사후확률을 갖게 됩니다.

구성

yaml
# Adaptive routing is opt-in via the standard assignment strategy key.
# Omit this line to keep your existing strategy and use psychometrics
# as a pure analytics layer.
assignment_strategy: psychometric
 
# Give items a redundancy target so early-stopped items translate into
# concrete saved judgments on the dashboard.
num_annotators_per_item: 4
 
psychometrics:
  enabled: true
  schema: sarcasm            # scheme to model; default: first radio/likert scheme
  refit_interval: 5          # refit after this many new labels (fits are ~ms)
  min_observations: 20       # cold-start gate before adaptive routing engages
  min_annotators_per_item: 2 # never early-stop an item below this many annotators
  confidence_threshold: 0.95 # posterior at which an item counts as resolved
  cost_per_judgment: 0.08    # optional: expresses savings in currency
  discrimination_flag_threshold: -0.2  # codebook-bug flag sensitivity

지원하는 스킴은 단일 선택 범주형인 radiolikert입니다(likert의 눈금은 명목 범주로 취급합니다). 다중 선택 스킴은 모델링하지 않습니다.

오차 막대가 붙은 라벨

내보내기에는 sarcastic (2 of 3 votes) 대신 sarcastic, p = 0.94 [0.88 – 0.97]이 적힙니다. 이 확률은 모델의 사후확률로, 몇 명이 투표했는지만이 아니라 누가 투표했는지에 가중치를 둡니다. 구간은 능력 추정치에 대한 ±1 표준오차 민감도 범위입니다.

이후 단계에서는 소프트 레이블로 학습하거나, 평가 집합을 확신이 높은 항목만 남기도록 거르거나, 확률이 낮은 항목을 잡음이 아니라 실제로 모호한 항목으로 다룰 수 있습니다. 어노테이터에게서 분포를 직접 받는 보완적인 방법은 소프트 레이블 주석을 보십시오.

어노테이터 능력, 정직하게 제시하기

능력 θ는 일치 양상에서 추정합니다. 1.0은 새 어노테이터의 사전값이고, 0은 그 사람의 라벨에 정보가 담겨 있지 않다는 뜻이며, 음수는 체계적으로 틀린다는 뜻입니다. 모든 추정치에는 표준오차가 함께 붙습니다. 라벨이 12개뿐인 어노테이터는 오차 막대가 넓고, 대시보드도 그렇게 말해 줍니다.

넓은 오차 막대를 근거로 인사 결정을 내리지 마십시오. 표준오차는 근사값(최빈값에서의 Fisher 정보량)이며 계산 방식상 다소 낙관적입니다.

코드북 문제 탐지기

항목 난이도는 능력과 함께 추정되지만, 더 쓸모 있는 신호는 변별도입니다. 각 항목에서 어노테이터의 능력과 답의 정확성 사이의 상관을 말합니다.

변별도가 크게 음수라면, 즉 가장 뛰어난 어노테이터들이 다수 합의와 어긋나고 있다면, 그 항목에서 잘못됐거나 모호한 쪽은 어노테이터가 아니라 지침입니다. 대시보드는 이런 항목을 “코드북 문제로 의심됨” 아래에 모아 보여줍니다. 지침을 고친 다음 다시 보십시오. 팀이 이런 항목을 정리하러 가는 자리는 보통 멀티플레이어 룸입니다.

적응형 할당

assignment_strategy: psychometric을 쓰면 어노테이터가 작업을 요청할 때 남은 항목들이 그 어노테이터그 항목에 라벨을 붙일 때의 정확한 1단계 기대 정보 이득으로 순위가 매겨집니다. 불확실성이 큰 항목은 능력이 높은 어노테이터에게 먼저 가고, 사후확률이 이미 confidence_threshold를 넘은 항목은(어노테이터가 최소 min_annotators_per_item명 붙은 상태에서) 더 이상 예산을 쓰지 않습니다. 항목당 N개로 고정한 설계와 견줘 아낀 판단 수가 대시보드에 집계되고, cost_per_judgment를 설정해 두면 금액으로도 환산됩니다.

운영상 참고할 점이 두 가지 있습니다.

  • 콜드 스타트. 라벨이 min_observations개 쌓이기 전까지는 할당이 무작위로 되돌아갑니다. 모델이 능력과 난이도를 갈라내려면 어노테이터들이 겹치는 항목이 먼저 있어야 하기 때문입니다. 이 구간 동안 대시보드에는 예열 중임을 알리는 미터가 표시됩니다.
  • 배치 처리. 할당은 사용자의 대기열이 채워질 때 일어납니다. 대기열이 짧을수록 순위가 최신 상태에 가깝고, 사용자당 배치가 아주 크면 적응성이 옅어집니다.

돈을 쓰기 전에 하는 검정력 분석

모든 주석 프로젝트는 “항목당 어노테이터 몇 명?”을 어림으로 정합니다. 연구 설계 도구는 시드를 고정한 몬테카를로 시뮬레이션으로 이 물음에 답합니다.

bash
python -m potato.psychometrics.design --items 500 --accuracy 0.75 \
    --classes 3 --target-ci 0.10 --cost 0.08
text
ann/item   alpha     95% interval   width  majority acc  judgments       cost
       2   0.392 [ 0.330,  0.439]   0.109         0.751       1000      80.00
       3   0.388 [ 0.338,  0.431]   0.093         0.864       1500     120.00  <- recommended

권장값은 Krippendorff α의 95% 구간이 --target-ci보다 좁아지는 가장 작은 중복도이며, 방어할 만큼 정밀한 일치도 추정치를 여전히 내주는 가장 저렴한 설계입니다. --accuracy 입력값은 작은 파일럿으로 재는 것이 가장 좋습니다. 같은 분석을 대시보드에서도, 관리자 API(GET /psychometrics/api/design)로도 쓸 수 있습니다.

브라우저에서 주석 검정력 계산기로 직접 값을 바꿔 가며 돌려 볼 수도 있습니다.

엔드포인트

모든 엔드포인트는 관리자 권한이 필요합니다(RBAC VIEW_ADMIN_DASHBOARD. 디버그 모드와 공용 관리자 API 키도 통과합니다).

엔드포인트용도
GET /psychometrics/dashboard실시간 대시보드
GET /psychometrics/api/stats대시보드 집계값(새로 적합을 강제합니다)
GET /psychometrics/api/export확장된 내보내기: 사후확률, 구간, 능력
GET /psychometrics/api/design검정력 분석

MACE와의 관계

Potato에는 MACE도 들어 있습니다. 사후 분석으로 어노테이터 역량과 예측 라벨을 추정합니다. 둘은 같은 문헌에서 나온 사촌지간이지만 맡은 일이 다릅니다.

MACE심리측정
어노테이터 모델아는가 대 추측하는가로 본 역량표준오차가 붙은 연속적 능력
항목 모델없음난이도 + 변별도(코드북 문제 표시)
실행 시점주석 N개 이후의 일괄 분석할당 루프 안에서 실시간
할당에 관여아니요예. 정보 이득 기반 할당과 조기 중단으로
라벨의 불확실성엔트로피사후확률 + 민감도 구간
연구 전 계획없음몬테카를로 검정력 분석

범주형 스킴이면 어디서든 역량을 빠르게 확인하고 싶을 때는 MACE를 쓰십시오(multiselect도 다룹니다). 난이도까지 반영한 측정이 연구가 진행되는 동안 실제로 작동하기를 원할 때는 심리측정을 쓰십시오.

문제 해결

  • 대시보드가 계속 예열 중이라고 표시됩니다. 모델에는 서로 다른 라벨이 최소 두 개, 그리고 겹치는 어노테이터가 필요합니다. 어노테이터가 한 명이거나 라벨이 만장일치이면 적합은 설계상 퇴화합니다. 어노테이터를 늘리거나 min_observations를 낮추십시오.
  • assignment_strategy: psychometric을 설정했는데 할당이 무작위로 보입니다. 콜드 스타트 시의 대체 동작입니다. 예열 미터와 min_observations를 확인하십시오.
  • 능력값이 모두 1.0 근처이고 오차 막대가 큽니다. 아직 겹치는 부분이 부족합니다. 어노테이터들이 함께 본 항목이 쌓이면 능력값이 벌어집니다.
  • /psychometrics/...에서 404가 납니다. 구성에 psychometrics.enabled: true 블록이 빠져 있습니다.

추가 자료