Я новичок в НЛП и пытаюсь понять, как распознаватель именованных сущностей аннотирует именованные сущности. Я экспериментирую с инструментарием Stanford NER. Когда я использую NER в стандартных более формальных наборах данных, где соблюдаются все соглашения об именах для представления именованных сущностей, например, в новостных лентах или новостных блогах, NER правильно аннотирует сущности. Однако, когда я запускаю NER с неофициальными наборами данных, такими как twitter, где именованные объекты могут быть написаны не с заглавной буквы, как должно было быть, NER не аннотирует объекты. Классификатор, который я использую, представляет собой сериализованный классификатор 3-CRF. Может ли кто-нибудь сообщить мне, как я могу заставить NER распознавать строчные сущности тоже ?? Мы очень благодарны за любые полезные предложения о том, как взломать NER и где это улучшить. Заранее спасибо за вашу помощь.
Набор инструментов Stanford NER - распознавание строчных букв
Ответы (5)
Я знаю, что это старый поток, но надеюсь, что это кому-то поможет. Как ответил Кристофер Мэннинг, способ обнаружить строчные буквы - это заменить english.muc.7class.distsim.crf.ser.gz на english.muc.7class.caseless.distsim.crf.ser.gz, которое вы можете получить, когда разархивируйте основной jar-файл nlp без регистра.
Например, в моем файле python я сохранил все то же самое, кроме перехода на новый файл, и он отлично работает (ну, большую часть времени)
st = NERTagger('/Users/username/stanford-corenlp-python/stanford-ner-2014-10-26/classifiers/english.muc.7class.caseless.distsim.crf.ser.gz', '/Users/username/stanford-corenlp-python/stanford-ner-2014-10-26/stanford-ner.jar')
Боюсь, что нет простого способа заставить обученные модели, которые мы распространяем, игнорировать информацию о случаях во время выполнения. Так что да, они обычно маркируют имена только с заглавной буквы. Можно было бы обучить модель без регистра, которая будет работать разумно (но не так хорошо с регистром текста, поскольку регистр является важной подсказкой на английском языке (но не на немецком, китайском, арабском и т. Д.).
Наряду с предложениями других людей. Если вы используете классификатор на основе признаков, я бы определенно добавил 100-200 наиболее распространенных подстрок из 3-4 букв в имена людей или сделал gazzeteer под одной распознанной функцией. Есть определенные закономерности, которые непременно проявляются в личных именах, но не очень часто появляются в других типах слов, таких как «eli».
Я думаю, что Твиттер будет очень трудным для этого приложения. Заглавные буквы - это большая подсказка, которой, как вы говорите, часто не хватает в Твиттере. Проверка словаря для удаления правильных английских слов имеет ограниченное применение, потому что тексты Twitter содержат огромное количество сокращений и часто уникальны.
Возможно, теги PArt of Speech и частотный анализ могут быть использованы для улучшения определения имен собственных?
Вопрос немного устарел, но кто-то другой может извлечь выгоду из этой идеи.
Один из способов потенциально обучить классификатор для нижнего регистра - запустить классификатор верхнего регистра, который у вас уже есть, для большого набора данных на правильном английском языке, а затем обработать этот текст с тегами, чтобы удалить регистр. Тогда у вас есть помеченный корпус, который вы можете использовать для обучения нового классификатора. Этот новый классификатор не будет идеальным против Twitter из-за особенностей твитов, но это быстрый способ его запустить.