2017-02-09 10 views
0

저는 nltk 라이브러리에서 새로 왔으며 분류 자에게 내 자신의 코퍼스로 일부 라벨을 가르치려고합니다.NLTK 부정적인 케이스가있는 MaxentClassifier 기차

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) 
에 의해이 들어

이 같은 IOB 태그 파일이

그리고 작동합니다.

내 질문은 내 classifier 네거티브 케이스를 훈련시키는 방법입니다. 그래서 비슷한 파일을 IOB 태그로 사용하고이 파일이 잘못 설정되었다. (음수 가중치)

어떻게하면됩니까?


편집 : 부정 사건에 대한

예는 다음과 같습니다 그 후

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")는 정확합니까? – lenz

+0

큰 훈련을 시작한 다음 수동으로 수정 한 몇 가지 예제를 방금 제안한대로 수동으로 추가하면 영향이 미미할 수 있습니다. – lenz

답변

1

나는 분류자를 시도하고, 결과에서 몇 가지 오류를 보았으며, 잘못된 출력을 추가 교육 입력으로 피드백하려고한다고 생각합니다. 정답이 잘못되었거나 옳은 (신경망, 브릴 규칙) 것을 기본으로 최적화하는 학습 알고리즘이 있지만 MaxEnt 분류자는 그 중 하나가 아닙니다. 이와 같이 작동하는 분류자는 내부적으로 모든 작업을 수행합니다. 트레이닝 데이터에 태그를 지정하고, 결과를 금 표준과 비교하고, 가중치 또는 규칙을 적절하게 조정하고, 반복합니다.

간단히 말해서, 잘못된 결과를 학습 데이터 세트로 사용할 수 없습니다. 훈련 데이터는 가정에 따라 정확하므로 잘못된 입력이 확률이 0이므로 아이디어는 기계 학습 모델에 맞지 않습니다. 더 나은 기능, 더 많은 데이터 또는 다른 엔진을 사용하여 분류자를 개선하는 데 집중하십시오.

+0

감사합니다. 몇 가지 생각을하고 나면, "잘못된"데이터로부터 엔트로피를 계산할 수 없기 때문에 MaxEnt는 잘못된 데이터 세트로는 실제로 작동하지 않는다는 것을 알 수 있습니다. 답변 주셔서 감사합니다. 지금은 모든 새로운 "문장"을 IOB 태그로 파일에 저장하고 직접 수정 한 다음 훈련 자료에 삽입합니다.당신은 신경망에 대해 뭔가 쓸 수 있습니다. 이것은 nltk에서 사용할 수 있습니까? 나는 그들에 대해 알지 못한다. ... 그들을 확인하기위한 좋은 링크가 있니? –

+0

nltk의 defalt POS tagger는 PerceptronTagger()입니다. [here] (https://explosion.ai/blog/part-of-speech-pos-tagger-in-python)를 참조하십시오. – alexis