训练 NER 模型的最佳方法是什么?

数据挖掘 Python nlp 数据 训练 命名实体识别
2022-03-14 15:13:48

我正在尝试使用 NLP 做一个项目。我的目标是处理这样的网络威胁情报文章以提取信息,例如演员姓名、恶意软件和使用的工具……

为此,我想使用 NER。但是,网络上没有可用的训练数据。所以我想知道我是否应该手动处理 10-20 篇文章来制作我的训练数据,或者我是否可以做一些事情,比如只取“Rancor conducted at least two rounds of attacks intending to install Derusbi or KHRat malware on victim systems”多篇文章中有趣的行,然后用另一个演员替换组名。通过这种方式,我可以通过已知参与者的数量对我的训练数据进行重复数据删除。但这样做,只有演员的名字在改变。所以,上下文总是相同的。

考虑到可用的训练数据量,我想知道训练我的模型的最佳方法是什么?

1个回答

我将首先在 NER 的可用数据集上训练一些非常强大的命名实体分类器。一个是Kaggle 上提供的用于命名实体识别的注释语料库。

此外,您可以在此处找到一个很好的数据集列表我知道它们与网络安全无关,但我认为将非常不同的来源整合到一个大型的最终数据集中是很重要的,这样才能建立一个擅长泛化它从未见过的文本的模型。

NER 任务的另一个数据来源是nltk库中可用的带注释的语料库,例如 Penn Treebank 数据集的免费部分和 Brown 语料库。

请注意,不同的数据集可能使用不同的类别进行分类(即,命名实体的集合可能因数据集而异)。确保在训练之前使所有数据与分类器兼容

之后,我建议你使用seq2seq模型。每个最先进的 RNN 都是某种形式的 seq2seq。训练分类器后,您可以尝试手动注释几篇文章,并检查模型在这些文章上的性能。这很耗时,但我个人喜欢这些“定性”检查,我认为它们可以告诉你很多。