Spacy 本身不提供数据集格式,但它兼容多种数据格式,例如 JSONL(JSON Lines)、CSV、CoNLL、UDPipe 等。对于 1000 个标签的分类任务,建议使用 JSONL 格式,因为它易于处理大量数据。
以下是一个 JSONL 数据集的示例:
{"text": "这是第一个句子。", "labels": ["标签1", "标签2"]}
{"text": "这是第二个句子。", "labels": ["标签3", "标签4"]}
{"text": "这是第三个句子。", "labels": ["标签5", "标签6"]}
...
每个 JSON 对象代表一个样本,包含两字段:
为了使用 Spacy 处理这种格式的数据集,你可以编写一个自定义的数据加载器。以下是一个简单的示例:
import spacy
from spacy.tokens import DocBin
import json
class JsonlDataset:
def __init__(self, file_path):
self.file_path = file_path
def __iter__(self):
with open(self.file_path, "r", encoding="utf-8") as f:
for line in f:
data = json.loads(line)
doc = spacy.tokens.Doc.from_text(data["text"])
doc.cats = {label: True for label in data["labels"]}
yield doc
# 加载数据集
dataset = JsonlDataset("path/to/your/dataset.jsonl")
# 创建 DocBin 对象
docbin = DocBin(docs=dataset)
# 保存 DocBin 对象
docbin.to_disk("path/to/save/docbin.db")
然后,你可以使用 Spacy 的训练 API 来训练模型:
python
python
import spacy
from spacy.training import Example
nlp = spacy.blank("zh") # 创建一个空白模型,使用中文
nlp.add_pipe("textcat", last=True) nlp.textcat.add_label("标签1")
train_data = DocBin().from_disk("path/to/save/docbin.db")
examples = [] for doc in train_data.get_docs(nlp.vocab): examples.append(Example.from_dict(doc, {"cats": doc.cats}))
optimizer = nlp.begin_training() for i in range(20): # 迭代次数 losses = {} nlp.update(examples, sgd=optimizer, losses=losses) print(losses)
nlp.to_disk("path/to/save/model")
领取专属 10元无门槛券
手把手带您无忧上云