Анонимизация объектов, обнаруженных с помощью модели NER
Я пытаюсь анонимизировать файлы с помощью модели NER для немецкого текста, который иногда может содержать несколько английских слов. Если я возьму модели spaCy NER для немецкого и английского языков, такие как de_core_news_sm и en_core_web_sm, они найдут названия городов или людей, и, по крайней мере, английская модель найдет «Декабрь 2022», но не найдет полную дату, например «15. Декабрь 2022».
Изменение распознавания объекта
Я не могу изменить совпадения модели. Я думал, что могу использовать линейку объектов, чтобы изменить модель NER, но модель NER кажется фиксированной, и я не знаю, как моя собственная линейка объектов может перевесить модель SpaCy NER, а также, как я могу получить любую линейку объектов. работать вообще, даже если я отключу модель NER. Я сместил линейку сущностей перед моделью NER в конвейере spaCy, но новых замен в выводе не вижу.
Простой пример, в основном из основного руководства по SpaCy в разделе «Использование линейки объектов»:
из spacy.lang.de импортировать на немецком языке нлп = немецкий() линейка = nlp.add_pipe("entity_ruler") узоры = [ {"метка": "ДАТА", "шаблон": [ {"lower": {"regex": "(?:0?[1-9]|[12][0-9]|3[01])[\.\s]{1,2}?(jan (?:uar)?|февраль(?:ruar)?|мар(?:z)?|апрель(?:il)?|май|июнь(?:i)?|июль(?:i)?|август (?:ust)?|sep(?:t(?:ember)?)?|okt(?:ober)?|nov(?:ember)?|dez(?:ember)?)\.?\s ?['`]?\d{0,4}"}}, {"shape": {"regex": "(?:0?[1-9]|[12][0-9]|3[01])[\.\s]{1,2}?(0 ?[1-9]|1[0-2])\.?\s?['`]?\d{0,4}"}}, {"lower": {"regex": "(?:jan(?:uar)?|feb(?:ruar)?|mär(?:z)?|apr(?:il)?|mai|jun( ?:i)?|июл(?:i)?|август(?:уст)?|сентябрь(?:t(?:ember)?)?|okt(?:ober)?|ноябрь(?:ember) ?|dez(?:ember)?)\.?\s?['`]?\d{2,4}"}}, {"lower": {"regex": "(?:januar|feb(?:ruar)?|mär(?:z)?|apr(?:il)?|mai|jun(?:i)?| jul(?:i)?|aug(?:ust)?|sep(?:t(?:ember)?)?|okt(?:ober)?|nov(?:ember)?|dez(?: уголек)?\.?)"}}, {"форма": "дд"}, {"ТЕКСТ": {"в": ["15"]}} ]}, {"label": "ORG1", "pattern": {"LOWER": "apple"}}, {"label": "GPE1", "pattern": {"LOWER": "san"}}, {"label": "DATE1", "pattern": {"TEXT": [{"regex": "^(?:0?[1-9]|[12][0-9]|3[01] )$"}]}} ] правитель.add_patterns(шаблоны) # Берем немецкий декабрь для проверки немецкого RegEx doc = nlp("Apple eröffnet ein Büro в Сан-Франциско, 15 декабря 2022 г.") Выход:
[] Вопрос Могу ли я использовать в коде модель spaCy распознавания именованных объектов (NER), чтобы улавливать дальнейшие шаблоны дат также как объекты DATE, чтобы это перевешивало выбор модели NER?
Цель состоит в том, чтобы полное значение «15. Декабрь 2022 г.» находилось как один объект DATE.
ПС Дубликат?
Я нашел способ добавить шаблоны в существующую линейку Entity? это говорит мне переобучить пользовательскую линейку объектов и не добавлять шаблоны, поскольку спрашивающий обучил модель NER:
У меня есть обученная пользовательская модель NER с NER и Entity Ruler. трубы. Я хочу обновить и переобучить существующий конвейер.
Вопрос: «Как добавить шаблоны в существующую линейку Entity?» спрашивает более или менее то же самое, что и я здесь. Но поскольку модель NER является пользовательской, в ответах вам предлагается переобучить модель NER с использованием этих шаблонов. Вот почему этот вопрос, надеюсь, не является дубликатом: я не могу переобучить модель NER, поскольку она уже готова для загрузки из spaCy.
Катастрофическое забвение?
Имейте в виду, что ответы там говорят вам никогда не добавлять линейку объектов в модель NER, если вы можете переобучить свою модель NER, поскольку это может привести к «катастрофическому забвению» уже обученной модели NER, читайте там больше . Если это так, то мне интересно, что я здесь вообще делаю, поскольку это будет означать, что я не могу объединить распознавание сущностей, на котором обучается модель SpaCy NER, с другой линейкой сущностей. Я очень сомневаюсь, что это правда. Почему я не могу проверить текст на наличие шаблонов некоторых объектов, а затем запустить поверх этого модель spaCy NER, а затем позволить первым найденным объектам перевесить вторые? Почему это должно привести к катастрофическому забвению, если мы говорим о двух моделях? Катастрофическое забывание означает, что модель NER переобучается только на новом тексте, который я принимаю за линейку сущностей. Мой новый входной текст будет состоять из одного предложения с датой. Тогда было бы легко выяснить, происходит ли вообще катастрофическое забывание. Я могу просто запустить конвейер для предложения с большим количеством сущностей, кроме дат, и посмотреть, что произойдет. Тем не менее, я думаю, что мои мысли здесь неверны, поэтому у нас есть не две модели, а одна модель распознавания объектов, которая представляет собой слияние линейки объектов и модели NER. Именно так я вообще понимал правителя сущности. Но даже в этом случае я все равно могу легко проверить это на катастрофическом забывании: если распознавание объектов в большом файле становится намного хуже, то я знаю, что происходит катастрофическое забывание. Если вы спросите меня, это звучит слишком странно, чтобы быть правдой. Я сомневаюсь, что ответы на другой вопрос верны.