MANASLU8/CoreNLPRusModels

Как использовать модели, если в них нет classifier ?

Closed this issue · 3 comments

Здравствуйте! Пишу сюда, так как этот проект все еще поддерживается и я надеюсь, что здесь мне ответят быстрее, чем в issue конкретно там.

Я пытался использовать выложенные Вами модели, в частности:
-Из командной строки:
java -cp "C:\stanford-ner-2018-02-27*" -mx6g edu.stanford.nlp.ie.NERClassifierCombiner -ner.model nndep.rus .model81_mf.txt.gz,nndep.rus.model90.9_88.6.txt.gz,nndep.rus.modelMFAr100HS400_81.txt.gz,nndep.rus.modelMFWiki1 00HS400_80.txt.gz -serializeTo my-classification-model.ser.gz

-И в Java коде непосредственно с помощью:
classifier = new NERClassifierCombiner("C:\stanford\nndep.rus.model81_mf.txt.gz,nndep.rus.model90.9_88.6.txt.gz");

Однако в обоих случаях, я получаю уведомление о том, что внутри gz нету Classifier, вот ошибка:

java.io.StreamCorruptedException: invalid stream header: 64696374
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:862)
at java.io.ObjectInputStream.(ObjectInputStream.java:354)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1473)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1505)
at edu.stanford.nlp.ie.crf.CRFClassifier.getClassifier(CRFClassifier.java:2919)
at edu.stanford.nlp.ie.ClassifierCombiner.loadClassifierFromPath(ClassifierCombiner.java:286)
at edu.stanford.nlp.ie.ClassifierCombiner.loadClassifiers(ClassifierCombiner.java:270)
at edu.stanford.nlp.ie.ClassifierCombiner.(ClassifierCombiner.java:142)
at edu.stanford.nlp.ie.NERClassifierCombiner.(NERClassifierCombiner.java:127)
at edu.stanford.nlp.ie.NERClassifierCombiner.createNERClassifierCombiner(NERClassifierCombiner.java:272 )
at edu.stanford.nlp.ie.NERClassifierCombiner.main(NERClassifierCombiner.java:476)
Exception in thread "main" edu.stanford.nlp.io.RuntimeIOException: java.io.IOException: Couldn't load classifie r from nndep.rus.model81_mf.txt.gz
at edu.stanford.nlp.ie.NERClassifierCombiner.createNERClassifierCombiner(NERClassifierCombiner.java:275 )
at edu.stanford.nlp.ie.NERClassifierCombiner.main(NERClassifierCombiner.java:476)
Caused by: java.io.IOException: Couldn't load classifier from nndep.rus.model81_mf.txt.gz
at edu.stanford.nlp.ie.ClassifierCombiner.loadClassifierFromPath(ClassifierCombiner.java:296)
at edu.stanford.nlp.ie.ClassifierCombiner.loadClassifiers(ClassifierCombiner.java:270)
at edu.stanford.nlp.ie.ClassifierCombiner.(ClassifierCombiner.java:142)
at edu.stanford.nlp.ie.NERClassifierCombiner.(NERClassifierCombiner.java:127)
at edu.stanford.nlp.ie.NERClassifierCombiner.createNERClassifierCombiner(NERClassifierCombiner.java:272 )
... 1 more
Caused by: java.io.StreamCorruptedException: invalid stream header: 64696374
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:862)
at java.io.ObjectInputStream.(ObjectInputStream.java:354)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1473)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1505)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifier(AbstractSequenceClassifier.java:1495)
at edu.stanford.nlp.ie.ner.CMMClassifier.getClassifier(CMMClassifier.java:1141)
at edu.stanford.nlp.ie.ClassifierCombiner.loadClassifierFromPath(ClassifierCombiner.java:292)
... 5 more

Насколько я понимаю, иных путей использования моделей, нежели как с помощью Classifier нету, и поэтому я не понимаю, как использовать в таком случае Вашу разработку, не могли бы Вы написать как правильно использовать данные модули?

Здравствуйте, Вы судя по всему использовали NERClassifierCombiner, но наши модели никак не связаны с NER. Модели можно использовать с Stanford NN Dependency Parser, тут есть описание и примеры https://nlp.stanford.edu/software/nndep.shtml.
В качестве примера использования:
java -Xmx8g edu.stanford.nlp.parser.nndep.DependencyParser -model path/nndep.rus.modelMFWiki100HS400_80.txt.gz -tagger.model path/russian-ud-pos.tagger -testFile path/file.conll

Благодарю!
Разобрался))
Скажите, а в чем разница между russian-ud-mfmini.tagger, russian-ud-mf.tagger и russian-ud-pos.tagger

И что означают кодировки после обозначений NOUN ADJ, типа такого NOUN622?

И также чем отличаются nndep.rus.model81_mf.txt, nndep.rus.model90.9_88.6.txt, nndep.rus.modelMFAr100HS400_81.txt, nndep.rus.modelMFWiki100HS400_80.txt?

И извлекаются ли падежи, и в каком числе написано слово?

Это разные виды тэггера: russian-ud-pos.tagger - просто тэггер, russian-ud-mfmini.tagger - с основным списком morphological features, russian-ud-mf.tagger - с полным списком morphological features.
"И что означают кодировки после обозначений NOUN ADJ, типа такого NOUN622?"
Цифры как раз отражают morphological features.
"И извлекаются ли падежи, и в каком числе написано слово?"
Здесь можно посмотреть пример маппинга для russian-ud-mf.tagger https://github.com/MANASLU8/CoreNLP/blob/master/src/edu/stanford/nlp/international/russian/process/RussianMorphoAnnotator.java

"И также чем отличаются nndep.rus.model81_mf.txt, nndep.rus.model90.9_88.6.txt, nndep.rus.modelMFAr100HS400_81.txt, nndep.rus.modelMFWiki100HS400_80.txt"
Отличаются используемыми embedding'ами, количеством скрытых слоев (hidden layer), точностью, используемым тэггером при обучении моделей.