如何为TextCategorizer训练创建黄金数据?GoldParse格式咨询
嘿,我来帮你理清楚这个问题!
为TextCategorizer创建黄金数据&生成GoldParse对象指南
一、黄金数据的核心思路
黄金数据本质是标注好正确标签的样本集合,spaCy里通常用GoldParse对象来存储单篇文档的标注信息——它会把文本对应的正确分类标签和文档绑定,供模型训练时计算损失、调整参数。
简单来说,你需要为每一条训练文本做两步:
- 先用spaCy的
nlp对象处理成Doc实例 - 再用
GoldParse给这个Doc打上正确的分类标签(通过cats参数指定)
二、针对你的具体示例的代码实现
你猜测的没错,gold1和gold2确实是GoldParse对象,下面直接给你对应示例的代码:
首先确保导入需要的模块:
import spacy from spacy.gold import GoldParse
然后针对你的样本生成对应的Doc和GoldParse:
# 初始化nlp(用空模型或者预训练模型都可以,训练TextCategorizer的话空模型更灵活) nlp = spacy.blank("en") # 第一个样本:文本"The door is brown.",标签COLOR doc1 = nlp("The door is brown.") # GoldParse的cats参数是字典,键是标签名,值为1.0表示该文档属于这个标签,0.0表示不属于 gold1 = GoldParse(doc1, cats={"COLOR": 1.0, "ANIMAL": 0.0}) # 第二个样本:文本"The horse is running.",标签ANIMAL doc2 = nlp("The horse is running.") gold2 = GoldParse(doc2, cats={"ANIMAL": 1.0, "COLOR": 0.0})
补充说明:
- 如果是多分类任务(多个标签可能同时存在),你可以把对应标签的值设为1.0,其他为0.0;如果是单分类(每个文档只属于一个标签),同样用这种方式标注即可。
- 训练的时候,你需要把
(doc, gold)这样的对组成训练数据集,比如:
TRAIN_DATA = [ (doc1, gold1), (doc2, gold2), # 把你剩下的4个样本也按同样方式添加进来 (nlp("The barn is red."), GoldParse(nlp("The barn is red."), cats={"COLOR":1.0, "ANIMAL":0.0})), (nlp("The flower is yellow."), GoldParse(nlp("The flower is yellow."), cats={"COLOR":1.0, "ANIMAL":0.0})), (nlp("The fish is jumping."), GoldParse(nlp("The fish is jumping."), cats={"ANIMAL":1.0, "COLOR":0.0})), (nlp("The chicken is asleep."), GoldParse(nlp("The chicken is asleep."), cats={"ANIMAL":1.0, "COLOR":0.0})), ]
这样你就可以把这个TRAIN_DATA用到TextCategorizer的训练流程里啦。
内容的提问来源于stack exchange,提问作者W.P. McNeill
相关产品推荐
相关产品推荐

