2017-02-09 5 views
0

Я новичок в библиотеке nltk, и я стараюсь научить мой классификатор некоторым ярлыкам своим собственным корпусом.NLTK MaxentClassifier поезд с отрицательными случаями

Для этого у меня есть файл с тегами IOB, как это:

How O 
do B-MYTag 
you I-MYTag 
know O 
, O 
where B-MYTag 
to O 
park O 
? O 

(PS Это только составил образец ...)

Я делаю это

self.classifier = nltk.MaxentClassifier.train(train_set, algorithm='megam', trace=0) 

и он работает.

Мой вопрос заключается в том, как обучать мой classifier с отрицательными случаями. Итак, у меня был бы похожий файл с тегами IOB, и я бы указал, что этот файл установлен неправильно. (Отрицательные веса)

Как это сделать?


EDIT:

Пример отрицательного случая будет:

How B-MYTag 
do O 
you O 
know O 
, O 
where B-MYTag 
to O 
park O 
? O 

После этого, я надеюсь, помнить, что как это, вероятно, не MyTag ... Причина этого заключается в том , чтобы узнать быстрее. Если бы я мог просто набирать инструкции, программа обрабатывала бы его и в конце спрашивала меня, удовлетворен ли я результатом. Если да, то этот текст будет добавлен в train_set, если бы он не был добавлен в negative_train_set. Таким образом, было бы легче и быстрее научить классификатора правильному делу.

+1

Можете ли вы привести пример отрицательных случаев? Я сомневаюсь, что это работает (концептуально) с пометкой последовательности. Я имею в виду, что вы ожидаете узнать из неправильных аннотаций? Положительные (B/I) и отрицательные (O) классы уже представлены в данных аннотациях. – lenz

+0

Ваше редактирование звучит так, как будто вы после рабочего процесса активного обучения. Конечно, вы можете сделать это вручную: пусть классификатор предсказывает что-то, корректирует метки вручную, добавляет его в набор тренировок, переучивается. Вы должны быть конкретными в отношении исправления: если вы только говорите, что «метки в этом предложении неверны», как классификатор должен знать, что первые три тега плохие, но, например. четвертый ('O' on" know ") правильный? – lenz

+0

Обратите внимание, что если у вас есть большой набор тренировок для начала, а затем вручную добавьте несколько исправленных вручную примеров, как я только что сказал, воздействие может быть очень маленьким. – lenz

ответ

1

Я предполагаю, что вы попробовали классификатор, увидели некоторые ошибки в результатах и ​​хотите вернуть неправильные выходы в качестве дополнительного ввода для обучения. Существуют алгоритмы обучения, которые оптимизируют, на основе которых ответы неверны или правильны (нейронные сети, правила Брилла), но классификатор MaxEnt не является одним из них. Классификаторы, которые работают таким образом, выполняют всю работу внутри: они помещают данные обучения, сравнивают результат с золотым стандартом, соответственно корректируют их веса или правила и повторяют снова и снова.

Вкратце: вы не можете использовать неправильные выходы в качестве набора учебных материалов. Идея даже не подходит для модели машинного обучения, поскольку данные обучения по предположению корректны, поэтому неверные входы имеют вероятность нуля. Сосредоточьтесь на улучшении вашего классификатора, используя лучшие функции, больше данных или другой движок.

+0

Спасибо. После некоторого размышления я вижу, что MaxEnt действительно не может работать с неправильным набором данных, потому что он не может вычислить энтропию из «неправильных» данных. Спасибо за ваш ответ. Прямо сейчас я храню все новые «заявления» в файле с тегами IOB, исправляю их вручную и вставляю их в учебный корпус.Вы пишете что-то о нейронных сетях. Это можно использовать с nltk? Я не знаю о них, ... у вас есть хорошие ссылки, чтобы проверить их? –

+0

Флагман POS-тегов nltk - 'PerceptronTagger()'. См. [Здесь] (https://explosion.ai/blog/part-of-speech-pos-tagger-in-python). – alexis

Смежные вопросы