我需要为 Spacy NER 做任何文本清理吗?

Do I need to do any text cleaning for Spacy NER?

我是 NERSpacy 的新手。试图找出需要进行文本清理的内容(如果有的话)。似乎有些例子我发现 trim 前导和尾随空格,然后与 start/stop 索引混为一谈。我看到一个例子,那个家伙做了一堆清理工作,他的准确性非常差,因为所有的索引都乱七八糟。

澄清一下,数据集是用 DataTurks 注释的,所以你得到 json 这样的:

        "Content": <original text>
        "label": [
            "Skills"
        ],
        "points": [
            {
                "start": 1295,
                "end": 1621,
                "text": "\n• Programming language...

所以通过“处理索引”,我的意思是,如果你去掉前导 \n,你需要更新起始索引,所以它仍然正确对齐。

所以这才是真正的问题,如果我开始从开头、结尾或中间删除字符,我需要将规则应用于内容属性并调整 start/end 索引以匹配,不是吗?我猜一个明显的“是”:),所以我想知道需要做多少清洁工作。

所以您要删除 \n、项目符号、前导/尾随空格,但保留标准标点符号,如逗号、句号等?

小写、停用词、词形还原等东西怎么样?

我在看过的几个示例中看到的一个问题是,start/stop 索引确实会被它们所做的清理丢弃,因为您需要在删除时更新每个注释字符以保持同步。

A 0 -> 100
B 101 -> 150

如果我在position 50处删除了一个char,那么我需要调整B to 100 -> 149

首先,spaCy 不对输入进行任何转换 - 它按原样接受输入并保留格式。因此,当您向 spaCy 提供文本时,您不会丢失任何信息。

也就是说,如果输入的是没有奇怪标点符号的自然句子(例如报纸文章),使用预训练管道输入 spaCy 的效果最好,因为这就是 spaCy 的训练数据的样子。

为此,您应该删除无意义的白色 space(如换行符、前导和尾随 spaces)或格式化字符(可能是一行 ----?),但是这就是您必须做的所有清理工作。 spaCy 训练数据不会有项目符号,所以它们可能会得到一些奇怪的结果,但我会把它们留在开始。 (此外,项目符号显然是可打印字符 - 也许您的意思是非 ASCII?)

我不知道您所说的“处理索引”是什么意思,但是对于一些较旧的 NLP 方法,通常会进行更广泛的预处理,例如删除停用词和将所有内容小写。这样做会使 spaCy 的情况变得更糟,因为它使用您正在删除的信息作为线索,就像人类 reader 一样。

请注意,您可以训练自己的模型,在这种情况下,他们会了解您向他们展示的文本类型。在那种情况下,您可以完全摆脱预处理,但对于实际上没有意义的东西,例如换行符/前导和跟随 spaces,您还是可以删除它们。


简要说明您的新信息...

是的,如果您进行预处理,则必须更新 NER 标签的字符索引。如果不更新它们将无法使用。

您似乎在尝试从简历中提取“技能”。那有很多要点列表。 spaCy 训练数据是报纸文章,其中不包含任何类似的列表,所以很难说什么是正确的做法。我认为项目符号没有多大关系,但您可以尝试删除或不删除它们。

What about stuff like lowercasing, stop words, lemmatizing, etc?

我已经解决了这个问题,但是不要这样做。这在历史上是 NLP 模型的常见做法,但对于包括 spaCy 在内的现代神经模型,它是毫无帮助的。