2017-04-30 5 views
1

그래서 내 요구 사항은 구두로 간단합니다. StanfordCoreNLP 기본 모델과 커스텀 엔티티 기반 맞춤 교육 모델이 필요합니다.Tokenizer Training with StanfordNLP

된 노력 내가 : - -이 : 그래서 내가 사용하고 싶었 최종 실행, 나는 내 노력이

은 다음 (RegexNER가 사용됩니다) 주어진 문장에서 특정 문구를 분리 할 수 ​​있어야합니다 StanfordCoreNLP CRF 파일, tagger 파일 및 ner 모델 파일과 함께 맞춤형 교육용 모델을 제공합니다. 이 일을하는 공식적인 방법이 있는지 찾아 보려고했지만 아무것도 얻지 못했습니다. StanfordCoreNLP 파이프 라인에는 "ner.model"속성이 있지만 사용 된 경우 기본값을 건너 뜁니다.

된 노력 II : - 다음으로, 모델

stanford-corenlp-models-3.7.0.jar
을 추출하고, 모든 복사 (지금까지 가장 똑똑한 것은하지 않을 수도 있습니다 죄송합니다 그냥 사람이 생계를 만들려고.!!) : -


*.ser.gz (Parser Models) 
*.tagger (POS Tagger) 
*.crf.ser.gz (NER CRF Files) 
을 다음과 같이

하고, 속성 "parser.model", "pos.model"와 "ner.model"각각에 쉼표로 구분 된 값을 넣어 시도 : -


parser.model=models/ner/default/anaphoricity_model.ser.gz,models/ner/default/anaphoricity_model_conll.ser.gz,models/ner/default/classification_model.ser.gz,models/ner/default/classification_model_conll.ser.gz,models/ner/default/clauseSearcherModel.ser.gz,models/ner/default/clustering_model.ser.gz,models/ner/default/clustering_model_conll.ser.gz,models/ner/default/english-embeddings.ser.gz,models/ner/default/english-model-conll.ser.gz,models/ner/default/english-model-default.ser.gz,models/ner/default/englishFactored.ser.gz,models/ner/default/englishPCFG.caseless.ser.gz,models/ner/default/englishPCFG.ser.gz,models/ner/default/englishRNN.ser.gz,models/ner/default/englishSR.beam.ser.gz,models/ner/default/englishSR.ser.gz,models/ner/default/gender.map.ser.gz,models/ner/default/md-model-dep.ser.gz,models/ner/default/ranking_model.ser.gz,models/ner/default/ranking_model_conll.ser.gz,models/ner/default/sentiment.binary.ser.gz,models/ner/default/sentiment.ser.gz,models/ner/default/truecasing.fast.caseless.qn.ser.gz,models/ner/default/truecasing.fast.qn.ser.gz,models/ner/default/word_counts.ser.gz,models/ner/default/wsjFactored.ser.gz,models/ner/default/wsjPCFG.ser.gz,models/ner/default/wsjRNN.ser.gz 
ner.model=models/ner/default/english.all.3class.caseless.distsim.crf.ser.gz,models/ner/default/english.all.3class.distsim.crf.ser.gz,models/ner/default/english.all.3class.nodistsim.crf.ser.gz,models/ner/default/english.conll.4class.caseless.distsim.crf.ser.gz,models/ner/default/english.conll.4class.distsim.crf.ser.gz,models/ner/default/english.conll.4class.nodistsim.crf.ser.gz,models/ner/default/english.muc.7class.caseless.distsim.crf.ser.gz,models/ner/default/english.muc.7class.distsim.crf.ser.gz,models/ner/default/english.muc.7class.nodistsim.crf.ser.gz,models/ner/default/english.nowiki.3class.caseless.distsim.crf.ser.gz,models/ner/default/english.nowiki.3class.nodistsim.crf.ser.gz 
pos.model=models/tagger/default/english-left3words-distsim.tagger 

, 나는 다음과 같은 예외를 얻을 : -


Caused by: edu.stanford.nlp.io.RuntimeIOException: Error while loading a tagger model (probably missing model file) 
Caused by: java.io.StreamCorruptedException: invalid stream header: EFBFBDEF 

된 노력 III : - 나는 RegexNER으로 처리 할 수있을 것입니다 생각, 내가 어느 정도 성공 . RegexNER를 통해 배우는 엔티티인데 앞으로 나오는 표현식에는 적용되지 않습니다. 예 : 텍스트 내에서 "CUSTOM_ENTITY"엔티티를 찾을 수 있지만,

([ {ner:CUSTOM_ENTITY} ] /with/ [ {ner:CUSTOM_ENTITY} ])
과 같은 RegexNER를 넣으면 올바른 구문을 찾는 데 성공하지 못합니다.

정말 도움이 필요합니다. !!! 나는 완전한 모델을 다시 훈련시키고 싶지 않다. 스탠포드 사람들은 나에게 유용한 모델 정보를 GB 이상 가지고있다. 그냥 커스텀 엔티티도 추가하고 싶습니다.

+0

죄송합니다! 어떻게 변경합니까? 이것은 OpenNLP가 아닌 StanfordNLP를위한 것입니다. – user3279692

+0

답변이 없으므로 주석으로 달았습니다. 실제로는 classpath에 corenlp-models.jar 파일을 포함시키는 것이 훨씬 쉽습니다. 모델에 대한 사용자 지정 경로를 지정할 필요가 없습니다. 발생한 문제는 손상된 POS 모델 파일 인 것 같습니다. 정확히 무엇이 잘못되었는지는 분명하지 않습니다 (아마도 gzip 파일을 기대하고 있을까요?). –

답변

1

먼저 CLASSPATH에 올바른 jar가 있는지 확인하십시오.

java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner -ner.model <csv-of-model-paths> -file example.txt 

-ner.model이 사용하고자하는 모든 모델의 쉼표로 구분 된 목록으로 설정해야합니다 : 여기

는 사용자 정의 훈련 NER 모델을 포함하는 방법이다. 표준 모델의 모든 실행됩니다, 그리고 마지막으로 사용자 정의 모델이 실행됩니다 내 예제에서

edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz,edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz,edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz,/path/to/custom_model.ser.gz 

참고 : 여기에

는 넣을 수 있는지의 예입니다. 사용자 정의 모델이 CLASSPATH에 있는지 확인하십시오.

명령에 -ner.combinationMode HIGH_RECALL을 추가해야 할 수도 있습니다. 기본적으로 NER 조합은 첫 번째 모델의 특정 클래스에 대해서만 태그를 사용합니다. 따라서 model1, model2, model3이있는 경우 model1의 LOCATION 만 사용됩니다. 물건을 HIGH_RECALL으로 설정하면 model2 및 model3의 LOCATION 태그도 함께 사용됩니다.

유의할 점은 model2는 model1에 의한 결정을 덮어 쓸 수 없다는 것입니다. "O"만 덮어 쓸 수 있습니다.그래서 model1이 특정 토큰이 LOCATION이라고 말한다면, model2는 그것이 ORGANIZATION이나 PERSON 또는 뭐라고 말할 수 없습니다. 따라서 목록에있는 모델의 순서가 중요합니다.

는 이전 규칙에 의해 발견 엔티티를 사용하는 규칙을 작성하려는 경우, 당신은이 질문에 대한 내 대답에 보일 것입니다 :

잘못된 제목에 대한

TokensRegex rules to get correct output for Named Entities