Объединение выходов модели CRFClassifier и RegexNERSequenceClassifier - Stanford Core NLP - PullRequest
0 голосов
/ 08 января 2020

Я сериализовал модель CRF с использованием CRFClassifier на основе пользовательского набора данных. Я могу получить доступ к модели, используя приведенный ниже код.

CRFClassifier<CoreLabel> crfClassifier = CRFClassifier.getClassifierNoExceptions("crf_ner_model.ser.gz");

У меня также есть набор сопоставлений регулярных выражений (Java Регулярные выражения и соответствующие метки ), с помощью которых я создаю экземпляр из RegexNERSequenceClassifier

RegexNERSequenceClassifier regexNERSequenceClassifier = new RegexNERSequenceClassifier(mappingPath, true, true, null);

Я могу по отдельности вызвать classify() для обоих этих классификаторов, и они успешно аннотируют набор тестовых данных. Пример:

List<CoreLabel> testData = new ArrayList<CoreLabel>();
// assume testData is initialized with values.

List<CoreLabel> crfOutput = crfClassifier.classify(testData);
List<CoreLabel> regexOutput = regexNERSequenceClassifier.classify(testData);

Пример вывода с использованием приведенного выше кода:

Входные данные испытаний : деревянная кровать 72 x 60

crfOutput : 72" (label: O), x (label: O), 60" (label: O), wooden (label: material), bed (label: category)

(label: O) - символ фона

regexOutput : 72" (label: UNIT_OF_LENGTH), x, 60" (label: UNIT_OF_LENGTH), wooden, bed

Однако, когда я пытаюсь объединить их, так что тестовый документ сначала классифицируется по CRF, а затем по RegexNER, он не работает ( RegexNER ничего не помечает, даже если есть токены, соответствующие регулярному выражению, видны только теги CRF ). Пример:

List<CoreLabel> crfOutput = crfClassifier.classify(testData);
// send crfOutput as input to RegexNER
List<CoreLabel> regexOutput = regexNERSequenceClassifier.classify(crfOutput);

Как объединить два классификатора. Я попытался использовать NERClassifierCombiner. java (как описано здесь: Stanford NER: Могу ли я использовать два классификатора одновременно в моем коде? ), но это тоже не работает.

...