NLTKでアノテーター間の合意度(Inter Annotator Agreement)[NLTK]
NERに使うタグ付けデータをアウトソースにより作成したのだが,アノテーションの信頼度が分からない.
このため,NLTKでアノテーター間の合意度を算出した.これはその時のメモである.
3人のアノテーターが付けたラベルに対し,Cohen’s kappa(1960)とKrippendorff alpha(1980)を算出してみる.
from nltk.metrics import agreement toy_data = [['1', 5723, 'ORG'], ['2', 5723, 'ORG'], ['3', 5723, 'ORG'], ['1', 55829, 'LOC'], ['2', 55829, 'LOC'], ['3', 55829, 'ORG'], ['1', 259742, 'PER'], ['2', 259742, 'LOC'], ['3', 259742, 'PER'], ['1', 269340, 'PER'], ['2', 269340, 'LOC'], ['3', 269340, 'LOC']] task = agreement.AnnotationTask(data=toy_data) task.kappa() >> 0.2929292929292929 task.alpha() >> 0.2978723404255319
ここまでできたはいいが,3人のアノテーションが入力であった場合にもkappaが算出できているのがなぜだか分からない.
本来,kappaは2人の間の合意度を算出するものであるからだ.3人以上の時には,Fleiss’ Kappaという手法が存在するらしいのだが,nltkにも実装されているのか?
nltkのソースコードを調べてみると,以下のようにmulti kappaの記述と,Fleissの名前がコメントアウトにあったので,どうやら3人以上にも対応してるみたい.
def multi_kappa(self): """Davies and Fleiss 1982 Averages over observed and expected agreements for each coder pair. """ Ae = self._pairwise_average(self.Ae_kappa) return (self.avg_Ao() - Ae) / (1.0 - Ae)
nltk.metrics.agreement — NLTK 3.4.4 documentation
ついでにkappaに関するブログも載せる
ディスカッション
コメント一覧
まだ、コメントがありません