我试图将我的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:‘段落错误。
我能做到
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)但这似乎没有加载或保存数据集。
显然,加载数据必须非常直接的前言,但我不能这样做,任何帮助感谢。
发布于 2022-04-14 04:40:51
为了训练数据,spaCy只需要像您想要的输出那样设置的文档,并保存在DocBin中。因此,对于您的情况,循环遍历数据和创建Docs是正确的做法。你可以用你的例子来做--创建代码并取出ex.reference文档(一个例子基本上只是两个文档,一个带注释,一个没有注释),尽管这不是唯一的方法。
请参阅文档的培训数据部分中的样本代码。它与数据的格式不完全相同,但非常相似。
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")https://stackoverflow.com/questions/71859650
复制相似问题