由NER模型发现的实体的匿名化
我试图通过德语文本的NER模型来匿名文件,这些文本有时可能有几个英语单词.如果我采用德语和英语的Spacy NER模型,如de_core_News_sm和en_core_web_sm,它们会找到城镇名称或人,至少英语模型会找到"Dezember 2022",但它没有找到像"15.Dezember 2022"这样的完整日期.
更改实体识别
我不能更改模型的火柴.我认为我可以使用实体标尺来更改NER模型,但NER模型似乎是固定的,我不知道我自己的实体标尺如何才能超过Spacy NER模型,也不知道如何才能让任何实体标尺工作,即使我禁用了NER模型.我在Spacy管道中将实体标尺移到了NER模型之前,但在输出中没有看到任何新的替换项.
简单的例子,主要来自Using the entity ruler岁的主要空格指南:
from spacy.lang.de import German
nlp = German()
ruler = nlp.add_pipe("entity_ruler")
patterns = [
{"label": "DATE", "pattern": [
{"lower": {"regex": "(?:0?[1-9]|[12][0-9]|3[01])[\.\s]{1,2}?(jan(?:uar)?|feb(?:ruar)?|mär(?:z)?|apr(?:il)?|mai|jun(?:i)?|jul(?:i)?|aug(?: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)?|jul(?:i)?|aug(?:ust)?|sep(?:t(?:ember)?)?|okt(?:ober)?|nov(?: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(?:ember)?\.?)"}},
{"shape": "dd"},
{"TEXT": {"in": ["15"]}}
]},
{"label": "ORG1", "pattern": {"LOWER": "apple"}},
{"label": "GPE1", "pattern": {"LOWER": "san"}},
{"label": "DATE1", "pattern": {"TEXT": [{"regex": "^(?:0?[1-9]|[12][0-9]|3[01])$"}]}}
]
ruler.add_patterns(patterns)
# Taking the German Dezember here for the test of the German RegEx
doc = nlp("Apple eröffnet ein Büro in San Francisco am 15. Dezember 2022.")
输出:
[]
问题
我是否可以围绕命名实体识别(NER)空间模型编写代码,以捕获更多的日期模式(也作为日期实体),以便这将超过NER模型的 Select ?
其目的是将完整的"15.Dezember2022"作为一个日期实体找到.
PS
复制?
我找到了spacy how to add patterns to existing Entity ruler?,它告诉我重新训练自定义实体标尺,不要添加模式,因为提问者已经训练了NER模型:
我有一个现有的经过培训的定制NER模型,带有NER和实体标尺 管子.我想更新和重新培训这条现有的管道.
问题是"如何将模式添加到现有的实体统治者?"和我在这里问的差不多.但是由于NER模型是自定义的,答案告诉您使用这些模式重新训练NER模型.这就是为什么这里的问题希望不是重复的:我不能重新训练NER模型,因为它是从spaCy下载的现成的.
灾难性的遗忘?
请注意,这里的答案告诉你,如果你可以重新训练你的NER模型,就不要在NER模型中添加实体统治者,因为它可能会导致已经训练好的NER模型的"灾难性遗忘",请阅读这里了解更多.如果这是正确的,我想知道我在这里做什么,因为这意味着我不能将spaCy NER模型训练的实体识别与另一个实体统治者合并.我非常怀疑这是真的.为什么我不能判断文本中某些实体的某些模式,然后在此基础上运行spaCy NER模型,然后让第一个找到的实体超过第二个?如果我们谈论两个模型,为什么会导致灾难性的遗忘?灾难性遗忘意味着NER模型只在我作为实体统治者的新文本上进行重新训练.我的新输入文本将只是一个带有日期的句子.然后,就很容易发现灾难性遗忘是否发生了.我可以在一个句子上运行管道,这个句子除了日期之外还有更多的实体,看看会发生什么. 然而,我想我的 idea 是错误的,所以我们没有两个模型,而是一个实体识别模型,它是实体统治者和NER模型的合并.这也是我最初对实体统治者的理解.但即使这样,我仍然可以很容易地在灾难性遗忘中测试这一点:如果实体识别在一个大文件中变得更糟,那么我就知道存在灾难性遗忘.如果你问我,这听起来太奇怪了.我怀疑另一个问题的答案是否正确.