将 NER json 导入 spaCy

importing NER json into spaCy

我正在尝试将我的 NER 数据导入 spaCy。我有它的 json 格式,我认为这是 spaCy 所需要的。我的目标是训练一个识别一组自定义实体的实体识别系统。 下面是我正在使用的数据的一个小例子。

test =[{'datapoint_id': 0,
  'text': 'westleigh lodge care home, nel pan lane, leigh (wn7 5jt)',
  'entities': [[0, 25, 'building_name'],
   [27, 39, 'street_name'],
   [41, 46, 'city'],
   [48, 55, 'postcode']]},
{'datapoint_id': 1,
  'text': 'land at 2a gerard street, ashton in makerfield, wigan (wn4 9aa)',
  'entities': [(0, 4, 'unit_type'),
   (11, 24, 'street_name'),
   (48, 53, 'city'),
   (55, 62, 'postcode')]},
 {'datapoint_id': 2,
  'text': 'unit 111, timber wharf, worsley street, manchester (m15 4nz)',
  'entities': [(0, 4, 'unit_type'),
   (5, 8, 'unit_id'),
   (10, 23, 'building_name'),
   (24, 38, 'street_name'),
   (40, 50, 'city'),
   (52, 59, 'postcode')]}]

spacy 介绍课程 https://course.spacy.io/en 提供了有关如何将单个示例转换为 spacy 格式而不是大量数据的指南。

调用 nlp(test[0]) 会导致“预期字符串或 'Doc' 作为输入,但得到:。”错误

调用 !python -m spacy convert "/home/test.json" "/home/ouput/" 产生 'KeyError: 'paragraphs' 错误。

我可以

doc = nlp(test[0]['text'])
gold_dict = test[0]['entities']
example = Example.from_dict(doc, {'entities':gold_dict})

example

并循环创建示例列表,但这似乎不是正确的方法,我不确定如何处理结果列表。

我试过

corpus = JsonlCorpus("/home/test.json")
nlp = spacy.blank("en")
data = corpus(nlp)
doc_bin = DocBin(docs=data)

但这似乎没有加载或保存数据集。

显然加载数据必须是非常直接的前言,但我做不到,任何帮助表示赞赏。

对于训练数据,spaCy 只需要将文档设置为您想要的输出,保存在 DocBin 中。因此,对于您的情况,循环遍历数据并创建文档是正确的做法。您可以使用 Example-creating 代码执行此操作并提取 ex.reference 文档(一个示例基本上只是两个文档,一个带注释,一个不带注释),尽管这不是唯一的方法。

请参阅文档训练数据部分中的 the sample code。它与您的数据格式不完全相同,但非常相似。

import spacy
from spacy.tokens import DocBin

nlp = spacy.blank("en")
training_data = [
  ("Tokyo Tower is 333m tall.", [(0, 11, "BUILDING")]),
]
# the DocBin will store the example documents
db = DocBin()
for text, annotations in training_data:
    doc = nlp(text)
    ents = []
    for start, end, label in annotations:
        span = doc.char_span(start, end, label=label)
        ents.append(span)
    doc.ents = ents
    db.add(doc)
db.to_disk("./train.spacy")