【问题标题】:How to prepare data for spacy's custom named entity recognition?如何为 spacy 的自定义命名实体识别准备数据?
【发布时间】:2019-12-16 07:23:09
【问题描述】:

我正在尝试使用 spacy 为自定义命名实体识别准备一个训练数据集。我的数据有一个变量“Text”,其中包含一些句子,一个变量“Names”,其中包含来自前一个变量(句子)的人名。在浏览了一些示例和 spacy 的文档之后,我意识到在准备数据集时必须传递实体的索引。我想知道在准备数据集时是否有任何方法可以直接将实体作为字符串传递?

参考:“https://medium.com/@manivannan_data/how-to-train-ner-with-custom-training-data-using-spacy-188e0e508c6

【问题讨论】:

    标签: python-3.x nlp spacy named-entity-recognition


    【解决方案1】:

    不,spaCy 将需要您的实体字符串的确切开始和结束索引,因为字符串本身可能并不总是在源文本中唯一标识和解析。例子:

    • Apple 通常是 ORG,但也可以是 PERSON。
    • Ann 是 PERSON,但不在 Annotation tools are best for this purpose.

    在python中,你可以使用re模块来获取索引:

    >>> import re
    >>> [m.span() for m in re.finditer('Amazon', 'The Amazon is a river in South America.  Amazon Inc is a company.')]
    [(4, 10), (41, 47)]
    
    

    在创建 spaCy 训练集之前,您必须检查并验证索引。

    【讨论】:

    • 所以将名称作为实体列并没有真正的帮助?无论如何,我将不得不使用您提到的正则表达式在“文本”列中找到该单词的索引,对吧?
    • 另外,有时我有多个实体。如何处理?
    • 是的,您必须找到索引,您可以使用描述的 re 模块以编程方式执行此操作,但是您必须手动消除训练集中的误报。请注意,在 TRAIN_DATA 中,entities 是一个列表,因此您可以继续添加实体元组:TRAIN_DATA = [('The Amazon is a river in South America. Amazon Inc is a company.', {entities: [(4,10,'LOC'),(41,47,'ORG')]}), ...]
    猜你喜欢
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多