2015-09-23 2 views
0

У меня задача вычислить inter-annotator agreement в multi-label classification, где для каждого примера может быть назначено более одной метки. Я обнаружил, что NLTK может измерить соглашение на основе метрики расстояния.Соглашение NLTK с метрикой расстояния

Я ищу пример вычисления krippendorff alpha с расстоянием MASI.

Это то, что у меня есть.

import nltk 
from nltk.metrics import masi_distance 


toy_data = [['1', 5723, [1,2]],['2', 5723, [2,3]]] 

task = nltk.metrics.agreement.AnnotationTask(data=toy_data, distance=masi_distance) 
print task.alpha() 

Этот код не с

TypeError: unhashable type: 'list' 

Очевидно, что следующее не работает в.

toy_data = [['1', 5723, set([1,2])],['2', 5723, set([2,3])]] 

У вас есть рабочий стол? Спасибо!

ответ

0

Я думаю, что данные должны быть список кортежей, а не список списков (кортежи hashable, списки не являются), попробуйте:

toy_data = [('1', 5723, (1,2)),('2', 5723, (2,3))] 

(я сделал значения кортежей вместо списков тоже в случай, который может также быть проблемой)

+0

Это терпит неудачу с сообщением об ошибке AttributeError: «кортеж» объект не имеет атрибута «пересечения», кроме того, это не только кортежи, он может быть больше, чем два значения. – com

+0

Сообщение об ошибке указывает, что по какой-то причине ему нужен «frozenset». – alexis

1

Чтобы быть более точным, то, что должно быть фризонсет (как указал @alexis), является только третьим членом тройки, это метки, назначенные этому элементу.

toy_data = [['1', 5723, frozenset(1,2)],['2', 5723, frozenset(2,3)]] 
Смежные вопросы