Stanford CoreNLP: Как вы интегрируете стандартную, но обученную в России модель NER с полностью настраиваемыми моделями для лемматизации? - PullRequest
0 голосов
/ 17 марта 2019

В настоящее время я работаю над адаптацией алгоритма тегирования coreference для русского языка в рамках моего университетского проекта, основанного на Stanford CoreNLP.По большей части это было достаточно просто: уже существуют российские модели для лемматизации и PoS-тегов.Однако для языка не было модели NER, по крайней мере, основанной на CoreNLP, и поэтому мне пришлось самому обучать такую ​​модель с использованием статистических методов CoreNLP.

Проблема в том, чтобы адаптировать эту новую обученную модель NER кмодели лемматизации и PoS-мечения.Хотя моя модель была чисто статистической и все еще основывалась на исходном коде CoreNLP, две другие совершенно разные.Поэтому я не могу заставить мой NER интегрировать их.Как вы можете сделать это?Соответствующий код:

props.setProperty("annotators", "tokenize,ssplit,pos,custom.lemma,custom.morpho,custom.ner,depparse, mention, coref");
props.setProperty("pos.model", "edu/stanford/nlp/models/pos-tagger/russian-ud-pos.tagger");
props.setProperty("customAnnotatorClass.custom.lemma", "edu.stanford.nlp.international.russian.process.RussianLemmatizationAnnotator");
props.setProperty("custom.lemma.dictionaryPath", "edu/stanford/nlp/international/russian/process/dict.tsv");
props.setProperty("customAnnotatorClass.custom.morpho", "edu.stanford.nlp.international.russian.process.RussianMorphoAnnotator");
props.setProperty("customAnnotatorClass.custom.ner", "edu.stanford.nlp.international.russian.process.RussianMorphoAnnotator");
props.setProperty("custom.morpho.model", "edu/stanford/nlp/models/pos-tagger/russian-ud-mf.tagger");
props.setProperty("ner.model", "C:/Users/Admin/eclipse-workspace/Coreference-Evaluation-master/libs/russian-new-model.ser.gz");
props.setProperty("depparse.model", "edu/stanford/nlp/models/parser/nndep/nndep.rus.model.wiki.txt.gz");
props.setProperty("depparse.language", "russian");
props.setProperty("parse.maxlen", "100");
props.setProperty("ssplit.eolonly", "true");
props.setProperty("tokenize.whitespace","true");
props.setProperty("coref.removeSingletonClusters","false");
pipeline = new StanfordCoreNLP(props);
System.out.println(pipeline);

Прежде чем вы предложите мне полностью изменить алгоритм: мои знания Java на данный момент недостаточно хороши, чтобы внести такие радикальные изменения в уже существующий код.

1 Ответ

0 голосов
/ 18 марта 2019

Вам необходимо пометить данные обучения NER с помощью пользовательского лемматизатора и метки части речи. Также убедитесь, что токенизация такая же, как вы будете использовать во время тестирования. Затем обучите модель NER предсказанным леммам и тегам части речи. Предполагается, что вы используете эти функции в своей модели NER.

Если ваши обучающие данные NER не содержат данных о речи или лемме, конвейер должен просто отлично работать, поскольку модель NER не будет использовать эти функции для своих решений. Я не верю, что модели NER, которые мы распространяем, используют эти функции, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...