我有一个 CoNLL NER 格式的数据集,它基本上是一个包含两个字段的 TSV 文件。第一个字段包含来自某些文本的标记 - 每行一个标记(每个标点符号也被视为一个标记),第二个字段包含 BIO 格式标记的命名实体标签。
我想将此数据集加载到 spaCy 中,使用我的模型为文本推断新的命名实体标签,并将这些标签写入与新的第三列相同的 TSV 文件中。我所知道的是,我可以通过以下方式推断命名实体:
nlp = spacy.load("some_spacy_ner_model")
text = "text from conll dataset"
doc = nlp(text)
我还设法使用这个 CLI 命令将 CoNLL 数据集转换为 spaCy 的 json 格式:
python -m spacy convert conll_dataset.tsv /Users/user/docs -t json -c ner
但我不知道从这里去哪里。找不到如何将此json
文件加载到 spaCyDoc
格式。我尝试了这段代码(在 spaCy 的文档中找到):
from spacy.tokens import Doc
from spacy.vocab import Vocab
doc = Doc(Vocab()).from_disk("sample.json")
但它会抛出一个错误说ExtraData: unpack(b) received extra data.
。
此外,我不知道如何将doc
对象中的 ners 写回到同一个 TSV 文件中,使标记和 NER 标记与 TSV 文件的现有行对齐。
以下是 TSV 文件的摘录,作为我正在处理的数据的示例:
The O
epidermal B-Protein
growth I-Protein
factor I-Protein
precursor O
. O