[데이터 제작] 데이터 품질 평가 방법 - IAA 평가

작업자간 일치도(IAA, Inter-Annotator Agreement)

모델이 학습할 수 있을만큼 충분한 양의 데이터를 제작하기 위해서는 혼자가 아닌 여럿이서 함께 데이터를 제작해야만 할 것이다.
하지만 데이터 제작 및 레이블링 과정에서는 사람의 주관이 들어가는 경우가 많고,
모호한 레이블링 기준으로 인해 사람마다 약간씩 다른 기준으로 레이블링을 진행했을 수 있다.

이러한 실수 또는 데이터 레이블링 방식의 차이를 확인하고,
레이블링 후 데이터의 품질을 확인하기 위해 작업자간에 레이블링을 얼마나 비슷한 기준으로 했는지를 평가하는 방법이 바로
작업자간 일치도(IAA)평가이다.

IAA는 여러가지 방법으로 평가될 수 있겠지만 대표적인 방법으로는 크게 두 가지가 존재한다.

1. Kappa 계수

1) Cohen's Kappa

  • Cohen이 1968년에 제안한 계수

  • 두 관찰자 간의 측정 범주 값에 대한 일치도(agreement)를 측정하는 방법

  • 두 관찰자 사이의 일치도 : Cohen's Kappa / 세 관찰자 이상 일치도 : Fleiss Kappa

  • Cohen's Kappa계수를 사용할 경우 자료의 조건

    • 명목 척도 또는 서열 척도로 측정된 범주형 데이터이어야 함
    • 검사자(혹은 검사 방법) 내의 범주는 반드시 동일해야 함
    • 두 평가자에게 모두 관측된 데이터이어햐 함
    • 두 평가자는 서로 독립
  • Cohen's Kappa 계수 공식 :
    PoP_o

    κ=PoPe1Peκ = \frac{P_o - P_e}{1-P_e}

  • 예시)

    • 아래와 같이 긍정/부정 데이터를 평가자 A와 B가 레이블링을 진행했다고 하자.

    • '2명의 평가자 간 일치 확률'='둘 다 같은 레이블을 고른 경우의 비율'은 다음과 같다.

      Po=20+1520+5+10+15=0.7P_o = \frac{20+15}{20+5+10+15} = 0.7

    • '우연히 두 평가자에 의하여 일치된 평가를 받을 비율'(PeP_e

      • 평가자 A의 긍정 확률값

        PA,Yes=A가긍정이라고한개수전체개수=20+520+5+10+15=0.5P_{A,Yes} = \frac{A가 긍정이라고 한 개수}{전체 개수} = \frac{20+5}{20+5+10+15}=0.5

      • 평가자 A의 부정 확률값
        PA,No=A가부정이라고한개수전체개수=10+1520+5+10+15=0.5P_{A,No} = \frac{A가 부정이라고 한 개수}{전체 개수} = \frac{10+15}{20+5+10+15} = 0.5

      • 평가자 B의 긍정 확률값
        PB,Yes=B가긍정이라고한개수전체개수=20+1020+5+10+15=0.6P_{B,Yes} = \frac{B가 긍정이라고 한 개수}{전체 개수} = \frac{20+10}{20+5+10+15} = 0.6

      • 평가자 B의 부정 확률값
        PB,No=B가부정이라고한개수전체개수=5+1520+5+10+15=0.4P_{B,No} = \frac{B가 부정이라고 한 개수}{전체 개수} = \frac{5+15}{20+5+10+15} = 0.4

      • 따라서 평가자 A와 B가 동시에 긍정으로 레이블링할 확률(PYesP_{Yes}

      • 또한 평가자 A와 B가 동시에 부정으로 레이블링할 확률(PNoP_{No}

      • '우연히 두 평가자에 의하여 일치된 평가를 받을 비율'(PeP_e

    • 따라서 Cohen's Kappa 계수는

      κ=PoPe1Pe=0.70.510.5=0.4κ = \frac{P_o - P_e}{1-P_e} = \frac{0.7-0.5}{1-0.5} = 0.4

  • Cohen's Kappa 계수 등급

2) Fleiss Kappa(TACRED)

  • Cohen's Kappa 계수가 '두 관찰자 사이의 일치도'를 평가하는 척도인 반면, Fleiss Kappa는 세 관찰자 이상 존재할 때에도 일치도를 평가할 수 있는 척도이다.

  • Kappa 계수를 구하는 식은 Cohen's Kappa와 동일하지만, 평가자가 늘어나면서 Pˉ\bar{P}

  • 여기에서 Pˉ\bar{P}

  • NN이 'total number of subjects(평가해야 할 대상, 데이터 개수)'이고, nn이 '평가자 인원수(각 데이터 별 평가 개수)', 그리고 kk가 'labeling 범주의 개수(category 종류의 개수)'라고 하자.

  • 또한 i=1,...,Ni=1, ..., N

  • 먼저, Peˉ\bar {P_{e}}

    • 우선 jj 번째 범주로 분류된 데이터의 비율을 구한다면 식은 아래와 같다.

      pj=범주가 j인 셀의 값의 합표의 각 셀 값의 총합=1Nni=1Nnij,1=j=1kpj{\displaystyle p_{j}=\frac{범주가\ j인 \ 셀의\ 값의\ 합}{표의 \ 각 \ 셀\ 값의\ 총합}= {\frac {1}{Nn}}\sum _{i=1}^{N}n_{ij},\quad \quad 1=\sum _{j=1}^{k}p_{j}}

    • 이러한 범주는 총 kk개 존재하므로 우리는 Peˉ\bar {P_{e}}

      Peˉ=j=1kpj2{\displaystyle {\bar {P_{e}}}=\sum _{j=1}^{k}p_{j}^{2}}

  • 다음으로, Pˉ\bar{P}

    • ii번째 데이터에 대해 평가자들이 일치하는 정도를 구하는 식은 다음과 같다.

      Pi=범주가일치하는평가자쌍의경우의수가능한모든평가자쌍의경우의수{\displaystyle P_{i} = \frac{범주가 일치하는 평가자 쌍의 경우의 수}{가능한 모든 평가자 쌍의 경우의 수}}

      =1nP2j=1knijP2{\displaystyle = {\frac {1}{_{n}\mathrm{P}_{2}}}\sum _{j=1}^{k}{_{n_{ij}}\mathrm{P}_{2}}}

      =1n(n1)j=1knij(nij1){\displaystyle = {\frac {1}{n(n-1)}}\sum _{j=1}^{k}n_{ij}(n_{ij}-1)}

      =1n(n1)j=1k(nij2nij){\displaystyle={\frac {1}{n(n-1)}}\sum _{j=1}^{k}(n_{ij}^{2}-n_{ij})}

      =1n(n1)[(j=1knij2)(n)]{\displaystyle ={\frac {1}{n(n-1)}}\left[\left(\sum _{j=1}^{k}n_{ij}^{2}\right)-(n)\right]}

    • Pˉ\bar{P}

      Pˉ=1Ni=1NPi{\bar {P}}={\frac {1}{N}}\sum _{{i=1}}^{N}P_{{i}}

      =1Nn(n1)(i=1Nj=1knij2Nn)=1Nn(n1)(i=1Nj=1knij2Nn){\displaystyle ={\frac {1}{Nn(n-1)}}\left(\sum _{i=1}^{N}\sum _{j=1}^{k}n_{ij}^{2}-Nn\right)}{\displaystyle ={\frac {1}{Nn(n-1)}}\left(\sum _{i=1}^{N}\sum _{j=1}^{k}n_{ij}^{2}-Nn\right)}

  • 예시) 14명(nn)의 평가자(데이터 제작자)가 있고, 총 10개(NN)의 데이터를 레이블링한다고 하자. 구분할 범주의 개수는 5개(kk)이다.

    • N=10,n=14,k=5N = 10, n=14, k=5

    • (표의 각 셀 값의 총합) = 14 * 10 = 140

    • 첫번째 카테고리로 분류된 경우의 비율
      p1=0+0+0+0+2+7+3+2+6+0140=0.143p_{1}=\frac{0+0+0+0+2+7+3+2+6+0}{140}=0.143

    • 2번째 데이터에서 평가자(데이터 제작자)가 일치하는 정도

      P2=114(141)(02+22+62+42+2214)=0.253P_{2}=\frac{1}{14(14-1)}\left(0^{2}+2^{2}+6^{2}+4^{2}+2^{2}-14\right)=0.253

    • Pˉ{\bar{P}}

      i=1NPi=1.000+0.253++0.286+0.286=3.780\sum _{{i=1}}^{N}P_{{i}}=1.000+0.253+\cdots +0.286+0.286=3.780

    • 최종적으로 Kappa 계수를 구하면 다음과 같다.

      Pˉ=1(10)(3.780)=0.378{\bar {P}}={\frac {1}{(10)}}(3.780)=0.378

      Pˉe=0.1432+0.2002+0.2792+0.1502+0.2292=0.213{\displaystyle {\bar {P}}_{e}}{\displaystyle =0.143^{2}+0.200^{2}+0.279^{2}+0.150^{2}+0.229^{2}=0.213}

      κ=0.3780.21310.213=0.210κ=0.3780.21310.213=0.210{\displaystyle \kappa ={\frac {0.378-0.213}{1-0.213}}=0.210}\kappa ={\frac {0.378-0.213}{1-0.213}}=0.210

  • Fleiss' Kappa 계수 등급은 다음과 같이 표현된다. (Cohen's Kappa 계수 등급과 동일하다.)

  • 코드(https://github.com/Shamya/FleissKappa/blob/master/fleiss.py)

    def fleissKappa(rate,n):
      """ 
      Computes the Kappa value
      @param rate - ratings matrix containing number of ratings for each subject per category 
      [size - N X k where N = #subjects and k = #categories]
      @param n - number of raters   
      @return fleiss' kappa
      """
    
      N = len(rate)
      k = len(rate[0])
      print("#raters = ", n, ", #subjects = ", N, ", #categories = ", k)
      checkInput(rate, n)
    
      #mean of the extent to which raters agree for the ith subject 
      PA = sum([(sum([i**2 for i in row])- n) / (n * (n - 1)) for row in rate])/N
      print("PA = ", PA)
      
      # mean of squares of proportion of all assignments which were to jth category
      PE = sum([j**2 for j in [sum([rows[i] for rows in rate])/(N*n) for i in range(k)]])
      print("PE =", PE)
      
      kappa = -float("inf")
      try:
          kappa = (PA - PE) / (1 - PE)
          kappa = float("{:.3f}".format(kappa))
      except ZeroDivisionError:
          print("Expected agreement = 1")
    
      print("Fleiss' Kappa =", kappa)
      
      return kappa

2. Krippendorff's α\alpha(KLUE)

  • Krippendorff에 의해 제안된 평가자 간 신뢰도를 측정하는 통계적 측정값이다.
  • 코더 간 일치 측정, 평가자 간 신뢰도, 주어진 단위 세트에 대한 코딩(레이블링) 신뢰도 등에 사용

좋은 웹페이지 즐겨찾기