将 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")
我正在尝试将我的 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")