Набор инструментов Stanford NER - распознавание строчных букв

Я новичок в НЛП и пытаюсь понять, как распознаватель именованных сущностей аннотирует именованные сущности. Я экспериментирую с инструментарием Stanford NER. Когда я использую NER в стандартных более формальных наборах данных, где соблюдаются все соглашения об именах для представления именованных сущностей, например, в новостных лентах или новостных блогах, NER правильно аннотирует сущности. Однако, когда я запускаю NER с неофициальными наборами данных, такими как twitter, где именованные объекты могут быть написаны не с заглавной буквы, как должно было быть, NER не аннотирует объекты. Классификатор, который я использую, представляет собой сериализованный классификатор 3-CRF. Может ли кто-нибудь сообщить мне, как я могу заставить NER распознавать строчные сущности тоже ?? Мы очень благодарны за любые полезные предложения о том, как взломать NER и где это улучшить. Заранее спасибо за вашу помощь.


person Anu    schedule 20.11.2010    source источник
comment
Вы тренируетесь на помеченных твитах или пытаетесь использовать уже существующую модель, которая, вероятно, уже обучена тексту новостной ленты?   -  person Ken Bloom    schedule 15.12.2010


Ответы (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')
person Avi    schedule 12.12.2014

Боюсь, что нет простого способа заставить обученные модели, которые мы распространяем, игнорировать информацию о случаях во время выполнения. Так что да, они обычно маркируют имена только с заглавной буквы. Можно было бы обучить модель без регистра, которая будет работать разумно (но не так хорошо с регистром текста, поскольку регистр является важной подсказкой на английском языке (но не на немецком, китайском, арабском и т. Д.).

person Christopher Manning    schedule 15.12.2010
comment
Пересмотренный ответ: сейчас мы распространяем беспричинные модели для некоторых наших инструментов, которые будут работать намного лучше с текстом без регистра. (Хотя это не так хорошо, как запускать модели с регистром для текста с регистром, поскольку использование заглавных букв дает полезную информацию на английском языке!) Вы можете загрузить их отдельно отсюда: nlp.stanford.edu/software/CRF-NER.shtml. - person Christopher Manning; 20.06.2012
comment
И теперь у нас есть верный случай. Теперь вы можете найти более подробный ответ на этот вопрос здесь: stackoverflow.com/questions/45097507/ - person Christopher Manning; 06.10.2017

Наряду с предложениями других людей. Если вы используете классификатор на основе признаков, я бы определенно добавил 100-200 наиболее распространенных подстрок из 3-4 букв в имена людей или сделал gazzeteer под одной распознанной функцией. Есть определенные закономерности, которые непременно проявляются в личных именах, но не очень часто появляются в других типах слов, таких как «eli».

person John Cadigan    schedule 07.06.2012

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

Возможно, теги PArt of Speech и частотный анализ могут быть использованы для улучшения определения имен собственных?

person winwaed    schedule 20.11.2010
comment
Спасибо за ответ. Что я планирую сделать, так это использовать новый набор функций, который включает в себя объекты как заглавными, так и строчными буквами, чтобы сгенерировать серайзер Stanford NLP, а затем использовать Stanford NER для его аннотирования. Он должен был сработать, как я полагаю, но каким-то образом после того, как я все заработал, получу сериализатор и запустил на нем stanford NER, назвав все сущности PERSON, хотя у меня есть только одна сущность, аннотированная как PERS в тарировании данных. - person Anu; 21.11.2010
comment
Я полагаю, что POS-теги были бы лучше, но я уже слишком далеко использую Stanford NER, и мне любопытно поработать над ним, чтобы он работал и для строчных букв. - person Anu; 21.11.2010

Вопрос немного устарел, но кто-то другой может извлечь выгоду из этой идеи.

Один из способов потенциально обучить классификатор для нижнего регистра - запустить классификатор верхнего регистра, который у вас уже есть, для большого набора данных на правильном английском языке, а затем обработать этот текст с тегами, чтобы удалить регистр. Тогда у вас есть помеченный корпус, который вы можете использовать для обучения нового классификатора. Этот новый классификатор не будет идеальным против Twitter из-за особенностей твитов, но это быстрый способ его запустить.

person Curtis    schedule 15.06.2012