Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 训练斯帕西·斯帕纳学习印度名字_Python_Python 3.x_Nlp_Spacy_Ner - Fatal编程技术网

Python 训练斯帕西·斯帕纳学习印度名字

Python 训练斯帕西·斯帕纳学习印度名字,python,python-3.x,nlp,spacy,ner,Python,Python 3.x,Nlp,Spacy,Ner,我正试图定制Spacy的NER来识别印度人的名字。 遵循本指南,这是我正在使用的数据集 根据规范,我应以以下格式提供培训数据: TRAIN_DATA = [ ('Shivani', { 'entities': [(0, 6, 'PERSON')] }), ('Isha ', { 'entities': [(0,3 , 'PERSON')] }) ] 我如何向Spacy提供12000个名称的培训数据,因为手动指定每个实体将是一件繁琐

我正试图定制Spacy的NER来识别印度人的名字。 遵循本指南,这是我正在使用的数据集

根据规范,我应以以下格式提供培训数据:

TRAIN_DATA = [
    ('Shivani', {
        'entities': [(0, 6, 'PERSON')]
    }),
    ('Isha ', {
        'entities': [(0,3 , 'PERSON')]
    })
]

我如何向Spacy提供12000个名称的培训数据,因为手动指定每个实体将是一件繁琐的工作?是否有其他工具可用于标记所有名称?

如果您试图找出名称的索引,那么它非常简单

(0, len(name.split(sep=',')[0])-1)

您缺少为自定义名称培训NLP库的要点。培训数据必须是一个培训条目列表,每个条目都有一个句子文本,其中包含已识别名称的位置。请再次查看培训数据示例,了解您需要如何提供完整的句子,而不仅仅是名称

Spacy并不是一个匹配工具。你最好用其中的一些名字造出100个句子,然后在这些带注释的句子上训练空格。您可以根据需要添加更多完整的句子示例以提高准确性。Spacy的本地名称NER功能强大,不需要12000个示例


@AKU 35下面的答案提供了如何提供标有姓名位置的训练句子的示例。

您当前提供训练数据的格式不会给您带来好的结果。Spacy需要如下所示格式的数据

TRAIN_DATA = [
('Shivani lives in chennai', {
        'entities': [(0, 6, 'PERSON')]
    }),
 ('Did you talk to Shivani yesterday', {
        'entities': [(16, 22, 'PERSON')]
    }),

    ('Isha bought a new phone', {
        'entities': [(0,3 , 'PERSON')]
    })

]
请参阅文档。关于自动注释12000个条目的问题,有一些工具可以帮助您快速注释数据。您可以使用(与spacy相同的开发人员),但这是一项付费服务。你可以在行动中看到它。
如果您放弃使用NER,那么模式匹配也可能对您很有用,如果您只需要在文档中查找名称,如果操作正确,也会更快更准确

如@ak_35所述,训练数据需要采用spaCy格式。
一种方法是使用,它提供了一个简单的UI来注释您感兴趣的实体(即个人):

注释相关名称后,可以通过执行以下操作查看输出:

# Output
dd['annotations'][0]

打开csv文件,使用
csv.reader
读取每一行,创建一个具有
(名称,{'entities':[(x,y,'PERSON')]}
的元组,或者无论值是什么,都将其附加到
训练数据中。这里没有什么特别复杂的东西,但是如果你尝试了它,却在某个地方卡住了,你可以向我们展示你的代码,以及它在哪里出错。这不是问题所在。
# Output
dd['annotations'][0]